DirectX9 で非常に基本的なディファード シェーディングを実装しようとしています。現在、2 つのレンダー ターゲット (バック バッファーと別のテクスチャ) しか使用できません。したがって、法線または深度をレンダリングできますが、両方はレンダリングできません。私の質問は、誰かが複数のテクスチャ ターゲットにレンダリングする方法を説明できるかどうかです。以下のコードのようなものを使用できるという印象を受けました。インデックスがゼロの場合にのみ機能します。これは、おそらくサーフェスの 1 つが書き込まれていないことを意味します。
d3dDevice->SetRenderTarget(0, surfaceDepth);
d3dDevice->SetRenderTarget(1, surfaceNormal);
次のメッセージが表示されます: Direct3D9: (WARN) :テクスチャとしても使用されているレンダー ターゲットにレンダリングできません。レンダー ターゲットがバインドされていることが検出されましたが、レンダリングでテクスチャが実際に使用されたかどうかを検出できませんでした。
このメッセージに関連する可能性のあることがいくつかあると思います...複数のレンダー ターゲット インデックスを正しく使用する方法を誰かが説明できればと思います。また、レンダー ターゲットごとに手法を変更しますか。現在、私のシェーダーには、パイプライン用の「通常のテクニック」と「深さのテクニック」と「後処理のテクニック」があります。
御時間ありがとうございます。
ここにいくつかのコードがあります:
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);