PFND3DDDI_DRAWRECTPATCH回调函数 (d3dumddi.h)
DrawRectPatch 函数绘制新的或缓存的矩形补丁,或更新以前定义的修补程序的规范。
语法
PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;
HRESULT Pfnd3dddiDrawrectpatch(
[in] HANDLE hDevice,
const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
const D3DDDIRECTPATCH_INFO *unnamedParam3,
const FLOAT *unnamedParam4
)
{...}
参数
[in] hDevice
显示设备的句柄 (图形上下文) 。
unnamedParam2
pData [in]
指向描述要绘制的矩形补丁 的D3DDDIARG_DRAWRECTPATCH 结构的指针。
unnamedParam3
pInfo [in]
可选。 指向描述矩形修补程序相关信息的D3DDDIRECTPATCH_INFO结构的指针。
unnamedParam4
pPatch [in]
可选。 指向缓冲区的指针,该缓冲区包含四个浮点值 (D3DFLOAT[4]) ,这些值为矩形补丁的四个边缘中的每个边缘提供段计数。
返回值
如果矩形补丁未成功绘制,DrawRectPatch 将返回S_OK或适当的错误结果。
注解
当 Microsoft Direct3D 运行时调用pPatch 作为用户模式显示驱动程序的 DrawRectPatch 函数时,它可以选择在 pInfo 和参数中提供信息。 运行时在由 pData 指定的 D3DDDIARG_DRAWRECTPATCH 结构的 Flags 成员中设置标志,以指示它是否提供此可选信息。
运行时在 D3DDDIARG_DRAWRECTPATCH 的 Handle 成员中提供一个 UINT 值来引用修补图面。 每当运行时重新绘制修补图面时,它都会传递修补程序句柄值,并且不需要为修补图面重新指定D3DDDIRECTPATCH_INFO数据结构。 用户模式显示驱动程序可以预计算和缓存正向差系数和任何其他信息。 因此,对使用相同的修补程序句柄值的驱动程序 DrawRectPatch 函数的后续调用会更高效地运行。
Handle 中的实际值由应用程序确定,不受运行时控制。 因此,驱动程序必须处理可由 UINT 指定的任何值。
特殊 Handle 值零表示修补程序是动态的;因此,驱动程序无法预计算或缓存修补程序的信息。 Handle 的非零值指示修补程序是静态 (,或者更新为低频率) ;因此,驱动程序可以预计算和缓存修补程序的信息。
驱动程序必须在其 DrawRectPatch 函数中处理以下方案:
- 如果 Handle 成员为零,则修补程序是动态的。 驱动程序不应预先计算或缓存修补程序的信息。 在这种情况下,运行时将指针传递到 pInfo 参数中的 D3DDDIRECTPATCH_INFO 结构,并在 D3DDDIARG_DRAWRECTPATCH 结构的 Flags 成员中设置RTPATCHFLAG_HASINFO标志,以指示 pInfo 中是否存在D3DDDIRECTPATCH_INFO结构。 (可选)运行时还可以在 Flags 中设置RTPATCHFLAG_HASSEGS标志,以指示 是否存在由 pPatch 参数指定的段信息。 但是,如果运行时未在 pPatch 中提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
- 如果之前在对驱动程序的 DrawRectPatch 函数的调用中未指定非零句柄值,则运行时将绘制新的可缓存修补程序。 驱动程序应分配内存来存储缓存的数据,并应将此数据添加到其修补程序句柄表。 由于运行时以前未绘制此修补程序,因此运行时应设置 RTPATCHFLAG_HASINFO 标志,并将指针传递到 pInfo 参数中的 D3DDDIRECTPATCH_INFO 结构。 驱动程序必须为RTPATCHFLAG_HASINFO标志检查,以验证是否存在修补程序信息。 如果未指定修补程序信息,驱动程序应忽略 DrawRectPatch 调用,并且不应为其修补程序句柄表中的缓存数据分配内存。 (可选)运行时可以设置RTPATCHFLAG_HASSEGS标志来指示是否存在段信息。 但是,如果运行时未在 pPatch 中提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
- 如果之前在对驱动程序的 DrawRectPatch 函数的调用中指定了非零句柄值,并且设置了 RTPATCHFLAG_HASINFO 标志,则运行时会更新修补程序的定义。 运行时将指针传递到 pInfo 参数中的 D3DDDIRECTPATCH_INFO 结构,驱动程序必须重新计算并重新缓存修补程序信息。 (可选)运行时可以设置RTPATCHFLAG_HASSEGS标志来指示是否存在段信息。 但是,如果运行时未在 pPatch 中提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
- 如果之前在对驱动程序的 DrawRectPatch 函数的调用中指定了非零句柄值,并且未设置RTPATCHFLAG_HASINFO标志,则运行时将重新绘制修补程序。 驱动程序应使用缓存的信息来绘制修补程序。 在这种情况下,驱动程序将忽略当前顶点流,并改用缓存的信息。 但是,运行时仍可以指定新的段信息;因此,驱动程序应检查RTPATCHFLAG_HASSEGS标志并处理指定的段信息,即使它使用缓存的修补程序也是如此。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |