У меня есть облако точек, которое отображается на экране. Каждая точка имеет свою позицию и цвет, а также идентификатор.
Меня попросили отобразить идентификаторы для каждой точки в текстуре, поэтому я создал FBO и прикрепил две текстуры, одну для цвета и одну для глубины. Я создал необходимые VAO и VBO для этого закадрового рендеринга и загрузил для каждой точки ее позицию и ID.
Как только рендеринг в FBO закончен, я читаю пиксели цветовой текстуры, glReadPixels()
чтобы увидеть, каковы значения, но они, кажется, все очищены, т. Е. Значение, которое они имеют, совпадает с glClearColor()
.
Есть ли способ, которым я могу отладить то, что отображается на цветовой текстуре моего FBO? Любые советы, которые вы можете дать, очень приветствуются.
Я протестировал несколько приложений / API / библиотек для получения данных от FBO в приложениях, которые, например, используют gbuffer. После нескольких месяцев страданий я обнаружил apitrace, доступный на Github для отладки OpenGL, Direct3D и WebGL. Я использовал в Windows и Linux без проблем.
Я надеюсь, что это может быть полезно для вас.
источник
В дополнение к ответу cifz, другой способ визуализации FBO, который не требует больших затрат кода, заключается в использовании glBlitFramebuffer () для переноса пикселей из кадрового буфера в окно.
Есть несколько очевидных «уловок», в которых буферы HDR, вероятно, не будут визуализировать так, как вы ожидаете, вы, вероятно, не сможете «увидеть» буферы глубины / трафарета очевидным образом, и если размер FBO не не совпадает с областью, к которой прикрыты, метод увеличения / минимизации может быть чрезвычайно наивным.
Но как быстро и грязные хаки, это довольно хорошо.
источник