C++ 我应该从GetDisplayModeList使用哪个刷新率?

C++ 我应该从GetDisplayModeList使用哪个刷新率?,c++,directx,directx-11,C++,Directx,Directx 11,DirectX从此调用中“返回”多个“匹配”显示模式: dxgiAdapterOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_ENUM_MODES_INTERLACED, &numDisplayModes, displayModeList); 我打印出了所有与我的分辨率匹配的模式: 17.20:34+443模式51:大小=>1920x1080,刷新率=>50000/1000 17.20:34+443模式52:

DirectX从此调用中“返回”多个“匹配”显示模式:

dxgiAdapterOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_ENUM_MODES_INTERLACED, &numDisplayModes, displayModeList);
我打印出了所有与我的分辨率匹配的模式:

17.20:34+443模式51:大小=>1920x1080,刷新率=>50000/1000

17.20:34+443模式52:大小=>1920x1080,刷新率=>50000/1000

17.20:34+443模式53:大小=>1920x1080,刷新率=>59940/1000

17.20:34+443模式54:大小=>1920x1080,刷新率=>59940/1000

17.20:34+443模式55:大小=>1920x1080,刷新率=>60000/1001

17.20:34+443模式56:大小=>1920x1080,刷新率=>60000/1001


那么哪一个分子/分母对是传递到交换链的“正确”对呢?

如果您正在创建一个窗口交换链,刷新率将被忽略,并且操作系统将继续使用当前系统刷新率。如果您正在创建一个全屏交换链,那么您可以选择API返回的任何有效模式—无论您喜欢什么。但是请注意,如果您选择的模式与当前系统显示模式不同,您将触发“模式更改”,从而导致显示屏出现可见闪烁


API返回多个相同模式的原因可能是由于显示驱动程序的错误。

60000/1001=59.94005994,因此推测这两个第二对实际上是相同的刷新竞赛,只是表达方式不同而已?啊,是的,似乎是这样。我没发现!但这并不能解释第一对。或者为什么它们是成对的。第一对显然是50Hz的选择(在欧洲是电视之类的)。59.94是NTSC使用的电视频率。嘿,谢谢。有什么方法可以确定当前的显示模式吗?@Motig您可以使用DwmGetCompositionTimingInfo获得正确的计时,并且您应该能够使用0作为宽度和高度以使用当前的显示分辨率。不过,您可能最好使用带窗口的全屏(样式使用WS_POPUP,大小使用CW_USEDEFAULT)。这保证不会闪烁,并且alt+tab和通知将继续工作。@MooseBoys有没有办法在窗口交换链上使用不同于当前系统刷新率的刷新率?可能使用DwmSetPresentParameters?还是使用另一个技巧?