Renderdoc の daraw API 呼び出しとその関数

Renderdoc の daraw API 呼び出しとその関数

renderdoc の呼び出し処理では、PSSetShaderResource、VSSetShader、PSSetShader の 3 つのメソッドが使用されます。これら 3 つのメソッドのメソッドは次のとおりです。 

1. PSSetShaderResource: このメソッドは、テクスチャまたはバッファ リソースをピクセル シェーダ ステージにバインドするために使用されます。ピクセル シェーダーでは、このリソースを使用して現在のピクセルをサンプリングまたは計算します。このメソッドでは、シェーダステージのリソースとリソース自体のバインディング位置(スロット)を指定する必要があります。

2. VSSetShader: このメソッドは、レンダリング パイプラインの頂点シェーダー ステージで頂点変換やその他の計算を実行するように頂点シェーダーを設定します。この方法では、シェーダ ステージ内の頂点シェーダがバインドされる場所とシェーダ自体を指定する必要があります。

3. PSSetShader: このメソッドは、レンダリング パイプラインのピクセル シェーダー ステージでテクスチャ サンプリング、照明計算、その他のピクセル レベルの計算を実行するようにピクセル シェーダーを設定するために使用されます。この方法では、シェーダー ステージ内のピクセル シェーダーがバインドされる場所とシェーダー自体を指定する必要があります。

Map と Unmap は、グラフィック レンダリング API で一般的に使用される 2 つのメソッドであり、通常、これらは GPU のバッファを CPU にマップするために使用され、CPU がバッファ内のデータにアクセスして変更できるようになります。

具体的には、Map メソッドは GPU のバッファを CPU のメモリ空間にマップし、CPU メモリのバッファ データへのポインタを返します。このポインタを介して、CPU はバッファ内のデータを直接読み取ったり、変更したりすることができます。これは、バッファ データをリアルタイムで更新する必要があるアプリケーションにとって非常に役立ちます。CPU がバッファ データの読み取りまたは変更を完了したら、Unmap メソッドを呼び出してマップを解除する必要があります。これにより、GPU がバッファの制御を取り戻すことができるようになります。

マッピングとアンマッピングには CPU と GPU 間のデータ転送が含まれるため、Map メソッドと Unmap メソッドを頻繁に呼び出すとパフォーマンスに一定の影響が生じる可能性があることに注意してください。したがって、これらの方法を使用する場合、レンダリングのパフォーマンスを向上させるために、マッピングとマッピング解除の数を最小限に抑える必要があります。

IASetVertexBuffers、IASetInputLayout、IASetIndexBuffer の 3 つのメソッド:

これらはそれぞれ頂点バッファ、入力レイアウト、インデックス バッファを設定するために使用され、ジオメトリを構築するための基本操作です。

IASetVertexBuffers メソッドは、頂点バッファーを設定するために使用されます。頂点バッファーは、頂点の位置、法線、テクスチャ座標などの頂点データを保存する GPU 内のメモリです。このメソッドは、入力アセンブラー ステージ (入力アセンブラー) で 1 つ以上の頂点バッファーを頂点シェーダーにバインドし、ジオメトリを構築します。このメソッドでは、GPU がデータを正しく解析できるように、バッファーのフォーマット、オフセット、ステップ サイズなどの属性を設定できます。通常、IASetVertexBuffers の後に、IASetInputLayout を呼び出して入力レイアウトを設定する必要があります。

IASetInputLayout メソッドは、入力レイアウトを設定するために使用されます。入力レイアウトは、頂点データの構成と形式を定義します。頂点バッファ内のデータを解釈する方法を GPU に指示します。通常、入力レイアウトには頂点位置、法線、テクスチャ座標などの情報が含まれており、各情報の形式や位置は入力レイアウトを通じて指定できます。IASetInputLayout を呼び出した後、GPU は入力レイアウトに従って頂点バッファ内のデータを解析し、ジオメトリを生成します。

