Странное разрешение рабочего стола после установки DX11 в полноэкранном режиме - PullRequest
0 голосов
/ 08 марта 2019

У меня есть приложение DPI Aware (через файл манифеста), и на 1 системе монитора все следующие методы возвращают неправильное разрешение рабочего стола:

  • GetSystemMetrics
  • GetMonitorInfo
  • GetWindowRect (GetDesktopWindow (), & рабочий стол)
  • EnumDisplaySettingsExA / ENUM_CURRENT_SETTINGS
  • IDXGIOutput :: GetDesc

Мой монитор 4k, но я установил размер рабочего стола в 1920x1080 со 100% масштабом. В оконном режиме заявленное разрешение по всем методам является правильным. Однако при переключении в полноэкранный режим все они возвращают 1600x1200. Если это была проблема DPI Aware, она должна, по крайней мере, сохранять соотношение сторон, например 1600x900.

Я заметил, что неправильные результаты появляются после вызова IDXGISwapChain :: SetFullscreenState (true, output_device), где объект цепочки обмена создается с флагом DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH в соответствии с MSDN.

Приложение использует DirectX 11.

Любые предложения, что это за причина?

Спасибо

1 Ответ

1 голос
/ 08 марта 2019

Итак, я обнаружил проблему - IDXGISwapChain :: ResizeTarget (режим), размер которой нужно изменить, прежде чем переходить на полноэкранный режим с неправильным разрешением (из-за предыдущего оконного режима с нестандартным размером).Это заставило IDXGISwapChain :: SetFullscreenState (true, output_device) переключаться на разные странные разрешения рабочего стола в зависимости от размера целевых объектов DX.Установка целей с надлежащим разрешением рабочего стола (берется через EnumDisplaySettingsExA / ENUM_CURRENT_SETTINGS) перед изменением состояния, решившего это.

...