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 和参数中提供信息。 运行时在 标志D3DDDIARG_DRAWRECTPATCH 结构的成员(由 pData 指定)中设置标志,以指示它是否提供此可选信息。

运行时在 句柄 D3DDDIARG_DRAWRECTPATCH成员中提供 UINT 值,以引用修补图面。 每当运行时重新绘制修补图面时,它都会传递修补句柄值,不需要重新指定修补图面的D3DDDIRECTPATCH_INFO数据结构。 用户模式显示驱动程序可以预计算和缓存正向差系数以及任何其他信息。 因此,后续调用驱动程序的 DrawRectPatch 函数,该函数使用相同的修补句柄值更高效地运行。

Handle 中的实际值由应用程序确定,并且不受运行时控制。 因此,驱动程序必须处理可由 UINT 指定的任何值。

特殊 Handle 值为零表示修补程序是动态的;因此,驱动程序无法预计算或缓存修补程序的信息。 Handle 的非零值指示修补程序是静态的(或更新频率较低):因此,驱动程序可以预计算和缓存修补程序的信息。

驱动程序必须在其 DrawRectPatch 函数中处理以下方案:

  • 如果 句柄 成员为零,则修补程序是动态的。 驱动程序既不能预计算,也不应缓存修补程序的信息。 在这种情况下,运行时将指针传递给 pInfo 参数中的D3DDDIRECTPATCH_INFO结构,并设置D3DDDIARG_DRAWRECTPATCH结构 标志 成员中的RTPATCHFLAG_HASINFO标志,以指示 pInfo中是否存在D3DDDIRECTPATCH_INFO结构。 (可选)运行时还可以在 标志 中设置RTPATCHFLAG_HASSEGS标志,以指示 pPatch 参数指定的段信息是否存在。 但是,如果运行时在 pPatch不提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
  • 如果在之前调用驱动程序的 DrawRectPatch 函数时未指定非零 Handle 值,则运行时将绘制新的可缓存修补程序。 驱动程序应分配内存来存储缓存的数据,并将此数据添加到其修补句柄表中。 由于运行时以前尚未绘制此修补程序,因此运行时应设置RTPATCHFLAG_HASINFO标志,并将指针传递给 pInfo 参数中的D3DDDIRECTPATCH_INFO结构。 驱动程序必须检查RTPATCHFLAG_HASINFO标志,以验证修补程序信息是否存在。 如果未指定修补程序信息,驱动程序应忽略 DrawRectPatch 调用,并且不应为其修补句柄表中的缓存数据分配内存。 (可选)运行时可以设置RTPATCHFLAG_HASSEGS标志来指示段信息是否存在。 但是,如果运行时在 pPatch不提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
  • 如果在之前调用驱动程序的 DrawRectPatch 函数并设置RTPATCHFLAG_HASINFO标志时指定了非零 Handle 值,则运行时将更新修补程序的定义。 运行时将指针传递给 pInfo 参数中的D3DDDIRECTPATCH_INFO结构,驱动程序必须重新计算和收回修补程序信息。 (可选)运行时可以设置RTPATCHFLAG_HASSEGS标志来指示段信息是否存在。 但是,如果运行时在 pPatch不提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
  • 如果在之前调用驱动程序的 DrawRectPatch 函数时指定了非零 Handle 值,并且未设置RTPATCHFLAG_HASINFO标志,则运行时将重新绘制修补程序。 驱动程序应使用缓存的信息来绘制修补程序。 在这种情况下,驱动程序会忽略当前顶点流,而是使用缓存的信息。 但是,运行时仍可以指定新的段信息;因此,驱动程序应检查RTPATCHFLAG_HASSEGS标志并处理指定的段信息,即使它使用缓存的修补程序。
驱动程序通过D3DRS_DELETERTPATCH呈现状态接收通知以释放缓存的修补程序信息。 此呈现状态的值是要删除的修补程序。

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows作系统中可用。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS