GLSL gl_FragDepth 在金属着色器中等效
GLSL gl_FragDepth equivalent in Metal shaders
我想在金属着色器中调整片段深度。以前我是通过 GLSL 的内置输出变量 gl_FragDepth 来实现的。在 iOS 上是否有使用 Apple 的 Metal 着色器的等效方法?
是的,您可以使用片段着色器 return 结构成员的 depth
属性来指定它。例如,您将创建如下类型:
struct FragmentOut {
half4 color [[color(0)]];
float depth [[depth(any)]];
};
然后,在您的片段函数中,创建此结构的一个实例,填充并 return 它:
fragment FragmentOut my_frag_function(...) {
FragmentOut out;
out.color = // compute fragment color (for first color attachment)
out.depth = // compute fragment depth
return out;
}
请注意,您可以指定 greater
或 less
之一作为深度属性参数,而不是 any
,这表示您提供的片段深度将分别为,大于或小于内插片段深度。这些说明符的语义与 OpenGL 中同名的说明符的语义相匹配,您应该尽可能使用它们来进行优化。
我想在金属着色器中调整片段深度。以前我是通过 GLSL 的内置输出变量 gl_FragDepth 来实现的。在 iOS 上是否有使用 Apple 的 Metal 着色器的等效方法?
是的,您可以使用片段着色器 return 结构成员的 depth
属性来指定它。例如,您将创建如下类型:
struct FragmentOut {
half4 color [[color(0)]];
float depth [[depth(any)]];
};
然后,在您的片段函数中,创建此结构的一个实例,填充并 return 它:
fragment FragmentOut my_frag_function(...) {
FragmentOut out;
out.color = // compute fragment color (for first color attachment)
out.depth = // compute fragment depth
return out;
}
请注意,您可以指定 greater
或 less
之一作为深度属性参数,而不是 any
,这表示您提供的片段深度将分别为,大于或小于内插片段深度。这些说明符的语义与 OpenGL 中同名的说明符的语义相匹配,您应该尽可能使用它们来进行优化。