Microsoft DirectX 8.0 (Visual Basic) |
インデックス処理のパフォーマンスは、インデックス バッファのメモリ内での位置と、使用されるレンダリング デバイスの種類に大きく依存する。インデックス バッファを作成すると、アプリケーションはそのインデックス バッファへのメモリ割り当てを制御する。D3DPOOL_SYSTEMMEM メモリ フラグが設定されているときは、システム メモリ内にインデックス バッファが作成される。D3DPOOL_DEFAULT メモリ フラグを使用すると、インデックス バッファ用のメモリの最良の割り当て場所をデバイス ドライバが決定し、このようにして決定されたメモリのことを多くの場合、ドライバ最適化メモリと呼ぶ。ドライバ最適化メモリとしては、ローカル ビデオ メモリ、非ローカル ビデオ メモリ、またはシステム メモリが指定される。
Direct3DDevice8.CreateIndexBuffer メソッドを呼び出すときに、D3DUSAGE_SOFTWAREPROCESSING 動作フラグを設定すると、インデックス バッファはソフトウェア頂点処理に使用される。ソフトウェア頂点処理を使用する場合、このフラグはミックス モードの頂点処理 (D3DCREATE_MIXED_VERTEXPROCESSING) で必要となる。
アプリケーションは、ドライバ最適化メモリに割り当てられたインデックス バッファに頂点を直接書き込むことができる。この方法により、以降の冗長なコピー処理を防止する。ただし、ドライバ最適化メモリからホストによって実行される読み取り処理は低速な場合があるため、アプリケーションがインデックス バッファからデータを読み返すときには、この方法はうまく機能しない。したがって、アプリケーションで処理中に読み取り、またはバッファへのデータ書き込みを不規則に実行する必要がある場合は、システム メモリにインデックス バッファを割り当てるとよい。
注 ドライバが頂点バッファまたはインデックス バッファを AGP メモリに配置する場合に、ビデオ メモリまたは大量のページロック RAM を拡張しないときを除いては、常に D3DPOOL_DEFAULT を使用する。