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 设置。 |
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
指向 DD_SURFACE_LOCAL 结构,该结构标识未在 dwFlags 中设置D3DHALDP2_USERMEMVERTICES标志时包含顶点数据的 DirectDraw 图面。 与 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
- DWORD for D3DQUERYTYPE_OCCLUSION
- D3DQUERYTYPE_VCACHE 的D3DDEVINFO_VCACHE结构
注解
请注意, dwVertexOffset 成员指定以字节为单位的值; dwVertexLength 成员指定顶点中的值。
若要计算位于 lpDDVertex 或 lpVertices 图面中的有效数据(以字节为单位),请将 dwVertexLength 中的值乘以 dwVertexSize 中的值。
要求
要求 | 值 |
---|---|
Header | d3dhal.h (包括 D3dhal.h) |