Microsoft DirectX 8.0 (C++)

ジオメトリ パイプラインへの頂点シェーダの組み込み

処理中に、プログラム可能な頂点シェーダは、Microsoft® Direct3D® ジオメトリ パイプラインのトランスフォームおよびライティング モジュールを置き換える。実質的に、トランスフォームおよびライティング処理に関するステート情報は無視される。ただし、頂点シェーダが無効で、固定機能による処理に戻った場合は、現在のステート設定がすべて適用される。

高次プリミティブのテッセレーションはすべて、頂点シェーダの実行前に行う必要がある。シェーダの処理の後にサーフェス テッセレーションを実行する実装環境では、アプリケーションおよびシェーダ コードにわからない方法で実行しなければならない。セマンティクス情報は、通常、シェーダの前には提供されないので、特殊なトークンを使用して、ほかのすべてのコンポーネントが相対的に補間されるベース位置を表す入力ストリーム コンポーネントを識別する。補間できないデータ チャネルはサポートされない。

出力では、頂点シェーダは同次クリップ空間に頂点の位置座標を生成しなければならない。生成できる追加データには、テクスチャ座標、色、フォグ係数などがある。

標準的なグラフィックス パイプラインは、次のタスクを含めて、シェーダごとに頂点出力を処理する。

DirectX 8.0 頂点シェーダのクリッピング空間は、DirectX 7.0 および DirectX 8.0 の固定機能による頂点処理と同じである。詳細については、「クリッピング ボリューム」を参照すること。

プログラム可能なジオメトリは、Direct3D アプリケーション プログラミング インターフェイス (API) 内のモードである。有効になっている場合、頂点パイプラインを部分的に置き換える。無効になっている場合、API は DirectX 6.0 および 7.0 での動作と同じ通常の制御を行う。頂点シェーダの実行は、内部の Direct3D ステートを変更せず、Direct3D ステートはシェーダでは使用できない。

pFunction パラメータを NULL にした IDirect3DDevice8::CreateVertexShader の呼び出しは、固定機能によるパイプラインのシェーダを作成するために使用される。pFunction が NULL ではない場合は、シェーダはプログラム可能になる。IDirect3DDevice8::SetVertexShader の呼び出しは、現在のアクティブ シェーダを設定し、レンダリング パイプラインがプログラムによる頂点処理と固定機能頂点処理のいずれを使用するかを定義する。