わかりましたので、シェーダーのどこかに次のようなステートメントがあると仮定します (DX9 と DX10 の間でシェーダーを共有するためのレガシー サポートを有効にしていることに注意してください)。
Texture2D DiffuseMap;
問題なくシェーダーをコンパイルできますが、ShaderResourceView を "DiffuseMap" にバインドする方法について少し迷っています。シェーダーを「リフレクト」するとき、定数バッファー内の変数の中で現れると思いました。そうではありません。実際、私はそれをどこにも特定できないようです。では、ShaderResourceView もバインドする必要があるテクスチャの「ステージ」(DX9 用語を使用) をどのように知ることができるでしょうか?
編集:「GetResourceBindingDesc」を使用してサンプラー名を識別できることを発見しました。それが私をまったく助けてくれるかどうかはわかりません:(
Edit2: 同様に、DX9 でも同じであることに気付きませんでした。つまり、サンプラーしか入手できません。
Edit3: 私の Texture2D とサンプラーは次のようになります。
Texture2D DiffuseMap : DiffuseTexture;
sampler DiffuseSampler = sampler_state
{
Texture = (DiffuseMap);
MinFilter = Linear;
MaxFilter = Linear;
};
これで、エフェクト フレーム作業で、セマンティック「DiffuseTexture」によって Texture2D を取得できました。その後、ResourceView(D3D10)/Texture(D3D9) を Texture2D に設定できます。残念ながら、沼地の標準シェーダーを使用して「セマンティクス」を処理する方法はないようです (D3D がどのようにそれを行うかを知ることは素晴らしいことですが、D3D11 効果フレームワークを研究しても、これまでのところどこにも行きませんでした。それを読んでいるようですバイナリ、つまりコンパイルされたデータから出て、そこには「DiffuseSampler」しか見えません)。