簡體   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