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