次の方法で共有


頂点ストリームの頻度

頂点ストリームの頻度

古いシェーダ モデルでは、固定機能を含めて、頂点シェーダは頂点ごとに 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