在'metal :: texturecube'

时间:2017-06-18 10:59:07

标签: ios fragment-shader metal

根据Apple's Metal shading language specification,纹理立方体有一个读取方法,

read(uint2 coord, uint face, uint lod = 0) const

但是,当我尝试构建此着色器时,出现编译器错误,

fragment half4 passFragment(VertexInOut inFrag [[stage_in]],
                            texturecube<float, access::read> tex [[ texture(0) ]])
{
    float4 out = tex.read(uint2(0,0), uint(0));
    return half4(out);
}

错误是,

No member named 'read' in 'metal::texturecube<float, metal::access::read>'

如果我删除了访问限定符,那么我得到,

No member named 'read' in 'metal::texturecube<float, metal::access::sample>'

我也尝试将类型从float更改为int或short,但是我得到了同样的错误。令人沮丧的是,没有标题可以看......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

似乎texturecube::read()仅适用于macOS。

事实上,标题可用。查看/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/lib/clang/3.5/include/metal。

在metal_texture标题中,您将看到read()的声明位于预处理器条件(#if)内,并且仅在定义宏__HAVE_TEXTURE_CUBE_READ__时才会声明。在macOS上,这是在metal_config标头中定义的。在iOS上,它没有定义。