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

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

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

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

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

  • 如果 Handle 成员为零,则修补程序是动态的。 驱动程序不应预先计算或缓存修补程序的信息。 在这种情况下,运行时将指针传递到 pInfo 参数中的 D3DDDITRIPATCH_INFO 结构,并在 D3DDDIARG_DRAWTRIPATCH 结构的 Flags 成员中设置RTPATCHFLAG_HASINFO标志,以指示 pInfo 中是否存在D3DDDITRIPATCH_INFO结构。 (可选)运行时还可以在 Flags 中设置RTPATCHFLAG_HASSEGS标志,以指示是否存在指定的 pPatch 参数的段信息。 但是,如果运行时未在 pPatch 中提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
  • 如果之前未在对驱动程序的 DrawTriPatch 函数的调用中指定非零 Handle 值,则运行时将绘制新的可缓存修补程序。 驱动程序应分配内存来存储缓存的数据,并应将此数据添加到其修补程序句柄表。 由于运行时之前未绘制此修补程序,因此运行时应设置 RTPATCHFLAG_HASINFO 标志,并在 pInfo 参数中传递指向 D3DDDIRECTPATCH_INFO 结构的指针。 驱动程序必须检查RTPATCHFLAG_HASINFO标志,以验证是否存在修补程序信息。 如果未指定修补程序信息,驱动程序应忽略 DrawTriPatch 调用,并且不应为其修补程序句柄表中的缓存数据分配内存。 (可选)运行时可以设置RTPATCHFLAG_HASSEGS标志来指示存在段信息。 但是,如果运行时未在 pPatch 中提供段信息,则运行时应改用D3DRS_PATCHSEGMENTS呈现状态值。
  • 如果之前在对驱动程序的 DrawTriPatch 函数的调用中指定了非零 Handle 值,并且设置了 RTPATCHFLAG_HASINFO 标志,则运行时将更新修补程序的定义。 运行时将指针传递到 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