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

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

零的特殊 句柄 值指示修补程序是动态的;因此,驱动程序无法预计算或缓存修补程序的信息。 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标志并处理指定的段信息。
驱动程序接收通知,以通过D3DRS_DELETERTPATCH呈现状态释放缓存的修补程序信息。 此呈现状态的值是要删除的修补程序。

要求

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

另请参阅

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS