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

问题描述 投票:0回答:1

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

  • GetSystemMetrics的
  • GetMonitorInfo
  • GetWindowRect(GetDesktopWindow()和桌面)
  • EnumDisplaySettingsExA / ENUM_CURRENT_SETTINGS
  • IDXGIOutput :: GetDesc

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

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

该应用程序正在使用DirectX 11。

有什么建议我的原因是什么?

谢谢

winapi fullscreen resolution directx-11 dpi-aware
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.