IDXGISwapChain::P resent 方法 (dxgi.h)

向用户呈现呈现的图像。

语法

HRESULT Present(
  UINT SyncInterval,
  UINT Flags
);

参数

SyncInterval

类型: UINT

一个整数,指定如何将框架的呈现与垂直空白同步。

对于位块传输 (bitblt) 模型 (DXGI_SWAP_EFFECT_DISCARDDXGI_SWAP_EFFECT_SEQUENTIAL) ,值为:

  • 0 - 演示文稿立即发生,没有同步。
  • 1 到 4 - 同步 n个垂直空白之后的演示文稿。
对于翻转模型 (DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) ,值为:
  • 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。

注意如果视频卡已实际从计算机中删除,或者视频卡的驱动程序升级,则 Present 方法可以返回DXGI_ERROR_DEVICE_REMOVED或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_SEQUENTIALDXGI_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_TEARINGDXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING的说明,并显示可变刷新率

要求

要求
目标平台 Windows
标头 dxgi.h
Library DXGI.lib

另请参阅

IDXGISwapChain