Я пытаюсь получить настройку масштабирования экрана для текущего экрана, чтобы я мог правильно масштабировать внутри окна 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
.Есть идеи?