Microsoft DirectX 8.0 (C++)

IDirect3DDevice8::CreateVertexBuffer

頂点バッファを作成する。

HRESULT CreateVertexBuffer(
  UINT Length,
  DWORD Usage,
  DWORD FVF,
  D3DPOOL Pool,
  IDirect3DVertexBuffer8** ppVertexBuffer
);

パラメータ

Length
[in] 頂点バッファのサイズ (バイト単位)。柔軟な頂点フォーマット (FVF) 頂点バッファの場合は、Length は少なくとも 1 つの頂点を格納できる大きさでなければならないが、頂点サイズの倍数である必要はない。Length は非 FVF バッファについては検証されない。「注意」を参照すること。
Usage
[in] このリソースの使用方法の制御情報を記述する、次の 1 つ以上のフラグの組み合わせ。
D3DUSAGE_DONOTCLIP
頂点バッファの内容が決してクリッピングを要求しないことを示す。このフラグが設定されたバッファを使ってレンダリングする場合は、D3DRS_CLIPPING レンダリング ステートが FALSE に設定されていなければならない。
D3DUSAGE_DYNAMIC
頂点またはインデックス バッファが動的なメモリの使用を必要とすることを示す。これを使用すると、ドライバが配置場所を決定できるので、ドライバにとって有効である。一般的に、静的な頂点バッファはビデオ メモリに配置され、動的な頂点バッファは AGP メモリに配置される。静的な使用方法だけを分離できないことに注意すること。D3DUSAGE_DYNAMIC を指定しないと、頂点バッファは静的に作成される。D3DUSAGE_DYNAMIC は、D3DLOCK_DISCARD および D3DLOCK_NOOVERWRITE ロッキング フラグによって厳密に強制される。この結果、D3DLOCK_DISCARD および D3DLOCK_NOOVERWRITE は、D3DUSAGE_DYNAMIC を指定して作成された頂点およびインデックス バッファでのみ有効である。これらは、静的な頂点バッファでは有効なフラグではない。

動的な頂点バッファの使用方法の詳細については、「動的な頂点およびインデックス バッファの使い方」を参照すること。

D3DUSAGE_DYNAMIC は、管理下の頂点およびインデックス バッファでは指定できないことに注意すること。詳細については、「リソースの管理」を参照すること。

D3DUSAGE_RTPATCHES
高次プリミティブの描画に頂点バッファを使用するとき設定する。
D3DUSAGE_NPATCHES
N パッチの描画に頂点バッファを使用するとき設定する。
D3DUSAGE_POINTS
ポイント スプライトまたはインデックス付きポイント リストの描画に、頂点バッファを使用するとき設定する。
D3DUSAGE_SOFTWAREPROCESSING
ソフトウェア頂点処理で使用する頂点バッファであることを示す。
D3DUSAGE_WRITEONLY
頂点バッファへの書き込み操作しか実行しないことをシステムに知らせる。このフラグを使用することにより、ドライバは最適なメモリ領域を選択して効率的に書き込み操作やレンダリングを実行する。この能力を使用して作成された頂点バッファからの読み出しは失敗する。
FVF
[in] 柔軟な頂点フォーマット フラグの組み合わせ。バッファ内の頂点の頂点フォーマットを記述する使用方法の指定子。このパラメータに有効な FVF コードを設定すると、FVF 頂点バッファが作成される (「注意」を参照)。ゼロを設定すると、頂点バッファは非 FVF 頂点バッファになる。
Pool
[in] D3DPOOL 列挙型のメンバ。リソースが配置される有効なメモリ クラスを記述する。
ppVertexBuffer
[out, retval] 作成された頂点バッファ リソースを表す IDirect3DVertexBuffer8 インターフェイスへのポインタのアドレス。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_INVALIDCALL
D3DERR_OUTOFVIDEOMEMORY
E_OUTOFMEMORY

注意

IDirect3DDevice8 インターフェイスは、頂点バッファ オブジェクトに格納された頂点データを使用するプリミティブのレンダリングをサポートしている。頂点バッファは IDirect3DDevice8 インターフェイスから作成されて、頂点バッファの基になっている IDirect3DDevice8 オブジェクトでのみ使用できる。

FVF パラメータにゼロ以外の値を設定するときは、有効な FVF コードでなければならず、これはバッファの内容が FVF コードによって特徴付けられることを示している。FVF コードで作成された頂点バッファを、FVF 頂点バッファという。詳細については、「FVF 頂点バッファ」を参照すること。

D3DUSAGE_SOFTWAREPROCESSING フラグは、頂点バッファがソフトウェア頂点処理で使われるものであることを示している。詳細については、「デバイスの種類と頂点処理の要件」を参照すること。

非 FVF バッファを使用して、マルチパス レンダリングまたはシングル パスのマルチテクスチャ レンダリングで、データをインターリーブすることができる。これを行うには、1 つのバッファにはジオメトリ データを格納し、もう 1 つのバッファにはレンダリングする各テクスチャのテクスチャ座標を格納する。レンダリング時には、テクスチャ座標を格納する各バッファと共に、ジオメトリ データを格納するバッファがインターリーブされる。代わりに FVF バッファを使用した場合、各バッファに、レンダリングする各テクスチャに固有のテクスチャ座標データに加えて、同じジオメトリ データを格納する必要がある。これは、使用するストラテジにもよるが、スピードまたはメモリの面でマイナスとなる。テクスチャ座標の詳細については、「テクスチャ座標について」を参照すること。

動作環境

  ヘッダー : d3d8.h で宣言。
  インポート ライブラリ : D3d8.lib を使用。

参照

IDirect3DVertexBuffer8::GetDescIDirect3DDevice8::ProcessVertices