这似乎是一个非常基本的问题,但是在阅读了大量类似的问题和文档后,我仍然找不到答案。我在Windows 10上有一个桌面应用程序,它使用DirectX 11生成内容。该应用程序以60 FPS的速度运行,我的目标是在下一帧查看我对输出缓冲区所做的更改-预期更改和外观之间的时间最长为16.6ms。实际上,我只能通过撕裂框架来实现这种延迟。否则,延迟将超过16.6毫秒(平均约25毫秒)。
我尝试过的事情:
CreateSwapChainForHwnd
(单个缓冲区)和DXGI_SWAP_EFFECT_DISCARD
(2个缓冲区)创建交换链DXGI_SWAP_EFFECT_FLIP_DISCARD
Present1
的{{1}}为0或1的缓冲区SyncInterval
或带有Present1
的DXGI_PRESENT_RESTART
之前等待,或者等待Present1
,或者将交换链创建为IDXGIOutput::WaitForVBlank
并等待可等待对象DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT
和IDXGIDevice1::SetMaximumFrameLatency(1)
如果有帮助,我可以分享更详细的测试结果。