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