0

毎回ファイルシステムからリロードすることなく、頂点シェーダー、ピクセルシェーダーなどをデバイス/デバイスコンテキストにバッファリングするための最良の方法は何ですか?

ID3D11Device :: CreateVertexShader http://msdn.microsoft.com/en-us/library/windows/desktop/ff476524(v=vs.85).aspx

ID3D11DeviceContext :: VSSetShader http://msdn.microsoft.com/en-us/library/windows/desktop/ff476493(v=vs.85).aspx

Device :: CreateVertexShaderは、システム(GPUではない)のメモリ内のシェーダーの単一インスタンスをバッファリングしますか?1つ以上バッファリングできますか?

DeviceContext :: CreateVertexShaderは、GPU(システムではなく)のメモリ内のシェーダーの単一インスタンスをバッファリングしますか?1つ以上バッファリングできますか?

システム内でシェーダーをバッファリングするための推奨される方法は何ですか?

ありがとう!

4

1 に答える 1

2

ID3D11Device :: CreateVertexShaderを使用する場合、それらへの参照を取得し、GPUで頂点シェーダーを表します。したがって、3つの頂点シェーダーがある場合は次のようにします。

ID3D11VertexShader* vsref1;
ID3D11VertexShader* vsref2;
ID3D11VertexShader* vsref3;

CreateVertexShader(bytecode1,sizeofbytecode1,NULL,&vsref1);
CreateVertexShader(bytecode2,sizeofbytecode2,NULL,&vsref2);
CreateVertexShader(bytecode3,sizeofbytecode3,NULL,&vsref3);

(クラスメンバーのように)vsref1、2、および3を追跡していることを確認してください。作成されると、GPUにアップロードされます。再度実行する必要はありません。VSSetShaderが呼び出され、使用するものが選択されます。

次に、以下を使用して、いつでも頂点シェーダーをパイプラインに割り当てることができます。

VSSetShader(vsref1,NULL,0);

また

VSSetShader(vsref2,NULL,0); 

これはアップロードを引き起こしません。次のDraw呼び出しに使用するVertexShaderをGPUに指示するだけです。

于 2013-02-01T13:54:56.810 に答える