【问题标题】:Weird desktop resolution after DX11 setting fullscreen stateDX11设置全屏状态后桌面分辨率奇怪
【发布时间】:2019-03-08 12:25:50
【问题描述】:

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

  • GetSystemMetrics
  • GetMonitorInfo
  • GetWindowRect(GetDesktopWindow(), &desktop)
  • EnumDisplaySettingsExA/ENUM_CURRENT_SETTINGS
  • IDXGIOutput::GetDesc

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

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

该应用正在使用 DirectX 11。

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

谢谢

【问题讨论】:

  • 您是否 100% 确定您的全屏分辨率与桌面分辨率匹配?一般情况下不是这样的……
  • 可以假设这与 dpi 感知无关。有一个关于全屏问题的dedicated doc page 引用:“但是,许多应用程序会切换到首选的全屏分辨率。”
  • @rubenvb 是的,全屏分辨率有点偏离(由于从 Exclusive-Windowed-Exclusive 开始)导致无法正确调整应在 SetFullscreenState() 之前调用的 DX 目标的大小。

标签: winapi fullscreen resolution directx-11 dpi-aware


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多