金属材质:线性纹理过滤效果与预期不同

8

我正在iOS上使用Metal,以下是我的片段着色器:

constexpr sampler s(coord::normalized,
                    address::clamp_to_zero,
                    filter::linear);

fragment half4 passThroughFragment(VertexInOut inFrag [[stage_in]],
                                   texture2d<float> tex [[ texture(0) ]])
{
    return half4(tex.sample(s, inFrag.uv));
}

我的纹理是一张4x4的图片。尽管过滤器被设置为线性,但我得到了以下图像,使用的是最近邻过滤: 最近邻过滤的图像 看起来我的uv坐标没问题,因为当我修改片段着色器如下所示时:
return half4(0, inFrag.uv.x, inFrag.uv.y, 1);

我得到了预期的图像:

UV坐标绘图

除了指定filter::linear,还需要做些什么才能使线性过滤起作用吗?

1个回答

8

在我的设备上(iPad Pro),似乎不支持对MTLPixelFormatRGBA32Float类型的纹理进行线性过滤。当我改为MTLPixelFormatRGBA8Unorm时,过滤器按预期工作。


2
如果您还不知道,可以查看苹果公司的金属像素格式功能 表。您需要在所使用的格式行中查找“Filter”或“All”,并在按操作系统和版本分组的功能集列中进行查询。 - Ken Thomases

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接