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 顶点缓冲区,长度必须足够大以包含至少一个顶点,但不需要是顶点大小的倍数。 对于非 FVF 缓冲区,不会验证长度。 请参阅“备注”。

[in] Usage

类型: DWORD

使用情况可以为 0,这表示没有使用值。 但是,如果需要使用,请使用一个或多个 D3DUSAGE 常量的组合。 最好将 CreateVertexBuffer 中的 usage 参数与 IDirect3D9::CreateDevice 中的行为标志相匹配。 有关详细信息,请参阅“备注”。

[in] FVF

类型: DWORD

D3DFVF 的组合,这是一种用法说明符,用于描述此缓冲区中顶点的顶点格式。 如果此参数设置为有效的 FVF 代码,则创建的顶点缓冲区是 FVF 顶点缓冲区 (请参阅备注) 。 否则,如果此参数设置为零,则顶点缓冲区为非 FVF 顶点缓冲区。

[in] Pool

类型: D3DPOOL

D3DPOOL枚举类型的成员,描述要在其中放置资源的有效内存类。 不要设置为 D3DPOOL_SCRATCH。

[out, retval] ppVertexBuffer

类型: IDirect3DVertexBuffer9**

指向 IDirect3DVertexBuffer9 接口的指针的地址,表示创建的顶点缓冲区资源。

[in] pSharedHandle

类型: 句柄*

保留。 将此参数设置为 NULL。 此参数可用于 Direct3D 9 for Windows Vista 共享资源

返回值

类型: HRESULT

如果方法成功,则返回值D3D_OK。 如果方法失败,则返回值可以是以下值之一:D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY E_OUTOFMEMORY。

注解

顶点缓冲区可以与硬件或软件顶点处理一起使用。 这由设备和顶点缓冲区的创建方式确定。

创建设备时,CreateDevice 使用行为标志来确定是处理硬件还是软件中的顶点。 有三种可能性:

  • 通过设置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 代码)时,FVF 参数指示缓冲区内容由 FVF 代码进行特征化。 使用 FVF 代码创建的顶点缓冲区称为 FVF 顶点缓冲区。 有关详细信息,请参阅 FVF 顶点缓冲区 (Direct3D 9)

非 FVF 缓冲区可用于在单通道多通道呈现或多文本呈现期间交错数据。 为此,一个缓冲区包含几何图形数据,另一个缓冲区包含要呈现的每个纹理的纹理坐标。 呈现时,包含几何数据的缓冲区与包含纹理坐标的每个缓冲区交错。 如果改用 FVF 缓冲区,除特定于呈现的每个纹理的纹理坐标数据外,每个缓冲区还需要包含相同的几何图形数据。 这会导致速度或内存损失,具体取决于使用的策略。 有关纹理坐标的详细信息,请参阅 Direct3D 9) (纹理坐标

要求

要求
目标平台 Windows
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

另请参阅

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

顶点缓冲区 (Direct3D 9)