使用FX框架将纹理绑定到使用FX框架的采样器时,我遇到了一些问题:
ID3DXEffect->SetTexture(FXShadowtex,Lights->sunlight->ShadowTex)
一旦该纹理被绑定到采样器,我就不允许再次渲染它(比方说,当太阳改变位置时)。当我这样做时,出现了这个错误:
Direct3D9 :(警告):无法渲染到也用作纹理的渲染目标。渲染目标被检测为绑定,但无法检测纹理是否实际用于渲染。
然而,我无法找到如何使用FX框架或其他任何可靠的“取消设置”纹理。我尝试了一些事情:
还有其他我忘记的方法吗?解释为什么上述任何“解决方案”都是必要的恶魔也会没问题。 :)
答案 0 :(得分:1)
找出哪个纹理单元绑定到该采样器均匀(请参阅msdn上的ID3DXEffect类),然后使用IDirect3DDevice9 :: SetTexture()简单地取消设置纹理。
我认为这种解决方案在这种情况下是最不丑的。但是,您总是可以编写自己的效果类(这非常简单btw)。
使用例如D3DXCompileShaderFromFile,然后您可以浏览返回的常量表并使用IDirect3DDevice9::SetPixelShaderConstantF设置统一值。请注意,在这种情况下,矩阵设置为column-major(这意味着您必须将着色器中左侧的向量相乘)。一个有效的解决方案是为常量分配一个连续的空间,并在一次调用中设置它们。