Нет абсолютно никакой гарантии, что выполнение фрагментного шейдера означает, что фрагмент, безусловно, виден.
Ранний тест глубины сам по себе не спасет вас.Рендеринг каждого треугольника спереди назад не спасет вас;в OpenGL нет гарантии, что фрагменты генерируются по порядку (только «как будто» по порядку).И это игнорирует случаи наложения, когда невозможно правильно упорядочить.Даже выдача каждого треугольника в отдельной команде рендеринга гарантирует ничто в том, что касается OpenGL.
Единственное, что вы можете сделать, чтобы убедиться, что это выполнить предварительный проход глубины.То есть визуализируйте всю сцену, но без активного шейдера фрагмента (и отключите цветную запись в кадровый буфер).Это запишет все данные глубины в буфер глубины.Таким образом, если вы используете ранние тесты глубины, когда вы снова визуализируете свою сцену, единственные фрагменты, которые проходят тест глубины, будут видимыми.
Предварительные проходы глубины могут быть довольно быстрыми, в зависимости от вашеговершинный шейдер и другие аспекты вашего конвейера рендеринга.