即使在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控制面板中的设置?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)