Подтвердить что ты не робот

Каковы различия между объектом буфера кадра и объектом Pixel Buffer в OpenGL?

В чем разница между FBO и PBO? Какой из них следует использовать для рендеринга вне экрана?

4b9b3361

Ответ 1

A FBO (объект Framebuffer) является целью, где вы можете отображать изображения, отличные от буфера или экрана фрейма по умолчанию.

A PBO (объект пиксельного буфера) позволяет асинхронно передавать данные пикселей на устройство и с него. Это может быть полезно для улучшения общей производительности при рендеринге, если у вас есть другие вещи, которые могут быть выполнены во время ожидания передачи пикселей.

Ответ 2

В чем разница между FBO и PBO?

Лучший вопрос в том, как они похожи. Единственное, что похоже на них, это их имена.

A Объект Framebuffer (обратите внимание на заглавную: framebuffer - это одно слово, а не два) - это объект, который содержит несколько изображений, которые могут использоваться как рендеринг целей.

A Объект пиксельного буфера:

Если вы хотите визуализировать текстуру или просто неэкранный фреймбуфер, то вы используете FBOs. Если вы пытаетесь асинхронно считывать данные пикселей в приложение или пытаетесь перенести данные пикселей в изображения OpenGL асинхронно, вы используете PBO.

Они ничем не похожи.

Ответ 3

Я читал VBOs, PBO и FBOs:

Apple опубликовала два очень приятных бита образец кода, демонстрирующий ОПО и О. Хотя это Mac-specific, в качестве образца кода они хорошо на любом платоформе, потому что PBO и FBO - это расширения OpenGL, а не расширения оконной системы.

Итак, каковы все эти объекты? Вот ситуация:

Ответ 4

Я хочу выделить что-то.

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

struct FBO{
AttachColor0 *ptr0;
AttachColor1 *ptr1;
AttachColor2 *ptr2;
AttachDepth  *ptr3;
};

С другой стороны, PBO является блоком памяти, чтобы сохранить тип памяти. "Попытайтесь считать это как malloc размера x, тогда вы можете использовать memcpy для копирования данных из него в текстура /FBO или к ней".

  • Почему использовать PBO?

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