次の方法で共有


頂点バッファー (Direct3D 9)

IDirect3DVertexBuffer9 インターフェイスで表される頂点バッファーは、頂点データを含むメモリ バッファーです。 頂点バッファーには、 IDirect3DDevice9 インターフェイスのレンダリング メソッドを使用してレンダリングできる、変換または変換されていない、点灯、または非点灯の任意の頂点の種類を含めることができます。 頂点バッファー内の頂点を処理して、変換、照明の適用、クリッピング フラグの生成などの操作を実行できます。 変換は常に実行されます。

頂点バッファーは柔軟なため、変換されたジオメトリを再利用するための最適なステージング ポイントとなります。 1 つの頂点バッファーを作成し、その中の頂点に対して変換、照明、クリッピングを適用したら、そのモデルを必要に応じて何度でも、再変換なしでシーンにレンダリングできます。途中でレンダリング状態が変更されたとしても、再変換を行う必要はありません。 これは、複数のテクスチャを使うモデルをレンダリングする場合に便利です。ジオメトリを 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 リソース

頂点バッファーとインデックス バッファーからのレンダリング (Direct3D 9)

インデックス バッファー (Direct3D 9)