D3DHAL_DP2DRAWTRIPATCH 结构 (d3dhal.h)

仅限 DirectX 8.0 及更高版本。

当 D3DHAL_DP2COMMAND 结构的 bCommand 成员设置为 D3DDP2OP_DRAWTRIPATCH 时,D3dDrawPrimitives2 回调从命令缓冲区分析D3DHAL_DRAWTRIPATCH,并且用于呈现三角补丁。

语法

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

成员

Handle

指定与图面关联的句柄。

Flags

指定 DP2 流中D3DHAL_DP2DRAWTRIPATCH数据结构后面的其他信息(如果有)。

注解

Handle 成员用于将图面与图柄相关联,以便下次绘制此图面时,无需为此修补程序重新指定D3DTRIPATCH_INFO数据结构。 这使得驱动程序可以预先计算和缓存前向差异系数和/或任何其他信息,从而允许使用同一句柄的后续D3DDP2OP_DRAWTRIPATCH令牌更高效地执行。 最新的 DirectX SDK 文档中介绍了D3DTRIPATCH_INFO。

Handle 的实际值由应用程序确定,不受运行时控制。 因此,驱动程序应准备好处理 DWORD 可指定的任何值。 特殊句柄值为零意味着修补程序是动态的,并且没有针对此修补程序的预计算或缓存信息。 Handle 的次零值表示修补程序是静态 (或更新为低频率) 并且可以进行预计算和缓存。

Flags 成员用于传达 DP2 流中D3DHAL_DP2DRAWTRIPATCH数据结构后面的其他信息(如果有)。 如果指定了RTPATCHFLAG_HASSEGS,则 DP2 流中D3DHAL_DP2DRAWTRIPATCH后跟三个浮点值。 这些浮点数为三角补丁的三条边缘中的每一条提供段计数,并替代呈现状态D3DRS_PATCHSEGMENTS的值。 如果指定了RTPATCHFLAG_HASINFO,则 DP2 流中将遵循D3DTRIPATCH_INFO数据结构。 如果同时指定了两个标志,则指定段计数的三个浮点数D3DHAL_DP2DRAWTRIPATCH后,D3DTRIPATCH_INFO结构紧跟浮点值。

处理D3DDP2OP_DRAWTRIPATCH时,驱动程序必须处理四种方案。

如果 Handle 为零,则修补程序是动态的,不应执行预计算或缓存。 在这种情况下,DP2 流 (D3DHAL_DP2DRAWTRIPATCH后有一个D3DTRIPATCH_INFO,RTPATCHFLAG_HASINFO标志设置为指示) 是否存在D3DTRIPATCH_INFO数据结构。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。

如果 Handle 为次零,并且句柄值尚未由以前的D3DDP2OP_DRAWTRIPATCH指定,则表示正在绘制新的可缓存修补程序。 驱动程序应分配内存来存储缓存的数据,并将此数据添加到其修补程序句柄表中。 由于以前未见过此修补程序,因此应设置 RTPATCHFLAG_HASINFO 标志,并且 DP2 流中应遵循D3DTRIPATCH_INFO结构。 但是,运行时不保证这一点,驱动程序应通过测试 标志来验证是否存在修补程序信息。 如果未指定任何信息,则应忽略此令牌,并且不应在驱动程序的修补程序句柄表中分配任何句柄。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。

如果 Handle 为次零,则句柄值已由较早的D3DDP2OP_DRAWTRIPATCH标记指定,并且 Flags 字段包含RTPATCHFLAG_HASINFO,则会更新修补程序的定义。 DP2 流中遵循D3DTRIPATCH_INFO数据结构,驱动程序应使用该结构来重新计算和重新缓存修补程序信息。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。

如果 Handle 为次零,则句柄值已由早期D3DDP2OP_DRAWTRIPATCH标记指定,并且 Flags 字段不包含RTPATCHFLAG_HASINFO,则缓存的信息应用于绘制修补程序。 在这种情况下,将忽略当前顶点流;应改用缓存的信息。 但是,在这种情况下,仍可以指定新的段信息。 因此,驱动程序应检查标志RTPATCHFLAG_HASSEGS并处理指定的段信息,即使使用缓存的修补程序也是如此。

驱动程序会收到通知,指示通过呈现状态D3DRS_DELETERTPATCH释放缓存的修补程序信息。 此呈现状态的值是要删除的修补程序。

要求

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

另请参阅

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2