コンパイル済みのシェーダを使用し、リフレクションを使用して頂点シェーダの入力レイアウトを自動的に生成するDirectXコードをいくつか記述しようとしています。私は、これはそれが受け付ける入力され、インスタンス化を利用するように設計されたシンプルな頂点シェーダーを持っている:DirectX 11頂点シェーダリフレクション
struct VertexIn
{
// Per-vertex data
float3 pos : POSITION;
float4 color : COLOR;
// Per-instance data
matrix worldMatrix : WORLDMATRIX;
};
そして、私のレイアウト、私は手でそれを書くとしたら、次のようになります。
// Per-vertex data
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
// Per-instance data.
{ "WORLDMATRIX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }
私はコンパイルされたシェーダを反映すると
は、私は、入力パラメータの正しい数を取得するが、私はD3D11_SIGNATURE_PARAMTER_DESC
を介して入力の説明を読んしようとすると、私はD3D11_INPUT_ELEMENT_DESC
メンバーInputSlot
、InputSlotClass
とInstanceDataStepRate
を埋めるために必要な詳細情報を見つけることができませんか?この情報について間違った説明を探しているのですか、または反映によって不可能な詳細をインスタンス化していますか?
これが可能でない場合は、予想される頂点の入力レイアウトを渡してすべてのパラメータをチェックすることが他の唯一の選択肢だと思いますか?
ああ、それはシェイダー自体のコメントに関する公正な点ですが、実際にはスロット番号について何も言及していません。私はセマンティックなアイデアが好きで、試してみるかもしれない。あなたは、入力データが何であるかを知る必要があると言いますが、その意味は何ですか? IASetVertexBuffersなどの呼び出し? – TheRarebit
はい、私はあなたが持っている頂点データ(例えば、IASetVertexBuffersで設定されたもの)を知る必要があることを意味しました。シェーダにスキームを定義して、最終的に頂点データを持つ必要があることを定義することもできますが、 – MuertoExcobito
ええ、私は理解しています。すべてが自動化できるわけではありません。私は、入力レイアウトの生成が自動化されているというアイデアが好きです。フィードバックのための歓声。 – TheRarebit