PFND3DDDI_DRAWTRIPATCH回调函数 (d3dumddi.h)

DrawTriPatch 函数绘制新的或缓存的三角补丁,或更新以前定义的修补程序的规范。

语法

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

参数

[in] hDevice

显示设备的句柄(图形上下文)。

unnamedParam2

pData [in]

指向描述要绘制的三角补丁的 D3DDDIARG_DRAWTRIPATCH 结构的指针。

unnamedParam3

pInfo [in]

自选。 指向描述有关三角补丁信息的D3DDDITRIPATCH_INFO结构的指针。

unnamedParam4

pPatch [in]

自选。 指向包含三个浮点值(D3DFLOAT[3])的缓冲区的指针,该缓冲区为三角补丁的每个边缘提供段计数。

返回值

DrawTriPatch 如果未成功绘制三角补丁,则返回S_OK或适当的错误结果。

言论

当 Microsoft Direct3D 运行时调用用户模式显示驱动程序的 DrawTriPatch 函数时,它可以选择在 pInfo 中提供信息,pPatch 参数。 运行时在 标志D3DDDIARG_DRAWTRIPATCH 结构的成员设置标志,该结构由 pData 指定,以指示它是否提供此可选信息。

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

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

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

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

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

要求

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

另请参阅

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS