Я могу включить / выключить тестирование глубины в OpenGL с помощью glEnable( GL_DEPTH_TEST );
Но это включает / выключает тест для всего вызова отрисовки.
Я хотел бы управлять тестом для каждого фрагмента.
Это сделано для достижения следующего эффекта: в шаблоне шахматной доски половина пикселей примитива потенциально закрыта, но другая половина всегда отображается, даже если в буфере кадра есть закрывающий объект, который находится ближе к камера.
Чтобы проиллюстрировать это, посмотрите этот пример, где только половина пикселей пирамиды потенциально закрыта прямоугольником перед ней.
Обратите внимание, что красный прямоугольник рисуется первым и уже находится в буфере кадра, когда рисуется зеленая пирамида.
Также обратите внимание: я буду рисовать объект с помощью специального теста глубины в последнюю очередь, поэтому случай, когда сначала будет нарисован красный прямоугольник, не произойдет.
Для моих целей все объекты, нарисованные таким образом, являются выпуклыми и никогда не закрываются.
Я знаю, как получить узор шахматной доски в моем фрагментном шейдере:
float xm2 = mod( gl_FragCoord.x, 2.0 );
float ym2 = mod( gl_FragCoord.y, 2.0 );
if ( int(xm2) != int(ym2) )
discard;
Но в моем случае я не хочу отказываться от отбрасывания для каждого фрагмента, я просто хочу, чтобы тест глубины переключался для каждого фрагмента.
Я нацелен на OpenGL-ES 3.0.
gl_FragDepth
в 0 для тех фрагментов, которые вы хотите всегда проходить тест. - person derhass   schedule 16.10.2019gl_FragDepth
решит проблему OP, и его следует предлагать как ответ. - person Columbo   schedule 16.10.2019