方法: 複数の出力ストリームのインデックスを作成する
シェーダー モデル 5 では、ジオメトリ シェーダーは最大 4 つの個別ストリームをサポートできます。 つまり、宣言されたストリームの数に応じて、1 つのシェーダーで 1 つの出力ストリームと 4 つの出力ストリームの間で出力できます。
複数の出力ストリームのインデックスを作成するには
ストリーム テンプレートの種類を使用してデータ ストリームを定義します。
inout PointStream<OutVertex1> myStream1,
ストリーム テンプレートの種類を使用して、2 つ目のデータ ストリームを定義します。
inout PointStream<OutVertex2> myStream2 )
ストリーム出力オブジェクトの組み込み関数 (Append や RestartStrip など) を使用して、いずれかの (または両方) ストリームにデータを出力します。
void MyGS( InVertex verts[2], inout PointStream<OutVertex1> myStream1, inout PointStream<OutVertex2> myStream2 ) { OutVertex1 myVert1 = TransformVertex1( verts[0] ); OutVertex2 myVert2 = TransformVertex2( verts[1] ); myStream1.Append( myVert1 ); myStream2.Append( myVert2 ); }
1 つの出力ストリームを使用する場合は、三角形のストリップ、ライン ストリップ、またはポイント リストを出力できます。 三角形と線のストリップをストリーム 出力バッファーに格納すると、それぞれ三角形と線の一覧に展開されます。 また、1 つのストリームをラスター化して、メモリ バッファーに送信しないようにすることもできます。
複数の出力ストリームを使用する場合、すべてのストリームにポイントが含まれている必要があり、最大 1 つの出力ストリームをラスタライザーに送信できます。 より一般的には、アプリケーションはストリームをラスター化しません。
データをバッファーにストリーミングした後、そのデータを使用して、バッファーの塗りつぶしに使用したプリミティブ型だけでなく、任意のプリミティブ型をレンダリングできます。
ジオメトリ シェーダーの合計出力は 1024 スカラーに制限されています。 複数のストリームが存在する場合、スカラーの数は、最大のストリーム の種類に最大頂点数を乗算して計算されます。
シェーダー モデル 4 とシェーダー モデル 5 の違い:
シェーダー モデル 4:
- ストリーム出力のスカラーの最大数は 64 です。
- コンポーネントごとのレジスタ マスクは、インデックス範囲全体で一致する必要があります。
- ストリーム出力のスカラーの最大数は 128 です。
- コンポーネントごとのレジスタ マスクは、インデックス範囲全体で一致する必要はありません。
- 出力の動的インデックス作成は、すべてのストリームで有効である必要があります。
- 補間モードは、ストリームに一致する必要はありません。