頂点バッファー (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 頂点バッファー (Direct3D 9)を参照してください。
D3DUSAGE_SOFTWAREPROCESSING フラグは、そのデバイスに対して混合モードまたはソフトウェア頂点処理 (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) が有効になっている場合に設定できます。 D3DUSAGE_SOFTWAREPROCESSINGバッファーを混合モードでソフトウェア頂点処理と共に使用するように設定する必要がありますが、混合モードでハードウェア頂点処理を使用する場合は、パフォーマンスを最大限に高めるために設定しないでください。(D3DCREATE_HARDWARE_VERTEXPROCESSING)。 ただし、1 つのバッファーをハードウェア頂点処理とソフトウェア頂点処理の両方で使用する場合は、D3DUSAGE_SOFTWAREPROCESSINGの設定が唯一のオプションです。 D3DUSAGE_SOFTWAREPROCESSINGは、混合およびソフトウェア デバイスに対して許可されます。
ハードウェアで頂点処理が行われる場合でも、D3DPOOL_SYSTEMMEMを指定することで、頂点バッファーとインデックス バッファーをシステム メモリに強制的に挿入できます。 これは、ドライバーがこれらのバッファーを AGP メモリに配置するときに、過度に大量のページ ロック メモリを回避する方法です。
このセクションでは、Direct3D アプリケーションで頂点バッファーを理解して使用するために必要な概念について説明します。 情報は、次のセクションに分かれています。
- 頂点バッファーの作成 (Direct3D 9)
- 頂点バッファー (Direct3D 9) の内容にアクセスする
- 頂点バッファーからのレンダリングの (Direct3D 9)
- FVF 頂点バッファー (Direct3D 9)
- 固定関数頂点処理 (Direct3D 9)
- プログラミング可能な頂点処理 (Direct3D 9)
- デバイスの種類と頂点処理の要件 (Direct3D 9)
関連トピック
-
Direct3D リソース の
-
頂点バッファーとインデックス バッファーからの レンダリング (Direct3D 9)