PFND3DDDI_PRESENT回调函数 (d3dumddi.h)

Present 函数通知用户模式显示驱动程序应用程序已完成呈现,并请求驱动程序通过复制或翻转来显示源图面,或者驱动程序执行颜色填充操作。

语法

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

参数

hDevice

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

unnamedParam2

pData [in]

指向描述要显示的资源 的D3DDDIARG_PRESENT 结构的指针。

返回值

Present 返回以下值之一:

返回代码 说明
S_OK 资源已成功显示。
E_OUTOFMEMORY 无法分配所需的内存以使其完成。

注解

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 Present 函数,以通知用户模式显示驱动程序应用程序已完成呈现,并请求驱动程序显示源图面或驱动程序执行颜色填充操作。 如果 pData 参数指向的 D3DDDIARG_PRESENT 结构的 hSrcResource 成员为非 NULL则 Present 请求用户模式显示驱动程序在屏幕上显示新内容;如果 hSrcResourceNULL则 Present 请求用户模式显示驱动程序对屏幕执行颜色填充操作。

如果 D3DDDIARG_PRESENT 结构的 hDstResource 成员为 NULL,则目标图面未知。 此外,在通过 DMA 将硬件命令流发送到图形处理器之前,目标图面和剪裁矩形列表是在内核模式下确定的。

因此,用户模式显示驱动程序无法生成硬件指令来执行当前操作。 这些硬件说明必须由显示微型端口驱动程序生成。 但是,当 D3DDDIARG_PRESENT 的 hSrcResource 成员为非 NULL 时,用户模式显示驱动程序必须派生源图面的分配句柄,并在调用 pfnPresentCb 函数时将此句柄插入到 D3DDDICB_PRESENT 结构的 hSrcAllocation 成员中。 然后,显示微型端口驱动程序可以成功生成硬件指令。 用户模式显示驱动程序通常从 D3DDDIARG_PRESENT 结构中的资源信息派生分配句柄。

如果 D3DDDIARG_PRESENT 的 hDstResource 成员为非 NULL,则当前 的目标图面是已知的,并且用户模式显示驱动程序必须使用相应的分配句柄填充 D3DDDICB_PRESENThDstAllocation 成员。

如果用户模式显示驱动程序公开的 DDI 版本小于 0x0000000C (驱动程序在调用驱动程序OpenAdapter 函数) 时,驱动程序在 D3D10DDIARG_OPENADAPTER 结构的 DriverVersion 成员中返回此值,则 Direct3D 运行时首先调用用户模式显示驱动程序的 Flush 函数,以在运行时调用用户模式显示驱动程序的 Present 函数之前,在命令缓冲区中提交任何未完成的硬件命令。 这样,用户模式显示驱动程序的 Present 函数通过呈现操作序列化 (即调用 pfnRenderCb 函数) 。 如果用户模式显示驱动程序公开 0x0000000C 或更高版本的 DDI 版本,并且调用的应用程序在窗口模式下运行,则运行时还会在调用 Present 之前调用 Flush。 如果用户模式显示驱动程序公开 0x0000000C 或更高版本的 DDI 版本,并且调用应用程序以全屏模式运行,则运行时在调用 Present 之前不会调用 Flush。 此行为允许实现自己的线程的驱动程序将当前调用排队。 公开 DDI 版本的 0x0000000C 或更高版本的驱动程序必须调用 pfnRenderCb ,以在驱动程序调用 pfnPresentCb 函数之前在内部刷新任何未完成的命令缓冲区。

要求

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

另请参阅

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

刷新

pfnRenderCb