HLSL着色器(效果)中的SetFloat()不起作用 – variables停留在0

我有一个问题,我想在我的着色器中设置两个简单的浮点variables。 我在这个项目中有十几个其他着色器,但是由于某种原因,我在这个项目中有一个我不能发现的bug。

这是我正在做的事情。 为了简洁起见,我会对其进行编辑,但请尽量保持完整。 任何建议都非常欢迎!

首先,将video的宽度和高度存储在表示着色器的类中,然后调用设置variables的函数。

_hVideoWidth = _ptrEffect->GetParameterByName(0, "videoWidth"); _hVideoHeight = _ptrEffect->GetParameterByName(0, "videoHeight"); pShader->_videoWidth = pCameraManager->_backBufferWidth; pShader->_videoHeight = pCameraManager->_backBufferHeight; pShader->SetActive(); _ptrEffect->SetFloat(_hVideoWidth, _videoWidth); _ptrEffect->SetFloat(_hVideoHeight, _videoHeight); 

然后我做我的绘画:

  UINT cPasses; pShader->GetEffect()->Begin(&cPasses, 0); // Drawing code here pShader->GetEffect()->End(); 

我的着色器将使用videoHeight / Width来缩放到视口。 如果我硬编码的宽度和高度,这一切都完美的作品。

 cbuffer VideoData : register(b0) { float videoWidth; float videoHeight; } VertexShaderOutput UILineVertexShaderFunction(VertexShaderInput input) { VertexShaderOutput output; output.Position = input.Position; // Convert pixel coords to (-1, +1) output.Position.x = output.Position.x / videoWidth * 2.0f - 1.0f; output.Position.y = output.Position.y / videoHeight * 2.0f - 1.0f; output.Color = input.Color; return output; } 

然而,神秘的是,在这一点上着色器的videoWidth和videoHeight仍然为零。 如果我只是硬编码这两个expression式分别为1280和1024,它完美的作品。

所以,关于我设置videoWidth和videoHeight的方式,有一些东西。 我已经证实,在我调用SetFloat()的时候,他们实际上传递了正确的值,但是他们似乎从来没有把它变成着色器variables。

任何建议或任何明显的? 即使猜测也会有所帮助,我已经看了一会儿了!

谢谢,戴夫

除了在绘制调用周围调用Begin()End() ,还必须为效果系统调用BeginPass()EndPass()来设置所有着色器参数和状态。