バッファー リソースは、要素にグループ化された、完全に型指定されたデータのコレクションです。 バッファーには、頂点バッファーのテクスチャ座標、インデックス バッファー内のインデックス、シェーダー定数データなどのデータが、定数バッファー、位置ベクトル、通常のベクトル、またはデバイスの状態で格納されます。
バッファー要素は、1 から 4 個のコンポーネントで構成されます。 バッファー要素には、パックされたデータ値 (R8G8B8A8サーフェス値など)、単一の 8 ビット整数、または 4 つの 32 ビット浮動小数点値を含めることができます。
バッファーは、非構造化リソースとして作成されます。 バッファーは非構造化であるため、ミップマップ レベルを含めることはできません。読み取り時にフィルター処理することも、マルチサンプリングすることもできません。
バッファーの種類
Direct3D 11 でサポートされるバッファー リソースの種類を次に示します。
頂点バッファー
頂点バッファーには、ジオメトリの定義に使用される頂点データが含まれています。 頂点データには、位置座標、カラー データ、テクスチャ座標データ、標準データなどが含まれます。
頂点バッファーの最も簡単な例は、位置データのみを含むバッファーです。 次の図のように視覚化できます。
位置データ を含む頂点バッファーの
多くの場合、頂点バッファーには、3D 頂点を完全に指定するために必要なすべてのデータが含まれます。 たとえば、頂点ごとの位置、法線、テクスチャ座標を含む頂点バッファーがあります。 このデータは、通常、次の図に示すように、頂点ごとの要素のセットとして編成されます。
この頂点バッファーには、頂点ごとのデータが含まれています。各頂点には、3 つの要素 (位置、法線、テクスチャ座標) が格納されます。 位置と法線はそれぞれ、通常、3 つの 32 ビット浮動小数点を使用して指定され、テクスチャ座標は 2 つの 32 ビット浮動小数点を使用して指定されます。
頂点バッファーからデータにアクセスするには、アクセスする頂点に加えて、次の追加のバッファー パラメーターを知る必要があります。
- Offset - バッファーの先頭から最初の頂点のデータまでのバイト数。
- BaseVertexLocation - 適切な描画呼び出しで使用されるオフセットから最初の頂点までのバイト数。
頂点バッファーを作成する前に、そのレイアウトを定義する必要があります。 入力レイアウト オブジェクトが作成されたら、それを Input Assembler (IA) ステージにバインドします。
インデックス バッファー
インデックス バッファーには頂点バッファーへの整数オフセットが含まれており、プリミティブをより効率的にレンダリングするために使用されます。 インデックス バッファーには、16 ビットまたは 32 ビットインデックスのシーケンシャル セットが含まれています。各インデックスは、頂点バッファー内の頂点を識別するために使用されます。 インデックス バッファーは、次の図のように視覚化できます。
インデックス バッファーに格納されているシーケンシャル インデックスは、次のパラメーターを使用して配置されます。
- オフセット - インデックス バッファーのベース アドレスからのバイト数。
- StartIndexLocation - ベース アドレスとオフセットからの最初のインデックス バッファー要素を指定します。 開始位置は、レンダリングする最初のインデックスを表します。
- IndexCount - レンダリングするインデックスの数。
インデックス バッファーの開始 = インデックス バッファーのベース アドレス + オフセット (バイト) + StartIndexLocation * ElementSize (バイト);
この計算では、ElementSize は各インデックス バッファー要素のサイズであり、2 バイトまたは 4 バイトです。
定数バッファー
定数バッファーを使用すると、シェーダー定数データをパイプラインに効率的に提供できます。 定数バッファーを使用して、ストリーム出力ステージの結果を格納できます。 概念的には、定数バッファーは、次の図に示すように、単一要素の頂点バッファーと同じように見えます。
の図
各要素は、格納されたデータの形式によって決定される 1 から 4 のコンポーネント定数を格納します。
定数バッファーでは、他のバインド フラグと組み合わせることができない 1 つのバインド フラグのみを使用できます。
シェーダーからシェーダー定数バッファーを読み取る場合は、HLSL 読み込み関数を使用します。 各シェーダー ステージでは、最大 15 個のシェーダー定数バッファーを使用できます。各バッファーは、最大 4096 個の定数を保持できます。
関連トピック