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 函数,以通知用户模式显示驱动程序应用程序已完成呈现并请求驱动程序显示源图面或驱动程序执行颜色填充作。 如果 hSrcResourceD3DDDIARG_PRESENT 结构的成员,pData 参数指向的非NULL,显示 用户模式显示驱动程序向屏幕显示新内容的请求;如果 hSrcResource为 NULL,演示 请求用户模式显示驱动程序对屏幕执行颜色填充作。
如果 D3DDDIARG_PRESENT 结构的 hDstResource 成员 NULL,则目标图面未知。 此外,在将硬件命令流通过 DMA 发送到图形处理器之前,目标图面和剪辑矩形列表在内核模式下确定。
因此,用户模式显示驱动程序无法生成执行当前作的硬件指令。 这些硬件指令必须由显示微型端口驱动程序生成。 但是,当D3DDDIARG_PRESENT的 hSrcResource 成员为非NULL时,用户模式显示驱动程序必须派生源图面的分配句柄,并将此句柄插入 D3DDDICB_PRESENT 结构的 hSrcAllocation 成员中,以调用 pfnPresentCb 函数。 然后,显示微型端口驱动程序可以成功生成硬件指令。 用户模式显示驱动程序通常从 D3DDDIARG_PRESENT 结构中的资源信息派生分配句柄。
如果D3DDDIARG_PRESENT的 hDstResource 成员为非NULL,则存在的目标图面是已知的,并且用户模式显示驱动程序必须使用相应的分配句柄填充 D3DDDICB_PRESENThDstAllocation 成员。
如果用户模式显示驱动程序公开的 DDI 版本小于0x0000000C(驱动程序在调用驱动程序的 OpenAdapter 时,DriverVersionD3D10DDIARG_OPENADAPTER 成员中返回此值 函数),Direct3D 运行时首先调用用户模式显示驱动程序的 Flush 函数,在运行时调用用户模式显示驱动程序的 Present 之前,在命令缓冲区中提交任何未完成的硬件命令功能。 这样,用户模式显示驱动程序的 Present 函数将序列化为呈现作(即调用 pfnRenderCb 函数)。 如果用户模式显示驱动程序公开0x0000000C或更高版本的 DDI 版本,并且调用应用程序在窗口模式下运行,则运行时还会在调用 “演示”之前调用 Flush。 如果用户模式显示驱动程序公开0x0000000C或更高版本的 DDI 版本,并且调用应用程序以全屏模式运行,则运行时在调用 演示之前不会调用 Flush。 此行为允许实现其自己的线程的驱动程序将当前调用排在队列中。 公开 0x0000000C 或更高版本的 DDI 版本的驱动程序必须调用 pfnRenderCb 才能在驱动程序调用 pfnPresentCb 函数之前在内部刷新任何未完成的命令缓冲区。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |