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 に設定します。これも醜い。
私が忘れている他のアプローチはありますか?上記の「解決策」のいずれかが必要悪である理由を説明することも問題ありません。:)