В чем разница между FBO и PBO? Какой из них следует использовать для рендеринга вне экрана?
Каковы различия между объектом буфера кадра и объектом Pixel Buffer в OpenGL?
Ответ 1
A FBO (объект Framebuffer) является целью, где вы можете отображать изображения, отличные от буфера или экрана фрейма по умолчанию.
A PBO (объект пиксельного буфера) позволяет асинхронно передавать данные пикселей на устройство и с него. Это может быть полезно для улучшения общей производительности при рендеринге, если у вас есть другие вещи, которые могут быть выполнены во время ожидания передачи пикселей.
Ответ 2
В чем разница между FBO и PBO?
Лучший вопрос в том, как они похожи. Единственное, что похоже на них, это их имена.
A Объект Framebuffer (обратите внимание на заглавную: framebuffer - это одно слово, а не два) - это объект, который содержит несколько изображений, которые могут использоваться как рендеринг целей.
- A Буферный объект. ФБО не являются буферными объектами. Снова: framebuffer - это одно слово.
- Объект буфера, который используется для асинхронного загрузки/загрузки пиксельных данных на/с изображений.
Если вы хотите визуализировать текстуру или просто неэкранный фреймбуфер, то вы используете 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, загрузив текстуру на хост или с хоста.