DirectX 11以最小的延迟显示更改

时间:2019-01-13 15:29:54

标签: delay fullscreen directx-11 tearing

这似乎是一个非常基本的问题,但是在阅读了大量类似的问题和文档后,我仍然找不到答案。我在Windows 10上有一个桌面应用程序,它使用DirectX 11生成内容。该应用程序以60 FPS的速度运行,我的目标是在下一帧查看我对输出缓冲区所做的更改-预期更改和外观之间的时间最长为16.6ms。实际上,我只能通过撕裂框架来实现这种延迟。否则,延迟将超过16.6毫秒(平均约25毫秒)。

我尝试过的事情:

  1. 使用CreateSwapChainForHwnd(单个缓冲区)和DXGI_SWAP_EFFECT_DISCARD(2个缓冲区)创建交换链DXGI_SWAP_EFFECT_FLIP_DISCARD
  2. 将交换链创建为全屏或窗口化
  3. 使用Present1的{​​{1}}为0或1的缓冲区
  4. 使用带有默认标志的SyncInterval或带有Present1
  5. 不要在DXGI_PRESENT_RESTART之前等待,或者等待Present1,或者将交换链创建为IDXGIOutput::WaitForVBlank并等待可等待对象
  6. 设置DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECTIDXGIDevice1::SetMaximumFrameLatency(1)

如果有帮助,我可以分享更详细的测试结果。

0 个答案:

没有答案