2016-11-25 25 views
3

我使用的是金属在iOS与下面的片段着色器:金属:线性纹理过滤工作不正常

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的图像。尽管过滤设置为线性,我获得下面的图片,与近邻过滤:

Image with nearest neighbor filtering

看来,我的紫外线的都很好,因为当我修改片段着色器如下:

return half4(0, inFrag.uv.x, inFrag.uv.y, 1); 

我得到预期的图像:

Plot of UV coordinates

除了指定filter::linear之外,是否还有其他工作需要线性过滤工作?

回答

3

似乎不支持我的设备(ipad公司Pro)的上MTLPixelFormatRGBA32Float类型的纹理线性滤波。当我更改为MTLPixelFormatRGBA8Unorm时,过滤按预期工作。

+0

如果您还没有意识到,可以查看Apple的[金属像素格式功能](https://developer.apple.com/metal/capabilities/)表。您需要在所用格式的行中查找“过滤器”或“全部”,然后在功能集的列(按操作系统和版本分组)中查找。 –