首页 > 解决方案 > 强制 DirectX 11 VSync,即使在 Nvidia 控制面板中关闭

问题描述

我的 DirectX 11 应用程序的一些用户抱怨帧速率在 1000-2000 fps 之间,我完全理解。遇到这个问题的人非常少。我能够复制它的唯一方法是在 Nvidia 控制面板中禁用“垂直同步”,我怀疑用户可能篡改了这些设置,也许是为了更早解决其他应用程序的问题(或者 Nvidia 应用程序决定这是最适合应用?)。

我目前遍历DisplayModeListfromIDXGIOutput::GetDisplayModeList以找到最适合RefreshRate分配给DXGI_SWAP_CHAIN_DESCbefore call D3D11CreateDeviceAndSwapChain()

swapChainDesc.BufferDesc.RefreshRate.Numerator = numerator;
swapChainDesc.BufferDesc.RefreshRate.Denominator = denominator;

虽然,即使我将分子和分母分别设置为 0 和 1,驱动程序仍将使用 VSync 并以适当的帧速率(监视器帧速率)运行应用程序。这是使用 Nvidia 控制面板中的默认设置。

似乎没有视频显示模式或交换链创建设置可以忽略在 Nvidia 控制面板中禁用 VSync 的事实。使用 GLFW 的 OpenGL 中的相同问题。

一种解决方法是在 delta 时间非常小时让应用程序休眠,但不能保证休眠准确,并且会导致 fps 抖动和屏幕撕裂。

我有什么方法可以覆盖 Nvidia 控制面板中的设置吗?

标签: nvidiadirectx-11direct3ddirect3d11vsync

解决方案


推荐阅读