在使用 FX 框架将纹理绑定(bind)到使用 FX 框架的采样器时,我遇到了一些问题:
ID3DXEffect->SetTexture(FXShadowtex,Lights->sunlight->ShadowTex)
一旦该纹理绑定(bind)到采样器,我就不能再次对其进行渲染(比如说,当太阳改变位置时)。当我这样做时,会出现以下错误:
Direct3D9: (WARN) :Can not render to a render target that is also used as a texture. A render target was detected as bound, but couldn't detect if texture was actually used in rendering.
但是,我不知道如何使用 FX 框架或其他任何可靠的方法“取消设置”纹理。我尝试了几件事:
还有其他我忘记的方法吗?解释为什么上述任何“解决方案”都是必要的邪恶也很好。 :)
最佳答案
找出哪个纹理单元绑定(bind)到该采样器制服(请参阅 msdn 上的 ID3DXEffect 类),然后简单地使用 IDirect3DDevice9::SetTexture() 取消设置纹理。
我认为这个解决方案在这种情况下是最不难看的。但是,您始终可以编写自己的效果类(顺便说一句,这非常简单)。
例如使用 D3DXCompileShaderFromFile然后您可以通过返回的常量表并使用 IDirect3DDevice9::SetPixelShaderConstantF 设置统一值.请注意,在这种情况下,矩阵被设置为列优先(这意味着您必须在着色器中从左侧乘以 vector )。一个有效的解决方案是为常量分配一个连续的空间并在一次调用中设置它们。
关于c++ - 使用 ID3DXEffect->SetTexture 取消绑定(bind)纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034101/