Microsoft DirectX 8.0 (C++)

IDirect3DDevice8::CreateVertexShader

頂点シェーダを作成し、作成が成功した場合は、そのシェーダをカレント シェーダとして設定する。

HRESULT CreateVertexShader(
  CONST DWORD* pDeclaration,
  CONST DWORD* pFunction,
  DWORD* pHandle,
  DWORD Usage
);

パラメータ

pDeclaration
[in, out] 頂点シェーダ宣言トークン配列へのポインタ。このパラメータではシェーダへの入力を定義し、入力データ ストリーム中の頂点要素のシェーダによる使用方法も指定する。
pFunction
[in, out] 頂点シェーダ機能トークン配列へのポインタ。このパラメータでは、各頂点に適用する操作を定義する。このパラメータを NULL にすると、固定機能パイプライン用のシェーダが作成される。pDeclaration で示されているパラメータ宣言が現在の宣言になり、その後 IDirect3DDevice8::SetVertexShader の呼び出しでハンドル ポインタを指定する場合は、このパラメータ宣言を設定できる。

このパラメータを NULL 以外にすると、シェーダはプログラム可能になる。

pHandle
[in, out] 返される頂点シェーダのハンドルへのポインタ。この値は NULL に設定できない。
Usage
[in] 頂点シェーダに対する使用方法の制御情報。次のフラグを設定できる。
D3DUSAGE_SOFTWAREPROCESSING
ソフトウェア頂点処理で使用する頂点シェーダであることを示す。D3DRENDERSTATETYPE 列挙型の D3DRS_SOFTWAREVERTEXPROCESSING メンバが TRUE のときに使用する頂点シェーダに対しては D3DUSAGE_SOFTWAREPROCESSING フラグを設定しなければならず、D3DRS_SOFTWAREVERTEXPROCESSING が FALSE のときの頂点シェーダに対してはこのフラグを設定してはならない。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_INVALIDCALL
D3DERR_OUTOFVIDEOMEMORY
E_OUTOFMEMORY

注意

頂点シェーダは、シェーダの宣言と機能を指定する 2 つのトークン配列によって定義される。トークン配列は、1 つ以上の DWORD トークンで構成されており、配列の末尾は特殊な値 0xFFFFFFFF のトークンで示される。

シェーダの宣言はシェーダの静的な外部インターフェイスを定義しており、頂点レジスタ入力に対するストリーム データのバインドや、シェーダの定数メモリにロードされる値などが含まれる。シェーダの機能では、シェーダがデバイスにバインドされている間に各頂点に対する処理のために実行される命令の配列として、シェーダの動作が定義されている。機能配列を指定しないでシェーダを作成すると、そのシェーダがカレント シェーダのときには、固定機能の頂点処理が適用される。

宣言のトークン配列を生成するために使用するマクロの定義については、d3d8types.h を参照すること。

動作環境

  ヘッダー : d3d8.h で宣言。
  インポート ライブラリ : D3d8.lib を使用。

参照

IDirect3DDevice8::DeleteVertexShaderD3DXAssembleShaderD3DXAssembleShaderFromFileAD3DXAssembleShaderFromFileWD3DXDeclaratorFromFVF