Microsoft DirectX 8.0 (C++)

カラー頂点シェーダ

ここでは、位置とディフィーズ色を持つ単純な頂点シェーダを初期化および使用するために必要なステップについて説明する。

最初のステップでは、位置と色を格納する構造体を宣言する。これを、次のサンプル コードに示す。

struct XYZBuff
{
    FLOAT x, y, z;
    D3DCOLOR color;
};

struct ColBuf
{
    D3DCOLOR color;
};

#define XYZBUFF (D3DFVF_XYZ)
#define COLBUFF (D3DFVF_DIFFUSE)

次のステップでは、頂点シェーダ宣言を作成する。これを、次のサンプル コードに示す。

DWORD decl[] =
{
    D3DVSD_STREAM(0),
    D3DVSD_REG( D3DVSDE_POSITION, D3DVSDT_FLOAT3 ),
    D3DVSD_STREAM(1),
    D3DVSD_REG( D3DVSDE_DIFFUSE, D3DVSDT_D3DCOLOR),
    D3DVSD_END()
};

次のステップでは、IDirect3DDevice8::CreateVertexShader メソッドを呼び出して頂点シェーダを作成する。

g_d3dDevice->CreateVertexShader( decl, NULL, &vShader, 0);

CreateVertexShader の第 2 パラメータに NULL を渡して、この頂点シェーダで固定機能パイプラインを使用することを Direct3D に指示する。

頂点バッファと頂点シェーダは、作成後はいつでも使用できる。次のサンプル コードは、頂点シェーダの設定方法、ストリーム ソースの設定方法、および新しい頂点シェーダを使用する三角形リストの描画方法を示している。

g_d3dDevice->SetVertexShader( &vShader );
g_d3dDevice->SetStreamSource( 0, xyzbuf, 4 * sizeof(FLOAT));
g_d3dDevice->SetStreamSource( 1, colbuf, 2 * sizeof(FLOAT));
g_d3dDevice->SetIndices( pIB, 0 );
g_d3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, max - min + 1, 0, count / 3 );