Контекст:
Я использую установку отложенного рендеринга, где на первом этапе у меня есть два FBO: один - это GBuffer, для хранения нормалей, альбедо и информации о материалах для всех видимых фрагментов. Этот FBO имеет текстуру глубины 32 бита. Это втягивается в проход геометрии до того, как будет рассчитано какое-либо освещение.
Второй FBO предназначен только для цвета и начинается с черного, но накапливает освещение за несколько проходов от шейдеров освещения, которые выбирают из GBuffer и записывают в буфер только для цвета с использованием аддитивного смешивания.
Проблема в том, что я бы очень хотел использовать раннее тестирование глубины, чтобы мое освещение рассчитывалось ТОЛЬКО для фрагментов, содержащих фактическую геометрию (а не только небо). Наилучший способ, который я могу придумать для этого, - это использовать проверку глубины, чтобы вывести из строя любые пиксели, имеющие глубину, равную единице, в случае солнечного света, или вывести из строя любые пиксели, которые лежат за сферой влияния для точечных источников света. Однако я не думаю, что могу привязать эту текстуру глубины к моему цветному FBO, поскольку я также сэмплирую из нее внутри шейдера освещения для вычисления положения фрагментов в мировом пространстве.
Итак, мой вопрос: есть ли способ использовать одну и ту же текстуру глубины как для раннего теста глубины, так и для выборки внутри шейдера? Или, если нет, есть ли другой (достаточно эффективный) способ отклонения пикселей, в которых нет геометрии? Я вообще не буду писать текстуру глубины в моем проходе освещения.
Мне нужно ориентироваться только на современное графическое оборудование на ПК (поэтому я могу использовать любые распространенные расширения или функции openGL 4.6).