4

定数バッファーを持つ次の HLSL 頂点シェーダー フラグメントがあるとします。

cbuffer matrixBuffer 
{
    matrix worldMatrix;
    matrix viewMatrix;
    matrix projectionMatrix;
};

cbuffer matrixBuffer2
{
    matrix worldMatrix2;
    matrix viewMatrix2;
    matrix projectionMatrix2;
};

定数バッファーの変数は、actual と関数で使用されるため、それらを設定する必要があります。

そしてC ++では、次の構造体を宣言しました:

struct MatrixType
{
    D3DMATRIX world;
    D3DXMATRIX view;
    D3DXMATRIX projection;
};

私のアプリの初期化では、定数バッファー ポインター ID3D11Buffer* を作成します。

後でフレームごとの方法で定数バッファーを更新します。つまり、バッファーをマップし、サブリソースを更新し、バッファーをマップ解除し、頂点シェーダーでバッファーを設定します。

定数バッファーが 1 つしかない場合はすべて問題ありませんが、ここに私の質問があります。

directx はバッファ間でどのように違いますか? たとえば、これを達成する方法を worldMatrix2 に設定したいですか?

msdn リファレンスを読みましたが、答えがありませんでした。

サイズと要素が同じ定数バッファを 2 つ以上持つことはできますか? それらは連続したメモリに格納されているので、バッファを設定すると、HLSL で宣言された順に設定されますか?

4

2 に答える 2

0

シェーダーでシェーダー リソース ビューをバインドする場合も、同じ原則が適用されます。この投稿も役立つかもしれません: シェーダーでの DirectX シェーダー リソース ビュー

于 2013-10-28T13:02:12.310 に答える