Я не думаю, что есть наивный способ сделать это.
Но вот идея.
Сначала предварительно выделите несколько буферов глубины, например, 16. Это будет максимумколичество различных глубин, которые вы можете сохранить.
Очистить все буферы глубины до бесконечности (максимальной глубины).
Нормально перетянуть в первый буфер глубины (GL_LESS
).
Для следующих буферов мы будем рисовать иначе.Мы возьмем предыдущий буфер глубины в качестве входных данных для нашего фрагментного шейдера.В шейдерном фрагменте мы проводим какой-то ручной тест глубины.
if(currentDepth <= previousDepth) {
discard;
}
Мы здесь делаем «рассмотрим фрагмент, только если он дальше, чем предыдущий».Аппаратный тест глубины делает свое дело одновременно.
Таким образом, результатом каждой итерации является ближайший фрагмент, который находится дальше, чем предыдущий.И мы получаем «массив срезов глубины».