Я не думаю, что сочетание значений в вашем вопросе имеет смысл. С помощью функции сравнения (по умолчанию) GL_LESS
глубины, вы должны использовать:
layout (depth_greater) out float gl_FragDepth;
по-прежнему позволяет раннее тестирование глубины. С помощью этой декларации вы гарантируете, что если вы измените значение глубины в шейдере, вы увеличите его размер.
С функцией сравнения GL_LESS
фрагменты, которые не пройдут проверку глубины, будут иметь значения глубины, превышающие текущее значение в буфере глубины. Это означает, что тест ранней глубины может быть использован без влияния на результат с depth_greater
:
- Если тест ранней глубины применяется, она исключает фрагменты с глубиной большей, чем текущее значение до фрагмента шейдер.
- Если тест ранней глубины не применяется, фрагмент будет обрабатываться фрагментарным шейдером. Поскольку гарантируется, что шейдер фрагмента будет только увеличивать значение, он будет по-прежнему больше, чем текущее значение глубины, и будет устранено с помощью теста глубины после шейдера фрагмента.
Совершенно правомерно использовать любой классификатор макета с любой функцией глубины. Но если вы используете:
layout (depth_less) out float gl_FragDepth;
с GL_LESS
, это на самом деле не помогает, и тестирование рано глубина не будет использоваться.
Есть ли у вас ссылка на то, что GL_LESS и depth_less приведет к раннему тестированию глубины? По крайней мере, в спецификации [ARB] (https://www.opengl.org/registry/specs/ARB/conservative_depth.txt) я не могу найти никакого намека на это. – BDL