Microsoft DirectX 8.0 (Visual Basic) |
頂点シェーダの宣言部分では、シェーダの静的な外部インターフェイスを定義している。頂点シェーダ宣言には次の情報が含まれる。
宣言配列は、複数のトークンで構成される Long の 1 次元配列である。各トークンは 1 つまたは複数の Long である。1 Long トークン値 0xFFFFFFFF は、宣言配列の末尾を表す特別なトークンである。1 Long トークン値 0x00000000 は、パディング トークンであり、宣言の解析時には無視される。このパディング トークンによって、宣言内でより複雑な編集を実行できる。0x00000000 は、複数語のトークンの最初の Long に続く Long に対して有効な値であることに注意すること。
次のサンプル コードは、宣言の記述方法を示している。この例では、単純な構造体を使って頂点を定義する方法を示す。
Type Vertex Position As D3DVECTOR Normal As D3DVECTOR Diffuse As D3DCOLORVALUE TexCoord0 As D3DVECTOR2 End Type
次のサンプル コードは、上記の同じ頂点構造体を宣言子として定義する方法を示している。
Dim Decl(5) As Long Dim FVF as Long Decl(0) = D3DVSD_STREAM(0) Decl(1)= D3DVSD_STREAM( 0 )D3DVSD_REG( D3DVSDE_POSITION, D3DVSDT_FLOAT3 ), Decl(2)= D3DVSD_STREAM( 0 )D3DVSD_REG( D3DVSDE_NORMAL, D3DVSDT_FLOAT3 ), Decl(3)= D3DVSD_STREAM( 0 )D3DVSD_REG( D3DVSDE_DIFFUSE, D3DVSDT_D3DCOLOR ), Decl(4)= D3DVSD_STREAM( 0 )D3DVSD_REG( D3DVSDE_TEXCOORD0, D3DVSDT_FLOAT2 ), Decl(5)= D3DVSD_STREAM( 0 )D3DVSD_END() FVF = D3DFVF_POSITION Or D3DFVF_NORMAL Or D3DFVF_DIFFUSE Or _ D3DFVF_TEX0 Or D3DFVF_TEXCOORDSIZE2(0);
宣言子はデータ ストリームを 0 に設定し、3 つの Long 値で構成される位置座標と法線ベクトルを定義し、4 成分符号なしバイトで構成されるディフューズ成分を定義し、2 つの Long 値で構成されるテクスチャ座標の組を定義する。
固定機能頂点シェーダを使用する際、頂点入力レジスタのマッピングは固定される。これにより、位置座標や法線といった特定の頂点要素は頂点入力メモリ内の特定のレジスタ位置に置かれる必要がある。これらの割り当ては、FVF コードを Direct3DDevice8.SetVertexShader に渡すときに自動的に行われる。明示的なシェーダ宣言を使用する場合は、D3DVSDE プリプロセッサ マクロが、特定の要素のロード先となる頂点入力位置を定義する。宣言トークン配列の生成に使用するマクロの定義については、\Samples\Multimedia\VBSamples\Common\D3DShaders.bas を参照すること。
シェーダ宣言トークン タイプとビット定義については、「頂点シェーダ宣言子関数」を参照すること。
注 固定機能頂点シェーダを使うときは、Direct3DDevice8.SetStreamSource の頂点ストライド セットと頂点サイズが同じサイズでなければならない。宣言を使用する頂点シェーダの場合は、ストリーム ストライドは宣言ストライドより大きくてもかまわない。