IDirect3DDevice9::CreateVertexBuffer メソッド

IDirect3DDevice9::CreateVertexBuffer メソッド

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

構文

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

パラメータ

  • Length
    [in] 頂点バッファのサイズ (バイト単位)。柔軟な頂点フォーマット (FVF) 頂点バッファの場合は、Length は少なくとも 1 つの頂点を格納できる大きさでなければならないが、頂点サイズの倍数である必要はない。Length は非 FVF バッファについては検証されない。「注意」を参照すること。
  • Usage
    [in] 使用法は 0 にできる。この場合使用法の値は設定されない。ただし、使用法が必要な場合は、1 つまたは複数の D3DUSAGE 定数の組み合わせを使用する。CreateVertexBuffer 内の使用法パラメータと、IDirect3D9::CreateDevice の動作フラグを合致させて使うことが推奨される。詳細情報は「注意」を参照すること。
  • FVF
    [in] D3DFVF の組み合わせ。バッファ内の頂点の頂点フォーマットを記述する使用方法の指定子。このパラメータを有効な FVF コードに設定すると、作成される頂点バッファは FVF 頂点バッファになる (「注意」を参照)。このパラメータを 0 (ゼロ) に設定すると、頂点バッファは非 FVF 頂点バッファになる。
  • Pool
    [in] D3DPOOL 列挙型のメンバ。リソースが配置される有効なメモリ クラスを記述する。
  • ppVertexBuffer
    [out, retval] 作成された頂点バッファ リソースを表す IDirect3DVertexBuffer9 インターフェイスへのポインタのアドレス。
  • pHandle
    [in] 予約済み。このパラメータは NULL に設定する。

戻り値

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

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

D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。
D3DERR_OUTOFVIDEOMEMORY Microsoft® Direct3D® が処理を行うのに十分なディスプレイ メモリがない。
E_OUTOFMEMORY Direct3D が呼び出しを完了するための十分なメモリを割り当てることができなかった。

注意

頂点バッファは、ハードウェア頂点処理でもソフトウェア頂点処理でも使用できる。これは、デバイスと頂点バッファの作成方法によって決まる。

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

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

ミックスモードのデバイスでは、デバイスの作成後に、ソフトウェアとハードウェア処理の切り替えが必要な場合がある。その場合は、IDirect3DDevice9::SetRenderState を使って D3DRS_SOFTWAREVERTEXPROCESSING レンダリング ステートを設定すること。

頂点バッファを作成するとき、CreateVertexBuffer は使用法パラメータを使って、ハードウェアとソフトウェアのどちらで頂点を処理するか決定する。

  • CreateDevice が D3DCREATE_HARDWARE_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 を使う必要がある。
  • CreateDevice が D3DCREATE_SOFTWARE_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使う必要がある。どちらの値でも、頂点はソフトウェアで処理される。
  • CreateDevice が D3DCREATE_MIXED_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使うことができる。

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

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

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

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

参照

IDirect3DVertexBuffer9::GetDescIDirect3DDevice9::ProcessVertices