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 指定 lpDDVertexlpVertices 指向的顶点缓冲区中存在的每个顶点数据字段。 此成员可以是下表中值的按位 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

指定顶点数据开始位置的 lpDDVertexlpVertices 指向的图面的字节数。

dwVertexLength

指定 lpDDVertexlpVertices 指向的图面中存在有效数据的顶点数。 此有效数据从 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 成员指定顶点中的值。

若要计算位于 lpDDVertexlpVertices 图面中的有效数据(以字节为单位),请将 dwVertexLength 中的值乘以 dwVertexSize 中的值。

要求

要求
Header d3dhal.h (包括 D3dhal.h)

另请参阅

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL