GLSL gl_FragDepth等效于Metal着色器

时间:2018-06-06 15:51:11

标签: ios opengl-es metal

我希望在Metal Shader中调整片段深度。以前我通过GLSL的内置输出变量gl_FragDepth实现了这一目标。在iOS上使用Apple的Metal着色器是否有同等的方法?

1 个答案:

答案 0 :(得分:3)

是的,您在片段着色器返回的结构成员上使用depth属性指定此属性。例如,您可以创建一个类型:

struct FragmentOut {
    half4 color [[color(0)]];
    float depth [[depth(any)]];
};

然后,在你的fragment函数中,创建一个这个struct的实例,填充并返回它:

fragment FragmentOut my_frag_function(...) {
    FragmentOut out;
    out.color = // compute fragment color (for first color attachment)
    out.depth = // compute fragment depth
    return out;
}

请注意,您可以指定anygreater中的一个作为深度属性参数,而不是less,这表示您提供的片段深度将分别大于或者小于内插片段深度。这些说明符的语义与OpenGL中的相同名称匹配,您应该尽可能使用它们以进行优化。