IDirect3DDevice9::CreateVertexBuffer 方法 (d3d9helper.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来处理硬件或软件中的顶点。
创建顶点缓冲区时,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 接口支持使用存储在顶点缓冲区对象中的顶点数据呈现基元。 顶点缓冲区是从 IDirect3DDevice9 创建的,并且仅可用于创建它们的 IDirect3DDevice9 对象。
当设置为非零值(必须是有效的 FVF 代码)时,FVF 参数指示缓冲区内容由 FVF 代码进行特征化。 使用 FVF 代码创建的顶点缓冲区称为 FVF 顶点缓冲区。 有关详细信息,请参阅 FVF 顶点缓冲区 (Direct3D 9) 。
非 FVF 缓冲区可用于在单通道多通道呈现或多文本呈现期间交错数据。 为此,一个缓冲区包含几何图形数据,另一个缓冲区包含要呈现的每个纹理的纹理坐标。 呈现时,包含几何数据的缓冲区与包含纹理坐标的每个缓冲区交错。 如果改用 FVF 缓冲区,除特定于呈现的每个纹理的纹理坐标数据外,每个缓冲区还需要包含相同的几何图形数据。 这会导致速度或内存损失,具体取决于使用的策略。 有关纹理坐标的详细信息,请参阅 Direct3D 9) (纹理坐标 。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |
另请参阅
IDirect3DDevice9::P rocessVertices