IDirect3DDevice9::CreateVertexBuffer メソッド (d3d9.h)

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

構文

HRESULT CreateVertexBuffer(
  [in]          UINT                   Length,
  [in]          DWORD                  Usage,
  [in]          DWORD                  FVF,
  [in]          D3DPOOL                Pool,
  [out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
  [in]          HANDLE                 *pSharedHandle
);

パラメーター

[in] Length

型: UINT

頂点バッファーのサイズ (バイト単位)。 FVF 頂点バッファーの場合、Length は少なくとも 1 つの頂点を含むのに十分な大きさにする必要がありますが、頂点サイズの倍数である必要はありません。 FVF 以外のバッファーの長さは検証されません。 「解説」を参照してください。

[in] Usage

種類: DWORD

使用量には 0 を指定できます。これは、使用量の値がないことを示します。 ただし、使用が必要な場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。 CreateVertexBuffer の usage パラメーターと IDirect3D9::CreateDevice の動作フラグを照合することをお勧めします。 詳細については、「解説」を参照してください。

[in] FVF

種類: DWORD

D3DFVF の組み合わせ。このバッファー内の頂点の頂点形式を記述する使用法指定子です。 このパラメーターが有効な FVF コードに設定されている場合、作成される頂点バッファーは FVF 頂点バッファーです (「解説」を参照)。 それ以外の場合、このパラメーターが 0 に設定されている場合、頂点バッファーは FVF 以外の頂点バッファーになります。

[in] Pool

種類: D3DPOOL

リソースを配置する有効なメモリ クラスを記述する、 D3DPOOL 列挙型のメンバー。 D3DPOOL_SCRATCHに設定しないでください。

[out, retval] ppVertexBuffer

種類: IDirect3DVertexBuffer9**

作成された頂点バッファー リソースを表す IDirect3DVertexBuffer9 インターフェイスへのポインターのアドレス。

[in] pSharedHandle

型: HANDLE*

予約済み。 このパラメーターを NULL に設定 します。 このパラメーターは、Direct3D 9 for Windows Vista で リソースを共有するために使用できます。

戻り値

種類: HRESULT

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

注釈

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

デバイスが作成されると、CreateDevice は動作フラグを使用して、ハードウェアまたはソフトウェアの頂点を処理するかどうかを決定します。 次の 3 つのケースが考えられます。

  • D3DCREATE_HARDWARE_VERTEXPROCESSINGを設定して、ハードウェア内の頂点を処理します。
  • D3DCREATE_SOFTWARE_VERTEXPROCESSINGを設定して、ソフトウェア内の頂点を処理します。
  • D3DCREATE_MIXED_VERTEXPROCESSINGを設定して、ハードウェアまたはソフトウェアの頂点を処理します。
混合モードデバイスでは、デバイスの作成後にソフトウェアとハードウェアの処理を切り替える必要がある場合があります ( IDirect3DDevice9::SetSoftwareVertexProcessing を使用)。

頂点バッファーが作成されると、CreateVertexBuffer は usage パラメーターを使用して、ハードウェアまたはソフトウェアで頂点を処理するかどうかを決定します。

  • 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 コードである必要がある 0 以外の値に設定すると、FVF パラメーターは、バッファーの内容が FVF コードによって特徴付けされることを示します。 FVF コードを使用して作成された頂点バッファーは、FVF 頂点バッファーと呼ばれます。 詳細については、「 FVF 頂点バッファー (Direct3D 9)」を参照してください。

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

要件

要件
対象プラットフォーム Windows
ヘッダー d3d9.h (D3D9.h を含む)
Library D3D9.lib

こちらもご覧ください

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

頂点バッファー (Direct3D 9)