"waitable object" 的 DirectX 11 优化

DirectX 11 optimization with "waitable object"

Optimizing DirectX apps for low latency input... 所述,使用 DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT 可以提高应用程序的响应速度。我对此有几个问题:

  1. 为什么我不能在执行下一个游戏循环之前等待对 "Present1" 的上一次调用结束来达到相同的效果?
  2. 根据MSDN article,我可以通过使用 CreateSwapChainForCoreWindow 创建交换链来获取可等待对象。有没有办法从常规 Win32 应用程序(不是 Windows 商店应用程序)获取 CoreWindow

谢谢

Present(或 Present1)的调用是非阻塞的并且 returns 非常快。它只是向 API 表明您已完成帧并准备好显示帧缓冲区。为了防止 CPU 超过 GPU 太远,Windows 默认情况下会在 3 帧排队时阻塞在 Present 上。这通常会以某种稳定的速率在应用程序中平滑,但这种额外的延迟对于基于触摸的 UI 应用程序来说可能是一个真正的问题。

CoreWindow APIs 仅可用于基于 WinRT 的平台,例如 UWP for Windows 10、Windows Store、Windows phone 8 和Xbox 一个。它们不适用于 Windows 桌面应用程序。

您可以在 Windows 桌面应用程序中使用 DXGI_PRESENT_DO_NOT_WAIT 标志,如果 Present returns 失败代码 DXGI_PRESENT_DO_NOT_WAIT 您的应用程序知道它有许多帧在排队。你可以做其他工作来等待一下,限制你的内容,或者用这个做其他聪明的事情,但大多数游戏只是 运行 'flat out' 如果渲染太快让游戏阻塞。