即使在Nvidia控制面板中已关闭,也将强制DirectX 11 VSync

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

我目前在调用DisplayModeList之前,遍历IDXGIOutput::GetDisplayModeList中的RefreshRate以找到最合适的DXGI_SWAP_CHAIN_DESC分配给D3D11CreateDeviceAndSwapChain()

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

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

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

一种解决方法是在增量时间很小时让应用程序进入睡眠状态,但不能保证睡眠时间是准确的,并且会导致fps抖动和屏幕撕裂。

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

iCMS 回答:即使在Nvidia控制面板中已关闭,也将强制DirectX 11 VSync

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1662698.html

大家都在问