Как получить доступ к текстуре глубины из других буферов кадра?

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

Теперь я хочу получить доступ к буферу глубины из других проходов рендеринга, то есть из других кадровых буферов, без изменения текстуры глубины. Я просто хочу прочитать значения глубины. Для этих проходов я в основном рисую полноэкранные квадраты, и я не хочу, чтобы они обновляли текстуру глубины и гасили ее до значений глубины 0.

Как прикрепить текстуру заданной глубины к другому фреймбуферу и убедиться, что он предназначен только для записи?


person danijar    schedule 14.06.2013    source источник
comment
Прикрепите текстуру глубины ко второму FBO. ПРИМЕЧАНИЕ. У меня были проблемы с некоторыми драйверами ATI в Linux. Резервный вариант - сделать блит, но, надеюсь, в этом нет необходимости.   -  person Grimmy    schedule 14.06.2013
comment
Я так понимаю, вы имеете в виду только для чтения?   -  person Entalpi    schedule 05.03.2018


Ответы (1)


Вы можете просто прикрепить тот же буфер глубины к другим буферам кадра (вам нужно сделать это только в том случае, если вы хотите использовать тестирование глубины при рисовании ваших световых объемов). Отключите запись глубины для этих проходов (glDepthMask(GL_FALSE)). Вы также можете привязать буфер глубины (при условии, что это текстура, а не буфер рендеринга) с блоком текстуры и считывать значения глубины из него в вашем шейдере. Единственное, что вы не можете сделать, - это читать и писать с одной и той же текстуры одновременно, но вы все равно не хотите этого делать.

person GuyRT    schedule 14.06.2013
comment
Так я могу привязать текстуру типа GL_DEPTH_COMPONENT24 к текстурному блоку? Если так, то это будет решение. - person danijar; 14.06.2013