IASetIndexBuffer メソッドは、インデックス バッファーの設定に使用されます。インデックス バッファーは、三角形の 3 つの頂点のインデックスなど、ジオメトリを構成するインデックス データを保存する GPU 内のメモリです。インデックス バッファーを設定すると、GPU はインデックスを使用してジオメトリを構築できるため、同じ頂点データの繰り返し送信が回避され、レンダリング効率が向上します。このメソッドでは、インデックス バッファのフォーマットやオフセットなどの属性を指定する必要があります。

これら 3 つのメソッドを合わせて Direct3D の入力アセンブリ ステージを形成し、頂点データをジオメトリに変換するために使用されます。

VSSetConstantBuffers メソッドと PSSetConstantBuffers メソッドの機能:

これらは、GPU がレンダリング中にこれらの定数データを使用できるように、定数バッファーを頂点シェーダーとピクセル シェーダーにバインドするために使用されます。

定数バッファは GPU に保存されるメモリ バッファで、ビュー マトリックス、投影マトリックス、照明パラメータなどの定数データを保存します。これらの定数データは、GPU がシーンを正しくレンダリングできるように、頂点シェーダーとピクセル シェーダーで使用できます。定数バッファは通常、動的に更新されます。つまり、その中の定数データはフレームごとに更新されます。

VSSetConstantBuffers メソッドは、定数バッファーを頂点シェーダーにバインドするために使用され、頂点シェーダーがその中の定数データを使用できるようにします。このメソッドでは、バインドするバッファのインデックス番号とバインドするバッファ オブジェクトを指定する必要があります。

PSSetConstantBuffers メソッドは、定数バッファーをピクセル シェーダーにバインドするために使用され、ピクセル シェーダーがその中の定数データを使用できるようにします。このメソッドでは、バインドするバッファのインデックス番号とバインドするバッファ オブジェクトを指定する必要があります。

これら 2 つの方法は、開発者が定数バッファを柔軟に管理して、レンダリング プロセス中に GPU がバッファ内の定数データを正しく使用できるようにするのに役立ちます。定数バッファは通常、基本的なシェーディング、テクスチャ マッピング、法線マッピングなどの一般的なレンダリング手法を実装するために使用されます。

DrawIndexedInstanced メソッドの機能:

これはジオメトリを描画するために使用されます。具体的には、インデックス バッファを使用して記述された一連のジオメトリ インスタンスを描画でき、各インスタンスは異なる定数バッファ データを使用できます。

このメソッドは 4 つのパラメータを受け入れます。

IndexCountPerInstance: インスタンスごとに使用するインデックスの数。

InstanceCount: 描画するインスタンスの数。

StartIndexLocation: 描画するインデックス バッファ内の最初のインデックス。

BaseVertexLocation: 描画されるジオメトリ内の頂点バッファのベース オフセット。

DrawIndexedInstanced メソッドを呼び出す前に、頂点バッファー、入力レイアウト、インデックス バッファーを設定し、定数バッファーを頂点シェーダーとピクセル シェーダーにバインドする必要があります。その後、DrawIndexedInstanced メソッドを使用して、指定された数のインスタンスを画面に描画します。

DrawIndexedInstanced メソッドを使用すると、インスタンス レンダリング (インスタンス レンダリング) などの高度なレンダリング技術を実装できます。つまり、複数のインスタンスが 1 回のレンダリング呼び出しで描画され、各インスタンスは位置、色、ズームなどの異なる属性を持ちます。 。この手法により、レンダリング呼び出しの数が効果的に削減され、レンダリング効率が向上します。

さらに、DrawIndexedInstanced メソッドは、ハードウェア インスタンス化 (ハードウェア インスタンス化) もサポートしています。つまり、ハードウェアを使用してインスタンス化レンダリングを実装し、レンダリング効率を向上させ、CPU 負荷を軽減します。ハードウェアのインスタンス化では、開発者は複数のインスタンスの属性を定数バッファーにパックし、GPU に渡す必要があります。GPU はこれらの定数データを使用して複数のインスタンスを描画するため、レンダリング効率が向上します。

おすすめ

転載: blog.csdn.net/x_xingduo_2315/article/details/131953433