D3DHAL_DP2DRAWRECTPATCH 结构 (d3dhal.h)
仅限 DirectX 8.0 及更高版本。
当D3DHAL_DP2COMMAND结构的bCommand 成员设置为 D3DDP2OP_DRAWRECTPATCH 并用于呈现矩形补丁时,D3DHAL_DRAWRECTPATCH由 D3dDrawPrimitives2 回调从命令缓冲区进行分析。
语法
typedef struct _D3DHAL_DP2DRAWRECTPATCH {
DWORD Handle;
DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;
成员
Handle
指定与图面关联的句柄。
Flags
指定 DP2 流中D3DHAL_DP2DRAWRECTPATCH数据结构后面的其他信息(如果有)。
注解
Handle 成员用于将图面与句柄相关联,以便下次绘制此图面时,无需为此修补程序重新指定D3DRECTPATCH_INFO数据结构。 这使得驱动程序可以预先计算和缓存前向差异系数和/或任何其他信息,从而允许使用同一句柄的后续D3DDP2OP_DRAWRECTPATCH令牌更高效地执行。 最新的 DirectX SDK 文档中介绍了D3DRECTPATCH_INFO。
Handle 的实际值由应用程序确定,不受运行时控制。 因此,驱动程序应准备好处理可由 DWORD 指定的任何值。 特殊句柄值为零意味着修补程序是动态的,并且没有针对此修补程序的预计算或缓存信息。 Handle 的次零值表示修补程序是静态 (或更新为低频率) 并且可以进行预计算和缓存。
Flags 成员用于传达 DP2 流中D3DHAL_DP2DRAWRECTPATCH数据结构后面的其他信息(如果有)。 如果指定RTPATCHFLAG_HASSEGS,则 DP2 流中D3DHAL_DP2DRAWRECTPATCH后跟四个浮点值。 这些浮点数为矩形补丁的四个边缘中的每个边缘提供段计数,并替代呈现状态D3DRS_PATCHSEGMENTS的值。 如果指定了RTPATCHFLAG_HASINFO,则 DP2 流中将遵循D3DRECTPATCH_INFO数据结构。 如果同时指定了两个标志,则指定段计数的四个浮点数遵循D3DHAL_DP2DRAWRECTPATCH,D3DRECTPATCH_INFO结构紧跟浮点值。
处理D3DDP2OP_DRAWRECTPATCH时,驱动程序必须处理四种方案。
如果 Handle 为零,则修补程序是动态的,不应执行预计算或缓存。 在这种情况下,D3DRECTPATCH_INFO遵循 DP2 流 (中的D3DHAL_DP2DRAWRECTPATCH,并将标志RTPATCHFLAG_HASINFO设置为指示是否存在D3DRECTPATCH_INFO数据结构) 。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。
如果 句柄 为次零,并且句柄值尚未由以前的D3DDP2OP_DRAWRECTPATCH指定,则表示正在绘制新的可缓存修补程序。 驱动程序应分配内存来存储缓存的数据,并将此数据添加到其修补程序句柄表中。 由于以前未见过此修补程序,因此应设置RTPATCHFLAG_HASINFO标志,并在 DP2 流中遵循D3DRECTPATCH_INFO结构。 但是,运行时不保证这一点,驱动程序应通过测试 标志来验证是否存在修补程序信息。 如果未指定任何信息,则应忽略此令牌,并且不应在驱动程序的修补程序句柄表中分配任何句柄。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。
如果 Handle 为次零,则句柄值已由早期D3DDP2OP_DRAWRECTPATCH标记指定,并且 Flags 字段包含RTPATCHFLAG_HASINFO,则更新修补程序的定义。 DP2 流中遵循D3DRECTPATCH_INFO数据结构,驱动程序应使用该结构来重新计算和重新缓存修补程序信息。 (可选)还可以将RTPATCHFLAG_HASSEGS设置为指示存在段信息。 但是,如果省略此值,则应改用呈现状态D3DRS_PATCHSEGMENTS的值。
如果 Handle 为次零值,则句柄值已由早期D3DDP2OP_DRAWRECTPATCH标记指定,并且 Flags 字段不包含RTPATCHFLAG_HASINFO,则缓存的信息应用于绘制修补程序。 在这种情况下,将忽略当前顶点流;应改用缓存的信息。 但是,在这种情况下,仍可以指定新的段信息。 因此,驱动程序应检查标志RTPATCHFLAG_HASSEGS并处理指定的段信息,即使使用缓存的修补程序也是如此。
驱动程序会收到通知,指示通过呈现状态D3DRS_DELETERTPATCH释放缓存的修补程序信息。 此呈现状态的值是要删除的修补程序。
要求
要求 | 值 |
---|---|
Header | d3dhal.h (包括 D3dhal.h) |
另请参阅
D3DDP2OP_DRAWRECTPATCH
D3DRS_DELETERTPATCH