Blurry rendering of games on Mac
Проблема
На ноутбуках Mac с «чёлкой» большинство игр по умолчанию выбирают разрешение всего экрана (включая область под чёлкой), хотя рисовать можно только ниже неё. Из-за этого картинка сжимается и размывается. API CGDisplayCopyAllDisplayModes
выдаёт смешанный список: полные и фактически доступные 16:10-режимы, но без пометок. Разница в высоте всего 74 px, но её достаточно, чтобы всё выглядело мутно.
Решение
Игрокам: в настройках графики выбирайте 16:10-разрешение.
Разработчикам: фильтруйте список режимов, оставляя только те, что помещаются в safe-area. Пример:
extension NSScreen {
func safeAreaResolutions() -> [CGDisplayMode] {
let w = frame.width - safeAreaInsets.left - safeAreaInsets.right
let h = frame.height - safeAreaInsets.top - safeAreaInsets.bottom
return CGDisplayCopyAllDisplayModes(...)?
.filter { $0.width <= w && $0.height <= h } ?? []
}
}
Какие игры страдают
Практически все, если не задан 16:10 вручную: Shadow of the Tomb Raider, Resident Evil, No Man’s Sky и др.
Что может сделать Apple
- Разделить списки режимов или пометить их флагом.
- Добавить
CGDisplayModeGetUsableBounds
. - Сделать 16:10-режим выбором по умолчанию для полноэкранных игр.