在使用 FX 框架将纹理绑定到使用 FX 框架的采样器时,我遇到了一些问题:
ID3DXEffect->SetTexture(FXShadowtex,Lights->sunlight->ShadowTex)
一旦该纹理绑定到采样器,我就不能再次渲染它(比如说,当太阳改变位置时)。当我这样做时,会出现以下错误:
Direct3D9:(警告):无法渲染到也用作纹理的渲染目标。渲染目标被检测为绑定,但无法检测纹理是否实际用于渲染。
但是,我不知道如何使用 FX 框架或其他任何可靠的方法“取消设置”纹理。我尝试了几件事:
- ID3DXEffect->SetTexture(FXShadowtex,NULL)。这会导致崩溃。
- ID3DXEffect->SetTexture(FXShadowtex,SomeDummy)。这真的很丑。
- 编译后找出与fx文件中定义的采样器对应的采样器索引,并将其设置为NULL:IDirect3DDevice9->SetTexture(i,NULL)。这显然不是很实用。
- 忘记警告。由于无休止的垃圾邮件,这使得 D3D 调试输出毫无用处,而且非常难看。
- 在进行任何渲染之前,从零循环到 fx 文件中定义的采样器数量,并将它们全部设置为 NULL。这也太丑了。
还有其他我忘记的方法吗?解释为什么上述任何“解决方案”都是必要的邪恶也很好。:)