次の方法で共有


頂点バッファ

頂点バッファ

頂点バッファとは、IDirect3DVertexBuffer9 インターフェイスで表される頂点データが入るメモリ バッファである。頂点バッファは、トランスフォーム済みの頂点、未トランスフォームの頂点、ライティング済みの頂点、未ライティングの頂点など、IDirect3DDevice9 インターフェイスの頂点バッファ レンダリング メソッドでレンダリング可能なあらゆる種類の頂点を入れることができる。頂点バッファ内の頂点を処理して、トランスフォーム・ライティング・クリッピング フラグの生成などの処理を実行できる。トランスフォームは常に実行される。

頂点バッファは柔軟なので、トランスフォームしたジオメトリを再利用するための理想的なステージ ポイントとなる。単一の頂点バッファを作成し、その頂点バッファ内で頂点をトランスフォーム・ライティング・クリッピングを適用すれば、たとえ途中に挿入されたレンダリング ステートが変化した場合でも、シーンのモデルを再トランスフォームせずにレンダリングできる。これは、マルチ テクスチャを使うモデルのレンダリングの際に便利である。ジオメトリを一度トランスフォームすれば、要求されたテクスチャの変更に合わせて途中に挿入して、必要に応じてその一部をレンダリングできる。頂点を処理した後で変更したレンダリング ステートは、次に頂点の処理に有効になる。

  • 記述
  • メモリのプールと使用

記述

頂点バッファの記述は、能力について行う。システム メモリ内にだけ存在できるのか、書き込み操作だけに使うのか、入れることができる頂点の種類と数などを記述する。これらの特性はすべて 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 頂点バッファ」を参照すること。

D3DUSAGE_SOFTWAREPROCESSING フラグは、そのデバイスに対してミックス モードまたはソフトウェア頂点処理 (D3DCREATE_MIXED_VERTEXPROCESSING / D3DCREATE_SOFTWARE_VERTEXPROCESSING) が有効になっているときに設定できる。D3DUSAGE_SOFTWAREPROCESSING はミックス モードでのソフトウェア頂点処理に使用するバッファに設定し、ミックス モードでのハードウェア頂点処理 (D3DCREATE_HARDWARE_VERTEXPROCESSING) 時に最高のパフォーマンスを得たいときは設定してはならない。ただし、単一のバッファをハードウェアおよびソフトウェア頂点処理の両方で使用する場合、D3DUSAGE_SOFTWAREPROCESSING を設定する以外のオプションはない。D3DUSAGE_SOFTWAREPROCESSING は、ソフトウェア デバイスだけでなくミックスにも設定できる。

頂点処理をハードウェアで実行する場合でも、D3DPOOL_SYSTEMMEM を指定すれば、頂点バッファとインデックス バッファをシステム メモリ内に強制的に配置できる。これは、ドライバによってこれらのバッファが AGP メモリに入れられたときに、ページ ロックされるメモリが多くなりすぎないようにする方法である。

ここでは、Microsoft® Direct3D® アプリケーションにおいて頂点バッファを理解し、使用するのに必要な概念を説明する。説明する内容は、次のとおりである。