macos - 如何将位图纹理的每个像素渲染到 macOS 上屏幕的每个 native 物理像素?

标签 macos cocoa metal metalkit hidpi

由于现代 macOS 设备默认选择使用缩放后的 HiDPI 分辨率,位图图像在屏幕上变得模糊。有没有办法将位图逐像素渲染到显示屏的真实 native 物理像素?任何 CoreGraphics、OpenGL 或 Metal API 都可以在不改变屏幕显示模式的情况下实现这一点?

如果您正在考虑那些 convertXXXXToBacking 和 friend ,请停下来。这是给你的解释。 MacBook Pro 中的典型 13 现在具有 2560x1600 像素分辨率。全新安装 macOS 后,默认建议的屏幕分辨率为 1440x900。用户可以通过系统偏好设置将其更改为 1680x1050。在 1440x900 或 1680x1050 的情况下,backingScaleFactor 恰好为 2。典型的渲染路线将首先将任何内容渲染为非物理 2880x1800 或 3360x2100 分辨率,并且操作系统/GPU 使用未知方法进行最终的重采样。

最佳答案

你最好的选择可能是 Metal 。 MTKViewdrawableSize 声称默认值是 View 的“以 native 像素为单位”的大小。我不确定这是否意味着设备像素或后备存储像素。如果是后者,您可以关闭 autoResizeDrawable 并直接设置 drawableSize

要获取显示器的物理像素数,您可以使用我的答案here .

您还可以尝试使用 Core Graphics,并将该尺寸的 CGImage 绘制到后备存储像素中屏幕尺寸的矩形上。所有缩放可能会在内部被取消。

关于macos - 如何将位图纹理的每个像素渲染到 macOS 上屏幕的每个 native 物理像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551692/

相关文章:

iphone - 如果 "cents"部分没有显示,如何计算货币值(value)?

objective-c - NSDateFormatter 有自己的想法

c++ - 如何将 opencv_contrib 添加到 CMake 项目?

swift - 使用 Swift 在 macOS 上围绕光标绘制形状

cocoa - 更改到另一个窗口后自定义 NSCursor 丢失

iOS 9、iPhone 6S plus、 Metal 、无法链接到功能 frexp

ios - 如何在Xcode中调试ios的metal内核?

macos - 使用 Vagrant 获取 shell 脚本问题和失败

ios - 使用 Swift 为 OS X 和 iOS 跨平台构建目标?

iOS Metal : Unable to create compute pipeline state with function