HiDPI / backingScaleFactor на MacOS, как получить реальное значение? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь получить настройку масштабирования экрана для текущего экрана, чтобы я мог правильно масштабировать внутри окна OpenGL и / или Vulkan в соответствии с настройкой, установленной в ОС.В документации сказано, что следует использовать

float dpi = [window backingScaleFactor];

Однако при этом будет возвращено значение 1.0f, если масштабирования не будет вообще, и 2.0f для некоторого масштабирования.

float dpi = [[window screen] backingScaleFactor];

делает то же самое.

NSRect resolution = [[window screen] frame];

даст вам виртуальное разрешение текущего экрана.В Системных настройках -> Показать -> Масштабировать это значение «Похоже».Для экрана размером 3840x2160 у меня есть возможные значения: 1920x1080, 2560x1440, 3008x1692, 3360x1890, 3830x2160, в зависимости от выбранной вами настройки Scaled.На встроенном экране моего MBP, который имеет собственное разрешение 2880x1440, значения «Похожи» могут быть 1024x640, 1280x800, 1440x900, 1680x1050, 1920x1200. Документы скажем, чтобы использовать

NSRect test = {0, 0, 1000, 1000};
NSRect dpi = [NSView convertRectToBacking:test];

Однако это просто умножает предоставленный NSRect на backingScaleFactor.

Это это кто-топытаясь получить реальное разрешение экрана.

Итак, я хочу либо реальное backingScaleFactor, либо собственное разрешение экрана для данного NSScreen.Есть идеи?

1 Ответ

0 голосов
/ 02 февраля 2019

-backingScaleFactor дает вам реальный масштабный коэффициент поддержки.Размер резервного хранилища не соответствует размеру физического пикселя.Ваше приложение отображается в резервном хранилище, и оно отображается на экране, но это часто связано с другой операцией масштабирования.Для приложений OpenGL или Vulkan правильнее всего выполнять рендеринг с разрешением резервного хранилища, а не с физическим разрешением в пикселях.

...