Каковы различия между объектом кадрового буфера и объектом пиксельного буфера в OpenGL? - PullRequest
44 голосов
/ 14 апреля 2009

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

Ответы [ 4 ]

75 голосов
/ 09 июня 2012

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

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

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

A Объект буфера пикселей :

  1. A Буферный объект . FBO - это , а не буферные объекты. Опять же: фреймбуфер это одно слово.
  2. Буферный объект, который используется для асинхронной загрузки / выгрузки данных пикселей в / из изображений .

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

Они не похожи друг на друга.

17 голосов
/ 14 апреля 2009

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

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

11 голосов
/ 14 апреля 2009

Я бы прочитал VBO, PBO и FBO :

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

Так что же это за объекты? Вот ситуация:

4 голосов
/ 09 марта 2016

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

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

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

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

  • Зачем использовать ПБО?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...