DX11设置全屏状态后奇怪的桌面分辨率

Weird desktop resolution after DX11 setting fullscreen state

我有一个 DPI Aware 应用程序(通过清单文件),在 1 个监视器系统上,以下所有方法都是 return 错误的桌面分辨率:

我的显示器是 4k,但我将桌面大小设置为 1920x1080,比例为 100%。在窗口模式下,通过所有方法报告的分辨率都是正确的。然而,当切换到全屏时,它们都是 return 1600x1200。如果是 DPI Aware 问题,它至少应该保持纵横比,例如1600x900.

我注意到错误的结果是在调用 IDXGISwapChain::SetFullscreenState(true, output_device) 之后,根据 MSDN,交换链对象是使用标志 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH 创建的。

该应用正在使用 DirectX 11。

对我的原因有什么建议吗?

谢谢

所以我发现了问题 - 在进入全屏之前需要调整大小的 IDXGISwapChain::ResizeTarget(mode) 分辨率错误(由于以前的窗口模式具有自定义大小)。这导致 IDXGISwapChain::SetFullscreenState(true, output_device) 根据 DX 目标的大小切换到不同的奇怪桌面分辨率。在更改状态之前使用适当的桌面分辨率设置目标(通过 EnumDisplaySettingsExA/ENUM_CURRENT_SETTINGS)解决了它。