我正在尝试获取当前屏幕的显示缩放比例设置,以便可以在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,具体取决于您选择的“缩放比例”设置。在本机分辨率为2880x1440的MBP内置屏幕上,“ Looks Like”值可以为1024x640、1280x800、1440x900、1680x1050、1920x1200。 the docs说使用
NSRect test = {0, 0, 1000, 1000};
NSRect dpi = [NSView convertRectToBacking:test];
但是,这只是将提供的
NSRect
乘以backingScaleFactor
。This是试图获取屏幕真实分辨率的人。
因此,我需要给定
backingScaleFactor
的真实NSScreen
或本机屏幕分辨率。有任何想法吗? 最佳答案
-backingScaleFactor
给您真正的支持比例因子。后备存储区与物理像素尺寸的大小不同。您的应用程序呈现到后备存储,并显示在屏幕上,但是通常涉及另一项缩放操作。 OpenGL或Vulkan应用要做的正确的事情是渲染到后备存储分辨率,而不是物理像素分辨率。
关于macos - 在MacOS上使用HiDPI/backingScaleFactor,如何获取实际值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54429178/