頂点バッファー (Direct3D 9)
IDirect3DVertexBuffer9 インターフェイスで表される頂点バッファーは、頂点データを格納するメモリー バッファーです。頂点バッファーには、IDirect3DDevice9 インターフェイスのレンダリング メソッドを使用してレンダリング可能な任意の頂点タイプ (変換済みまたは未変換、ライティング済みまたはライティング前など) を格納できます。頂点バッファー内の頂点を処理して、変換、ライティング、クリッピング フラグの生成などの処理を実行できます。変換は常に実行されます。
頂点バッファーは柔軟であるため、変換済みのジオメトリを再利用するための理想的なステージング ポイントとなります。1 つの頂点バッファーを作成して、その中にある頂点を変換、ライティング、およびクリップし、シーン内で必要に応じてモデルを何度でもレンダリングできます。このとき、インターリーブされたレンダリング ステートに変化があっても再変換は不要です。このことは、複数のテクスチャーを使用するモデルをレンダリングするときには便利です。ジオメトリは一度だけ変換されます。その後は、必要に応じてジオメトリの一部をレンダリングし、必要なテクスチャーの変更を加えてインターリーブできます。頂点の処理後に加えられたレンダリング ステートの変更は、次にその頂点が処理されるときに有効になります。
- 説明
- メモリー プールと使用法
説明
頂点バッファーは、機能によって記述されます。頂点バッファーがシステム メモリー内にのみ存在するかどうか、書き込み処理専用かどうか、格納できる頂点のタイプと数などが記述されます。このようなすべての特性は、D3DVERTEXBUFFER_DESC 構造体内に保持されます。
Format メンバーは、頂点バッファーであることを示すために D3DFMT_VERTEXDATA に設定されます。Type は頂点バッファーのリソース タイプです。Usage 構造体メンバーは、全般的な機能フラグを含みます。D3DUSAGE_SOFTWAREPROCESSING フラグは、頂点バッファーがソフトウェア頂点処理で使用されることを示します。Usage に D3DUSAGE_WRITEONLY フラグが指定されている場合は、頂点バッファーのメモリーは書き込み処理にのみ使用されます。これにより、ドライバーは頂点データを自由に最適なメモリー位置に配置できるため、高速な処理とレンダリングが可能になります。D3DUSAGE_WRITEONLY フラグを使用しない場合、ドライバーが、読み込み操作の効率が悪い場所にデータを配置する可能性が低くなります。ただし、この場合、特定の処理速度およびレンダリング速度が低下することがあります。このフラグが指定されていない場合、アプリケーションは頂点バッファー内のデータに対して読み取りおよび書き込み処理を実行するものと想定されます。
Pool は頂点バッファーに割り当てられるメモリー クラスを指定します。D3DPOOL_SYSTEMMEM フラグは、頂点バッファーがシステム メモリー内に作成されることを示します。
Size メンバーは、頂点バッファー データのサイズをバイト単位で格納します。FVF メンバーには、バッファーが格納する頂点のタイプを識別する D3DFVF の組み合わせが格納されます。
メモリー プールと使用法
頂点バッファーは、IDirect3DDevice9::CreateVertexBuffer メソッドを使用して作成できます。このメソッドは、プール (メモリー クラス) と使用法のパラメーターを取ります。また、IDirect3DDevice9::CreateVertexBuffer では、FVF コードを指定した作成も可能です、FVF コードは、固定機能頂点処理で使用されたり、頂点処理の結果として使用されます。詳細については、「FVF 頂点バッファー (Direct3D 9)」を参照してください。
D3DUSAGE_SOFTWAREPROCESSING フラグは、ミックスモードまたはソフトウェアによる頂点処理 (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) が該当デバイスで有効な場合に設定できます。混合モードのソフトウェア頂点処理で使用するバッファーには D3DUSAGE_SOFTWAREPROCESSING を設定する必要がありますが、混合モードでハードウェア頂点処理 (D3DCREATE_HARDWARE_VERTEXPROCESSING) を使用するときに可能な限り最高のパフォーマンスを得るには、このフラグは指定しないでください。ただし、1 つの バッファーをハードウェア頂点処理とソフトウェア頂点処理の両方に使用する場合は、D3DUSAGE_SOFTWAREPROCESSING を設定するしかオプションはありません。D3DUSAGE_SOFTWAREPROCESSING は、混合モードのデバイスおよびソフトウェア デバイスに指定できます。
D3DPOOL_SYSTEMMEM を指定することにより、頂点処理がハードウェアで実行されている場合でも、頂点バッファーとインデックス バッファーを強制的にシステム メモリー内に配置できます。これは、ドライバーがそれらのバッファーを AGP メモリー内に格納しているとき、過度に大量のページロック メモリーが生じるのを回避するための 1 つの方法となります。
ここでは、頂点バッファーを理解し、Direct3D アプリケーションで頂点バッファーを使用するために必要な概念を紹介します。ここで説明するトピックは次のとおりです。
- 頂点バッファーの作成 (Direct3D 9)
- 頂点バッファーの内容へのアクセス (Direct3D 9)
- 頂点バッファーからのレンダリング (Direct3D 9)
- FVF 頂点バッファー (Direct3D 9)
- 固定機能頂点処理 (Direct3D 9)
- プログラム可能な頂点処理 (Direct3D 9)
- デバイス タイプと頂点処理の要件 (Direct3D 9)
関連項目
頂点バッファーとインデックス バッファーからのレンダリング (Direct3D 9) | インデックス バッファー (Direct3D 9)