IDirect3DDevice9::CreateVertexBuffer

頂点バッファーを作成します。

HRESULT 
CreateVertexBuffer(
  UINT Length,
  DWORD Usage,
  DWORD FVF,
  D3DPOOL Pool,
  IDirect3DVertexBuffer9** ppVertexBuffer,
  HANDLE* pSharedHandle
);

パラメータ

  • Length
    頂点バッファーのサイズ (バイト単位)。FVF 頂点バッファーの場合、Length は少なくとも 1 つの頂点を含むことができる程度に大きい必要がありますが、頂点サイズの倍数である必要はありません。FVF 以外のバッファーでは Length は検証されません。「解説」を参照してください。
  • Usage
    使用法には 0 を指定できます。これは使用法の値がないことを示します。ただし、使用法が必要な場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateVertexBuffer の使用法パラメーターと IDirect3D9::CreateDevice の動作フラグを一致させることが適切です。詳細については、「解説」を参照してください。
  • FVF
    D3DFVF の組み合わせであり、このバッファー内の頂点の頂点フォーマットを示す使用法指定子です。このパラメーターを有効な FVF コードに設定した場合、作成された頂点バッファーは FVF 頂点バッファーです (「解説」を参照してください)。このパラメーターをゼロに設定した場合、頂点バッファーは FVF 以外の頂点バッファーです。
  • Pool
    D3DPOOL 列挙型のメンバー。リソースを配置する有効なメモリー クラスを表します。D3DPOOL_SCRATCH に設定してはなりません。
  • ppVertexBuffer
    作成された頂点バッファー リソースを示す IDirect3DVertexBuffer9 インターフェイスへのポインターのアドレスです。
  • pSharedHandle
    予約済みです。このパラメーターを NULL に設定します。このパラメーターを Windows Vista の Direct3D 9 で使用して、リソースを共有することができます。

戻り値

メソッドが成功した場合は、D3D_OK を返します。失敗した場合は、次の戻り値のいずれかを返します。D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。

解説 

頂点バッファーは、ハードウェアまたはソフトウェアによる頂点処理で使用できます。これは、デバイスおよび頂点バッファーを作成する方法により決定されます。

デバイスを作成するとき、CreateDevice メソッドは、動作フラグを使用して、ハードウェアとソフトウェアのどちらで頂点を処理するかを決定します。設定方法は 3 つあります。

  • ハードウェアで頂点を処理するには、D3DCREATE_HARDWARE_VERTEXPROCESSING を設定します。
  • ソフトウェアで頂点を処理するには、D3DCREATE_SOFTWARE_VERTEXPROCESSING を設定します。
  • ハードウェアまたはソフトウェアで頂点を処理するには、D3DCREATE_MIXED_VERTEXPROCESSING を設定します。

混合モード デバイスでは、ソフトウェア処理とハードウェア処理を切り替える (IDirect3DDevice9::SetSoftwareVertexProcessing を使用) 必要がある場合があります。

頂点バッファーを作成する場合、CreateVertexBuffer は使用法パラメーターを使用して、ハードウェアで頂点を処理するか、ソフトウェアで頂点を処理するかを決定します。

  • CreateDevice で D3DCREATE_HARDWARE_VERTEXPROCESSING を使用する場合、CreateVertexBuffer は 0 を使用する必要があります。
  • CreateDevice で D3DCREATE_SOFTWARE_VERTEXPROCESSING を使用する場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使用する必要があります。いずれの値でも、頂点はソフトウェアで処理されます。
  • CreateDevice で D3DCREATE_MIXED_VERTEXPROCESSING を使用する場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使用する必要があります。

混合モード デバイスで頂点バッファーを使用するには、ハードウェアとソフトウェアの両方の処理で使用できる 1 つの頂点バッファーを作成します。現在の頂点バッファーを設定するには、IDirect3DDevice9::SetStreamSource を使用し、デバイスの動作を変更して一致させる必要がある場合は、IDirect3DDevice9::SetRenderState を使用します。頂点バッファーの使用法はデバイスの動作と一致させることを推奨します。ソフトウェア処理用に作成された頂点バッファーをビデオ メモリーに配置することはできません。

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

ゼロ以外の値 (有効な FVF コードでなければなりません) に設定すると、FVF パラメーターはバッファーの内容が FVF コードで特性付けられることを示します。FVF コードを使用して作成された頂点バッファーは、FVF 頂点バッファーと呼ばれます。詳細については、「FVF 頂点バッファー (Direct3D 9)」を参照してください。

FVF 以外のバッファーを使用して、マルチパス レンダリングまたは 1 つのパスのマルチテクスチャー レンダリングの間にデータをインターリーブできます。このためには、1 つのバッファーにジオメトリ データを含ませ、その他のバッファーにレンダリングされるテクスチャーごとのテクスチャー座標を含ませます。レンダリング時は、ジオメトリ データを含むバッファーがテクスチャー座標を含む各バッファーによりインターリーブされます。代わりに FVF バッファーを使用した場合、各バッファーはレンダリングされる各テクスチャーに固有のテクスチャー座標データに加え、同じジオメトリ データを含む必要があります。これにより、使用する方法に応じて速度やメモリーで影響が生じます。テクスチャー座標の詳細については、「テクスチャー座標 (Direct3D 9)」を参照してください。

要件

ヘッダー: D3D9.h 宣言

ライブラリ: D3D9.lib 内容

関連項目

IDirect3DVertexBuffer9::GetDesc, IDirect3DDevice9::ProcessVertices, 頂点バッファー (Direct3D 9)