GLSL gl_FragDepth эквивалент в металлических шейдерах - PullRequest
0 голосов
/ 06 июня 2018

Я хочу настроить глубину фрагментов в металлическом шейдере.Ранее я достигал этого с помощью встроенной выходной переменной GLSL gl_FragDepth .Есть ли аналогичный подход с использованием металлических шейдеров Apple на iOS?

1 Ответ

0 голосов
/ 06 июня 2018

Да, вы указываете это с атрибутом depth члена структуры, которую вы возвращаете из своего фрагментного шейдера.Например, вы бы создали тип, такой как:

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

Затем в функции фрагмента создайте экземпляр этой структуры, заполните и верните его:

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, и вы должны использовать их, когда это возможно, в целях оптимизации.

...