金属着色器中的GLSL gl_FragDepth等效项

ndg

我正在寻找在Metal着色器中调整片段深度的方法。以前,我是通过GLSL的内置输出变量gl_FragDepth实现此目的的是否有在iOS上使用Apple的金属着色器的等效方法?

华伦

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

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

然后,在您的fragment函数中,创建此结构的一个实例,填充并返回它:

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

请注意any,您可以指定greaterless作为深度属性参数之一,而不是它指示您提供的片段深度将分别大于或小于插值片段深度。这些说明符的语义与OpenGL中相同名称的语义相匹配,并且出于优化目的,应尽可能使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章