1

我正在尝试获取当前屏幕的显示缩放设置,以便我可以在我的 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。有任何想法吗?

4

1 回答 1

1

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

于 2019-02-01T21:08:49.930 回答