繁体   English   中英

GLSL gl_FragDepth等效于Metal着色器

[英]GLSL gl_FragDepth equivalent in Metal shaders

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

是的,您可以在从片段着色器返回的结构成员上使用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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM