2

インスタンス データごとに構造化バッファを使用して、Direct3D 10+ でハードウェア インスタンス化を実装しようとしていますが、これまで使用したことがありません。

頂点ごとのデータとインスタンスごとのデータを頂点シェーダーの 1 つの構造に結合するときにインスタンス化を実装する方法を理解しています。つまり、2 つの頂点バッファーを入力アセンブラーにバインドし、DrawIndexedInstanced 関数を呼び出します。

ハードウェアのインスタンス化で構造化バッファを使用する場合に、入力アセンブラをバインドしてドローコールなどを行う手順を誰か教えてもらえますか? どこにも良い例が見つからないようです。

構造化バッファは ShaderResourceViews としてバインドされていると理解していますが、これは正しいですか?

4

1 に答える 1

3

うん、まさにその通り。インスタンスごとの頂点属性を頂点バッファーまたは入力レイアウトに配置して、バッファーの ShaderResourceView を作成し、それを頂点シェーダーに設定しないでください。次に、SV_InstanceID セマンティックを使用して、現在のインスタンスをクエリし、バッファから関連する構造体をフェッチするだけです。

StructuredBuffers は、通常のバッファーと非常によく似ています。唯一の違いは、作成時に D3D11_RESOURCE_MISC_BUFFER_STRUCTURED フラグを指定し、StructureByteStride に入力することと、ShaderResourceView を作成するときに Format が DXGI_UNKNOWN であることです (形式はシェーダーの構造体によって暗黙的に指定されます)。

StructuredBuffer<MyStruct> myInstanceData : register(t0);

は StructuredBuffer の HLSL の構文であり、配列と同じように [] 演算子を使用してアクセスするだけです。

他に不明な点はありますか?

于 2013-07-30T22:02:04.457 に答える