D3DHAL_DRAWPRIMITIVES2DATA结构 (d3dhal.h)
D3DHAL_DRAWPRIMITIVES2DATA结构包含 D3dDrawPrimitives2 函数呈现基元所需的信息。
语法
typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
ULONG_PTR dwhContext;
DWORD dwFlags;
DWORD dwVertexType;
LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
DWORD dwCommandOffset;
DWORD dwCommandLength;
union {
LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
LPVOID lpVertices;
};
DWORD dwVertexOffset;
DWORD dwVertexLength;
DWORD dwReqVertexBufSize;
DWORD dwReqCommandBufSize;
LPDWORD lpdwRStates;
union {
DWORD dwVertexSize;
HRESULT ddrval;
};
DWORD dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;
成员
dwhContext
指定 Direct3D 设备的上下文句柄。
dwFlags
指定向驱动程序提供其他说明或从驱动程序提供信息的标志。 此成员可以是以下值的按位 OR:
价值 | 意义 |
---|---|
D3DHALDP2_EXECUTEBUFFER | 命令和顶点缓冲区是在系统内存中创建的。 驱动程序应更新 lpdwRStates 指向的状态数组。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_REQCOMMANDBUFSIZE | 驱动程序必须能够将当前命令缓冲区至少增加 dwReqCommandBufSize 中指定的大小。 不支持命令缓冲区多缓冲的驱动程序可以忽略此标志。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_REQVERTEXBUFSIZE | 驱动程序必须能够分配至少在 dwReqCommandBufSize 中指定的大小的顶点缓冲区。 不支持顶点缓冲区多缓冲的驱动程序可以忽略此标志。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_SWAPCOMMANDBUFFER | 驱动程序可以使用新的命令缓冲区交换 lpDDCommands 指向的缓冲区,并立即返回,同时 Direct3D 将异步处理原始缓冲区,同时 Direct3D 填充新的命令缓冲区。 不支持命令缓冲区多缓冲的驱动程序可以忽略此标志。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_SWAPVERTEXBUFFER | 驱动程序可以将 lpDDVertex 或 lpVertices 指向的缓冲区与新的顶点缓冲区交换,并立即返回,在 Direct3D 填充新顶点缓冲区时异步处理原始缓冲区。 不支持顶点缓冲区多缓冲的驱动程序可以忽略此标志。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_USERMEMVERTICES | lpVertices 成员有效,因此驱动程序应从 lpVertices 指向的用户分配内存中获取顶点数据。 此标志仅由 Direct3D 设置。 |
D3DHALDP2_VIDMEMCOMMANDBUF | 驱动程序作为交换缓冲区分配的命令缓冲区不在系统内存中。 此标志可由支持命令缓冲区多缓冲的驱动程序设置。 |
D3DHALDP2_VIDMEMVERTEXBUF | 驱动程序作为交换缓冲区分配的顶点缓冲区不在系统内存中。 此标志可由支持顶点缓冲区多缓冲的驱动程序设置。 |
dwVertexType
标识顶点缓冲区中数据的 FVF;也就是说,dwVertexType 指定顶点数据字段存在于顶点缓冲区中,lpDDVertex 或 lpVertices 指向。 此成员可以是下表中值的按位 OR。 仅设置 D3DFVF_TEXx 标志之一。
价值 | 意义 |
---|---|
D3DFVF_DIFFUSE | 每个顶点都有漫射颜色。 |
D3DFVF_SPECULAR | 每个顶点都有一种反射颜色。 |
D3DFVF_TEX0 | 顶点数据不提供纹理坐标。 |
D3DFVF_TEX1 | 每个顶点都有一组纹理坐标。 |
D3DFVF_TEX2 | 每个顶点都有两组纹理坐标。 |
D3DFVF_TEX3 | 每个顶点都有三组纹理坐标。 |
D3DFVF_TEX4 | 每个顶点都有四组纹理坐标。 |
D3DFVF_TEX5 | 每个顶点都有五组纹理坐标。 |
D3DFVF_TEX6 | 每个顶点都有六组纹理坐标。 |
D3DFVF_TEX7 | 每个顶点都有七组纹理坐标。 |
D3DFVF_TEX8 | 每个顶点都有八组纹理坐标。 |
D3DFVF_XYZRHW | 每个顶点都有 x、y、z 和 w 坐标。 始终设置此标志。 |
lpDDCommands
dwCommandOffset
dwCommandLength
指定图面中有效命令数据的字节数,lpDDCommands 指向从 dwCommandOffset 开始。
lpDDVertex
指向在 dwFlags中未设置D3DHALDP2_USERMEMVERTICES标志时标识包含顶点数据的 DirectDraw 图面的 DD_SURFACE_LOCAL 结构。 与 lpVertices形成联合。
lpVertices
当在 dwFlags 中设置D3DHALDP2_USERMEMVERTICES标志时,指向包含顶点数据的用户模式内存块。
dwVertexOffset
指定 lpDDVertex 或 lpVertices 顶点数据所指向的图面中的字节数。
dwVertexLength
指定 lpDDVertex 或 lpVertices指向的图面中存在有效数据的顶点数。 此有效数据从 dwVertexOffset开始。
dwReqVertexBufSize
指定驱动程序必须为交换顶点缓冲区分配的最小字节数。 仅当设置D3DHALDP2_REQVERTEXBUFSIZE标志时,此成员才有效。 不支持顶点缓冲区多缓冲的驱动程序应忽略此成员。
dwReqCommandBufSize
指定驱动程序必须增加交换命令缓冲区的最小字节数。 仅当设置D3DHALDP2_REQCOMMANDBUFSIZE标志时,此成员才有效。 不支持命令缓冲区多缓冲的驱动程序应忽略此成员。
lpdwRStates
指向驱动程序在分析命令缓冲区中的呈现状态命令时应更新的呈现状态数组。 驱动程序应仅在 dwFlags中设置D3DHALDP2_EXECUTEBUFFER标志时更新此数组。 驱动程序应使用 D3DRENDERSTATETYPE 枚举类型来更新呈现状态数组的相应元素。
dwVertexSize
指定每个顶点的大小(以字节为单位)。 此成员与 ddrval形成联合。
ddrval
指定驱动程序写入 D3dDrawPrimitives2的返回值的位置。 D3D_OK指示成功。 否则,驱动程序应返回相应的 D3DERR_Xxx 错误代码。 有关详细信息,请参阅 direct3D 驱动程序回调 返回代码。
价值 | 意义 |
---|---|
D3D_OK | 作已成功完成。 |
D3DERR_COMMAND_UNPARSED | 驱动程序需要 Direct3D 运行时来分析执行缓冲区。 |
dwErrorOffset
每个D3DHAL_DP2RESPONSEQUERY后跟以下与查询相关的数据:
- BOOL for D3DQUERYTYPE_EVENT
- D3DQUERYTYPE_OCCLUSION的 DWORD
- D3DQUERYTYPE_VCACHE的D3DDEVINFO_VCACHE结构
言论
请注意,dwVertexOffset 成员指定值(以字节为单位);dwVertexLength 成员 指定顶点中的值。
若要计算 lpDDVertex 或 lpVertices图面中的有效数据(以字节为单位)将 dwVertexLength 中的值乘以 dwVertexSize中的值。
要求
要求 | 价值 |
---|---|
标头 | d3dhal.h (包括 D3dhal.h) |