Нормальный задний буфер + рендеринг в глубину текстуры в OpenGL (FBOs)

Вот ситуация: у меня есть текстура, содержащая некоторые значения глубины. Я хочу визуализировать некоторую геометрию, используя эту текстуру в качестве буфера глубины, но я хочу, чтобы цвет был записан в обычный кадровый буфер (т. Е. Кадровый буфер окна).

Как мне это сделать? Я попытался создать FBO и привязать к нему только текстуру глубины (GL_DEPTH_COMPONENT), но это не сработало; ни один из цветов не появился.

1 ответ

Решение

Нет, ты не можешь. FBO, к которому вы выполняете рендеринг, может быть как основным, так и закадровым. Вы не можете смешивать их в любом случае.

Вместо этого я бы предложил вам выполнить рендеринг в цветной рендер-буфер, а затем выполнить простую операцию перетаскивания в основной фрейм-буфер.

Edit-1.

В качестве альтернативы, если у вас уже есть глубина в главном FB, вы можете сначала скопировать свою глубину, а затем выполнить рендеринг в основной FB, тем самым экономя видеопамять на дополнительном цветовом буфере рендеринга.

PS Blitting делается через glBlitFramebuffer, Для того, чтобы заставить его работать, вы должны настроить GL_READ_FRAMEBUFFER, GL_DRAW_FRAMEBUFFER и glDrawBuffer() для каждого из них.

Другие вопросы по тегам