Як я можу налагоджувати те, що відображається об'єкту буфера кадрів у OpenGL?


17

У мене є хмара точок, яка виводиться на екран. Кожна точка має своє положення та колір, а також ідентифікатор.

Мене попросили надати ідентифікатори для кожної точки текстурою, тому я створив FBO і додав дві текстури, одну для кольору та одну для глибини. Я створив необхідні VAO та VBO для цього позаекранного візуалізації та завантажив для кожної точки своє положення та ідентифікатор.

Після того, як рендерінг завершено, я читаю пікселі кольорової текстури, glReadPixels()щоб побачити, які значення є, але вони, здається, все очищені, тобто значення, яке вони мають, те саме, що і значення glClearColor().

Чи є спосіб я встановити налагодження того, що це робиться для кольорової текстури мого ФБО? Будь-які поради, які ви можете надати, дуже вітаються.

Відповіді:


21

Як правило, щоб побачити, що відображається на різних етапах вашого трубопроводу, я б запропонував використовувати інструмент для аналізу кадру. Зазвичай вони надають вам уявлення про вміст кожного буфера для кожного дзвінка API, і це може допомогти вам у вашій ситуації.

Дуже хорошим є Renderdoc, який є повністю безкоштовним та відкритим. Також він активно підтримується.

Інший - Intel GPA, який, на жаль, за його веб-сторінкою підтримує до OGL 3.3 Core.

Просто заради додавання ще одного, я використовував gDEBugger , але це минуло давно з останнього оновлення. Це перетворилося на AMD CodeXL, який, на жаль, я ніколи не використовував.


Крім того, у мене іноді є команда, яка скидає вказаний fbo на зображення, коли я натискаю клавішу. Це низькотехнологічний шлях.
Хорхе Родрігес

Можливо, це також гарна ідея переконатися, що у вас є правильна установка тесту на глибину, щоб візуалізація перейшла у ваш візуалізаційний FBO.
rys

Я все ще час від часу використовую gDEbugger для старих версій GL. CodeXL - це більш сучасна версія її, і її можна знайти тут: github.com/GPUOpen-Tools/CodeXL. Зверніть увагу, що тут є вичерпний перелік інструментів для налагодження графіки на сторінці apitrace: apitrace.github.io/#links
Bim

11

Я протестував кілька додатків / API / бібліотек, щоб отримати дані від FBO в додатках, які використовують gbuffer, наприклад. Після кількох місяців страждань я виявив, що apitrace доступний на Github для налагодження OpenGL, Direct3D та WebGL. Я без проблем користувався в Windows та Linux.

Я сподіваюся, що може бути корисним для вас.


7

На додаток до відповіді cifz, ще одним способом візуалізації FBO, який не коштує дуже великого коду, є використання glBlitFramebuffer () для перенесення пікселів з фреймбуфера у вікно.

// XXX WARNING: Untested code follows

// Blit from fbo...
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
// ...to the front buffer.
glBindFramebuffer(GL_WRITE_FRAMEBUFFER, GL_FRONT);

GLsizei HalfWindowWidth = (GLsizei)(WindowWidth / 2.0f);
GLsizei HalfWindowHeight = (GLsizei)(WindowHeight / 2.0f);

// Blit attachment 0 to the lower-left quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  0, 0, HalfWindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// Blit attachment 1 to the lower-right quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT1);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  HalfWindowWidth, 0, WindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// ...and so on. You can switch FBOs if you have more than one to read from.

Існує кілька очевидних "пошкоджень", в тому, що буфери HDR, мабуть, не візуалізують так, як ви їх очікуєте, ви, ймовірно, не можете "бачити" буфери глибини / трафарету очевидним чином, і якщо розмір FBO не відповідає не відповідає області, яку затьмарюють, метод збільшення / мінімізації може бути надзвичайно наївним.

Але в міру швидких прудних хакків це дуже добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.