頂点ストリームの頻度
頂点ストリームの頻度
古いシェーダ モデルでは、固定機能を含めて、頂点シェーダは頂点ごとに 1 回呼び出された。呼び出しごとに、頂点ストリームからの一意の頂点要素により、入力レジスタが初期化された。
この機能により、頻度の低いレートで入力レジスタのサブセットを初期化できる。この機能は、vs_3_0 をサポートするすべてのデバイスでサポートされる。
アプリケーションは、特定のストリームに対して頻度を設定する。そのストリームのすべての要素は、この値の影響を受ける。頻度とは、"そのストリームからのデータが、いくつの頂点の後に頂点処理コンピュータに取得されるか" ということである。たとえば、頻度が 2 である場合、そのストリームからのデータは 2 頂点ごとに Vn レジスタに取得される。
頂点バッファの頂点オフセットは、次の数式を使って計算する。
VertexOffset = VertexIndex / Divider * StreamStride + StreamOffset
この除算は、整数除算である。
このステートは、頂点ステートとしてステート ブロックに記録される。
ストリームの頻度は、インデックス化されたプリミティブに対しては無視され、現在の頂点シェーダ セットがバージョン 3_0 (固定機能を含む) 以前のものである場合にも無視される。
API の変更
新しい 2 つのメソッドが導入された。
HRESULT IDirect3DDevice9::SetStreamSourceFreq(
UINT StreamIndex, UINT Frequency );
HRESULT IDirect3DDevice9::GetStreamSourceFreq(
UINT StreamIndex, UINT* Frequency );
頻度の範囲は次のとおりである。
0 < 頻度 <= 216 - 1