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 请求用户模式显示驱动程序在屏幕上显示新内容;如果 hSrcResource 为 NULL,则 Present 请求用户模式显示驱动程序对屏幕执行颜色填充操作。
如果 D3DDDIARG_PRESENT 结构的 hDstResource 成员为 NULL,则目标图面未知。 此外,在通过 DMA 将硬件命令流发送到图形处理器之前,目标图面和剪裁矩形列表是在内核模式下确定的。
因此,用户模式显示驱动程序无法生成硬件指令来执行当前操作。 这些硬件说明必须由显示微型端口驱动程序生成。 但是,当 D3DDDIARG_PRESENT 的 hSrcResource 成员为非 NULL 时,用户模式显示驱动程序必须派生源图面的分配句柄,并在调用 pfnPresentCb 函数时将此句柄插入到 D3DDDICB_PRESENT 结构的 hSrcAllocation 成员中。 然后,显示微型端口驱动程序可以成功生成硬件指令。 用户模式显示驱动程序通常从 D3DDDIARG_PRESENT 结构中的资源信息派生分配句柄。
如果 D3DDDIARG_PRESENT 的 hDstResource 成员为非 NULL,则当前 的目标图面是已知的,并且用户模式显示驱动程序必须使用相应的分配句柄填充 D3DDDICB_PRESENT 的 hDstAllocation 成员。
如果用户模式显示驱动程序公开的 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) |