MacOS 上的 HiDPI / backingScaleFactor,如何获取实际值?

HiDPI / backingScaleFactor on MacOS, how to get actual value?

我正在尝试获取当前屏幕的显示缩放设置,以便我可以在我的 OpenGL and/or Vulkan window 中正确缩放以匹配 OS 的设置有。文档说使用

float dpi = [window backingScaleFactor];

然而,这将 return 1.0f 用于完全不缩放,2.0f 用于一些缩放。

float dpi = [[window screen] backingScaleFactor];

也一样。

NSRect resolution = [[window screen] frame];

会给你当前屏幕的虚拟分辨率。在系统偏好设置 -> 显示 -> 缩放中,这是 "Looks like" 值。对于我拥有的 3840x2160 屏幕,可能的值为 1920x1080、2560x1440、3008x1692、3360x1890、3830x2160,具体取决于您选择的缩放设置。在我的 MBP 内置屏幕上,其原始分辨率为 2880x1440,"Looks Like" 值可以是 1024x640、1280x800、1440x900、1680x1050、1920x1200。 the docs 说用

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

然而,这只是将提供的 NSRect 乘以 backingScaleFactor

This有人试图获得屏幕的真实分辨率。

因此,我想要给定 NSScreen 的真实 backingScaleFactor 或本机屏幕分辨率。有什么想法吗?

-backingScaleFactor 为您提供了真正的支持比例因子。后备存储的大小与物理像素尺寸不同。您的应用程序呈现到后备存储并显示到屏幕上,但这通常涉及另一个缩放操作。 OpenGL 或 Vulkan 应用程序正确的做法是渲染后备存储分辨率,而不是物理像素分辨率。