Microsoft DirectX 8.0 (C++)

柔軟な頂点フォーマットと頂点シェーダ

Microsoft® Direct3D® for Microsoft DirectX® 8.0 は、単一入力ストリームの固定機能頂点処理パイプラインを使用するためのプログラミング モデルを簡素化し、これまでの DirectX リリースと同様の機能を提供する。この場合、頂点シェーダは、現在の頂点シェーダを設定するときに頂点シェーダ ハンドルの代わりとして渡された柔軟な頂点フォーマット (FVF) コードから成る。頂点シェーダのハンドル空間はランタイム ライブラリによって管理され、この用途のために、有効な FVF コードのハンドルが予約されている。

FVF コードを現在の頂点シェーダとして設定すると、頂点処理はストリーム ゼロからのみロードされ、頂点要素は FVF コードの定義に従って変換される。

次のサンプル コードは、C++ アプリケーションにおける FVF コードの頂点シェーダとしての使用方法を示している。

まず最初に、カスタム頂点タイプの構造体を定義し、頂点を初期化する。この例では、三角形をレンダリングするため、3 つの頂点が初期化される。

// このサンプル コードで、d3dDevice は、
// IDirect3DDevice8 インターフェイスへの有効なポインタであるとする。

struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw; // 頂点のトランスフォーム後の位置座標。
    DWORD color;        // 頂点カラー。
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

CUSTOMVERTEX g_Vertices[] =
{
    { 150.0f,  50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
    { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
    {  50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
};

次に、ストリーム ゼロを使用してプリミティブをレンダリングする。

d3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );
d3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

詳細については、「頂点シェーダ」を参照すること。