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 指定顶点数据字段存在于顶点缓冲区中,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

指向在 dwFlags中未设置D3DHALDP2_USERMEMVERTICES标志时标识包含顶点数据的 DirectDraw 图面的 DD_SURFACE_LOCAL 结构。 与 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
  • D3DQUERYTYPE_OCCLUSION的 DWORD
  • D3DQUERYTYPE_VCACHE的D3DDEVINFO_VCACHE结构

言论

请注意,dwVertexOffset 成员指定值(以字节为单位);dwVertexLength 成员 指定顶点中的值。

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

要求

要求 价值
标头 d3dhal.h (包括 D3dhal.h)

另请参阅

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL