我希望在Metal Shader中调整片段深度。以前我通过GLSL的内置输出变量gl_FragDepth实现了这一目标。在iOS上使用Apple的Metal着色器是否有同等的方法?
答案 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;
}
请注意,您可以指定any
或greater
中的一个作为深度属性参数,而不是less
,这表示您提供的片段深度将分别大于或者小于内插片段深度。这些说明符的语义与OpenGL中的相同名称匹配,您应该尽可能使用它们以进行优化。