2016-11-25 32 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/)表。您需要在所用格式的行中查找「過濾器」或「全部」,然後在功能集的列(按操作系統和版本分組)中查找。 –