Microsoft DirectX 8.0 (Visual Basic) |
Direct3DDevice8 クラスは、ソフトウェアとハードウェア両方での頂点処理をサポートする。一般に、ソフトウェアとハードウェアの頂点処理に関するデバイス能力は同じではない。ハードウェアの能力は、ディスプレイ アダプタやドライバによって異なるが、ソフトウェアの能力は一定である。
次のフラグは、ハードウェア アブストラクション レイヤ (HAL) デバイスおよびリファレンス デバイスの頂点処理動作を制御する。
Direct3D8.CreateDevice を呼び出すときは、いずれかの頂点処理動作フラグを指定する。ミックス モード フラグでは、デバイスはソフトウェアとハードウェア両方の頂点処理が可能になる。1 つのデバイスに対して、一度に 1 つの頂点処理フラグしか設定できない。ピュア デバイス (D3DCREATE_PUREDEVICE) を作成するときは、D3DCREATE_HARDWARE_VERTEXPROCESSING フラグが必要なので注意すること。
単一デバイス上に 2 つの頂点処理能力が存在しないようにするため、実行時にはハードウェア頂点処理能力のみを照会できる。ソフトウェアの頂点処理機能は固定され、実行時に照会することはできない。
デバイスのハードウェア頂点処理能力を判定するには、D3DCAPS8 構造体の VertexProcessingCaps メンバを調べる。ソフトウェア頂点処理については、以下の能力がサポートされている。
また、次の表は、ソフトウェア頂点処理モードのデバイスに対して、D3DCAPS8 構造体のメンバに設定される値を示している。
メンバ | ソフトウェア頂点処理能力 |
---|---|
MaxActiveLights | 制限なし |
MaxUserClipPlanes | 6 |
MaxVertexBlendMatrices | 4 |
MaxStreams | 16 |
MaxVertexIndex | 0xFFFFFFFF |
ソフトウェア頂点処理では、制限なしのライト数やプログラム可能な頂点シェーダなど、保証済みの頂点処理能力セットが提供される。ソフトウェア頂点処理とハードウェア頂点処理は、HAL デバイス (ハードウェア頂点処理とソフトウェア頂点処理の両方をサポートする唯一のデバイス タイプ) を使っていつでも切り替えることができる。唯一の要件として、ソフトウェア頂点処理に使用する頂点バッファは、システム メモリ内に割り当てられていなければならない。
注 ハードウェア頂点処理のパフォーマンスは、ソフトウェア頂点処理のパフォーマンスに匹敵する。このため、同一デバイス タイプ内で頂点処理のためのハードウェア エミュレーション機能とソフトウェア エミュレーション機能の両方を提供するとよい。これはラスタ化には適用されない。ラスタ化では、ホスト プロセッサによる処理速度はグラフィックス専用ハードウェアより低速である。したがって、ハードウェア エミュレーションとソフトウェア エミュレーションのラスタ化の両方を単一デバイス タイプ内で提供することはない。単一デバイス内のランタイムとハードウェア (ドライバ) に重複する機能は、ソフトウェア頂点処理のみである。したがって、ほかのデバイス能力はすべて、ドライバによって提供される潜在的に異なる機能である。