IDXGISwapChain::P resent 方法 (dxgi.h)
向用户呈现呈现的图像。
语法
HRESULT Present(
UINT SyncInterval,
UINT Flags
);
参数
SyncInterval
类型: UINT
一个整数,指定如何将框架的呈现与垂直空白同步。
对于位块传输 (bitblt) 模型 (DXGI_SWAP_EFFECT_DISCARD 或 DXGI_SWAP_EFFECT_SEQUENTIAL) ,值为:
- 0 - 演示文稿立即发生,没有同步。
- 1 到 4 - 同步 n个垂直空白之后的演示文稿。
- 0 - 取消之前显示的帧上的剩余时间,如果较新的帧排队,则放弃此帧。
- 1 到 4 - 同步至少 n 个 垂直空白的演示文稿。
如果更新区域跨多个输出 (每个输出由 IDXGIOutput) 表示, 则 Present 将执行与包含目标窗口工作区最大子矩形的输出的同步。
Flags
类型: UINT
包含交换链表示选项的整数值。 这些选项由 DXGI_PRESENT 常量定义。
返回值
类型: HRESULT
可能的返回值包括:S_OK、DXGI_ERROR_DEVICE_RESET或DXGI_ERROR_DEVICE_REMOVED (请参阅 DXGI_ERROR) 、DXGI_STATUS_OCCLUDED (请参阅 DXGI_STATUS) 或D3DDDIERR_DEVICEREMOVED。
注解
从 Direct3D 11.1 开始,请考虑使用 IDXGISwapChain1::P resent1,因为随后可以在交换链演示文稿中使用脏矩形和滚动矩形,因此使用更少的内存带宽和更少的系统电源。 有关在交换链演示文稿中使用脏矩形和滚动矩形的详细信息,请参阅在交换链演示文稿中使用脏矩形和滚动矩形。
若要在全屏应用程序中翻转交换链缓冲区时获得最佳性能,请参阅 全屏应用程序性能提示。
由于调用 Present 可能会导致呈现线程等待消息泵线程,因此在使用多个线程的应用程序中调用此方法时要小心。 有关更多详细信息,请参阅 多线程注意事项。
Direct3D 9 和 Direct3D 10 之间的差异: 在 Flags 参数中指定DXGI_PRESENT_TEST类似于 Direct3D 9 中的 IDirect3DDevice9::TestCooperativeLevel。 |
对于使用DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL或DXGI_SWAP_EFFECT_DISCARD值设置创建的翻转演示文稿模型交换链,成功的演示文稿取消绑定缓冲区 0 (通常由 OMSetRenderTargets) 从图形管道设置,除非在 Flags 参数中传递DXGI_PRESENT_DO_NOT_SEQUENCE标志。
有关向屏幕呈现内容时数据值如何变化的信息,请参阅 转换颜色空间的数据。
翻转演示文稿模型队列
假设以下具有同步间隔值的帧在调用 Present 之前从最早 (A) 排队到最新 (E) 。A:3、B:0、C:0、D:1、E:0
调用 Present 时,运行时仅显示 1 个垂直空白间隔的帧 A。 运行时会提前终止帧 A,因为帧 B 中的同步间隔为 0。然后,运行时显示 1 个垂直空白间隔的帧 D,然后显示 E 帧,直到提交新演示文稿。 运行时放弃帧 B 和 C。
可变刷新率显示
启用撕裂是可变刷新率显示器的要求。 CheckFeatureSupport 方法可用于确定此功能是否可用,若要设置所需的标志,请参阅DXGI_PRESENT_ALLOW_TEARING和DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING的说明,并显示可变刷新率。要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | dxgi.h |
Library | DXGI.lib |