在 Retina 屏幕上使用 Metal 损坏调整大小的纹理

Corrupted resized textures with Metal on Retina screens

我想在METAL视图中绘制一系列纹理,以呈现一个完整的图像。在常规屏幕上,图像以精确 1:1 的比例呈现(意味着 100x100 像素的纹理将呈现在 100x100 像素的正方形中)

在视网膜显示器上绘制,实际上会给我一个 200x200 的正方形。

现在,可能有两种不同的方法:

1) 将整个图像生成 100x100 正方形,然后让 Metal View 将其放大到 200x200 正方形 - 有效。

2) 放大每个纹理并直接将图像生成为 200x200 正方形。为什么要采用这种方法?因为有些纹理(比如文字)是动态生成的,可以生成更好的分辨率。如果你采用第一种方法,那是不可能的。

不幸的是,在这种方法中,每个纹理周围都可以看到一些丑陋的正方形。 我试着调整尺寸、夹具选项等,但我找不到任何解决方案。 任何帮助将不胜感激!

图片来自普通屏幕

来自视网膜屏幕的图像

找到解决办法。在片段着色器中,纹理采样器定义为:

constexpr sampler s = sampler(coord::normalized, address::repeat, filter::nearest);

而不是:

constexpr sampler s = sampler(coord::normalized, address::clamp_to_edge, filter::nearest);