我正在尝试在 DirectX9 中实现非常基本的延迟着色。我现在只能使用 2 个渲染目标(后台缓冲区和另一个纹理)。所以我可以渲染法线或深度,但不能同时渲染两者。我的问题是有人可以解释如何渲染到多个纹理目标。我的印象是我可以使用类似下面的代码。它仅在索引为零时才有效,这可能意味着其中一个表面没有被写入。
d3dDevice->SetRenderTarget(0, surfaceDepth);
d3dDevice->SetRenderTarget(1, surfaceNormal);
我收到此消息: Direct3D9:(警告):无法渲染到也用作纹理的渲染目标。渲染目标被检测为绑定,但无法检测纹理是否实际用于渲染。
我知道可能有几件事可能与此消息有关...我想是否有人可以解释如何正确使用多个渲染目标索引。您是否还更改了每个渲染目标的技术。现在我的着色器有一个“普通技术”和一个“深度技术”和管道的“后处理技术”。
谢谢你的时间。
这是更多代码:
SetTransforms();
d3dDevice->SetRenderTarget(0, surfaceDepth);
HR(d3dDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("depthTech");
scenes[sceneIndex]->render(dt);
d3dDevice->SetRenderTarget(1, surfaceNormal);
HR(d3dDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("normalTech");
scenes[sceneIndex]->render(dt);