Microsoft DirectX 8.0 (Visual Basic) |
トランスフォームやライティングなどの頂点処理のパフォーマンスは、頂点バッファのメモリ内での位置座標と、使用されるレンダリング デバイスの種類に大きく依存する。頂点バッファを作成すると、アプリケーションはその頂点バッファへのメモリ割り当てを制御できる。D3DPOOL_SYSTEMMEM メモリ フラグが設定されているときは、システム メモリ内に頂点バッファが作成される。D3DPOOL_DEFAULT メモリ フラグを使用すると、頂点バッファ用のメモリの最良の割り当て場所をデバイス ドライバが決定し、このようにして決定されたメモリのことを多くの場合ドライバ最適化メモリと呼ぶ。ドライバ最適化メモリとしては、ローカル ビデオ メモリ、非ローカル ビデオ メモリ、またはシステム メモリが指定される。
D3DUSAGE_SOFTWAREPROCESSING 動作フラグを設定して Direct3DDevice8.CreateVertexBuffer メソッドを呼び出すと、頂点バッファはソフトウェア頂点処理に使用される。このフラグは、混合頂点処理モードにおけるソフトウェア頂点処理で必要である。このフラグは、ソフトウェア頂点処理モードでは使用できるが、ハードウェア頂点処理モードでは使用できない。ソフトウェア頂点処理に使用される頂点バッファを次に示す。
頂点バッファがシステム メモリにあるか、ドライバ最適化メモリにあるかを調べる必要があるのは、テクスチャの場合と同じ理由からである。ハードウェアにおける頂点処理 (トランスフォームやライティングなど) に最適なのは、ドライバ最適化メモリに割り当てられた頂点バッファで、ソフトウェアでの頂点処理に最適なのは、システム メモリに割り当てられた頂点バッファである。テクスチャの場合、ハードウェア ラスタ化には、ドライバ最適化メモリに割り当てられたテクスチャが最適で、ソフトウェア ラスタ化には、システム メモリに割り当てられたテクスチャが最適である。
注 Microsoft® Direct3D® for DirectX® 8.0 は、ProcessVertices メソッドでプリミティブをレンダリングしないスタンドアロン頂点処理をサポートする。このスタンドアロン頂点処理は、常にホスト プロセッサ上のソフトウェアで実行される。このため、Direct3DDevice8.SetStreamSource の転送元として設定される頂点バッファは、D3DUSAGE_SOFTWAREPROCESSING フラグで作成する必要がある。ProcessVertices の機能は、Direct3DDevice8.DrawPrimitive メソッドおよび Direct3DDevice8.DrawIndexedPrimitive メソッドがソフトウェア頂点処理において提供する機能と同じである。詳細については、「頂点の処理」を参照すること。
アプリケーションが独自の頂点処理を実行する、また、トランスフォーム済みで、ライティングが適用され、クリッピングされた頂点を頂点バッファ レンダリング メソッドに渡す場合、アプリケーションはドライバ最適化メモリに割り当てられた頂点バッファに頂点を直接書き込むことができる。この方法により、以降の冗長なコピー処理を防止する。ただし、ドライバ最適化メモリからホストによって実行される読み取り処理は、非常に処理速度が遅いことがあるため、アプリケーションが頂点バッファからデータを読み返す場合には、この方法はうまく機能しない。したがって、アプリケーションで処理中に読み取り、またはバッファへのデータ書き込みを不規則に実行する必要がある場合は、システム メモリに頂点バッファを割り当てるとよい。
Direct3D 頂点処理機能を使用する場合 (未トランスフォームの頂点を頂点バッファ レンダリング メソッドに渡して)、デバイスの種類とデバイス作成フラグに応じて、ハードウェアまたはソフトウェアのいずれかで処理が実行される。最終的にあらゆる場合において最善のパフォーマンスを得られるように、頂点バッファはプール D3DPOOL_DEFAULT に割り当てることを推奨する。デバイスがハードウェア頂点処理を使用する場合は、フラグ D3DUSAGE_DYNAMIC および D3DUSAGE_WRITEONLY に基づいて実行できる追加の最適化機能がいくつかある。これらのフラグの使用方法の詳細については、「Direct3DDevice8.CreateVertexBuffer」を参照すること。