Фреймбуфер / цветовой буфер?

#opengl #graphics #core-graphics

#opengl #графика #ядро-графика

Вопрос:

Может ли кто-нибудь указать мне, совпадают ли они оба? Я имею в виду, что я читал информацию об этом, и в этой красной книге здесь говорится

«Сам цветовой буфер может состоять из нескольких вложенных буферов. Фреймбуфер в системе содержит все эти буферы» здесь

Является ли фреймбуфер виртуальным буфером, состоящим из всех фактических буферов?(например, глубина / трафарет и т.д.)

Ответ №1:

Фреймбуфер содержит (часто) буферы глубины, трафарета, цвета и накопления. Цветовые буферы являются наиболее важной частью, но это только одна часть. Вы можете создать больше цветовых буферов, и вы также можете создать больше фреймбуферов в OpenGL.

Когда вы говорите «виртуальный буфер кадров», это иногда означает буфер кадров, который не отображается на экране (например, он записывается на диск или используется в качестве текстуры). Я считаю, что эта терминология специфична для X11, а не для OpenGL.

Комментарии:

1. Итак, иерархически говоря, фреймбуфер всегда похож на надмножество разных буферов.. верно? Под виртуальным я подразумевал, что он не похож на сам реальный буфер (физически).. Например, ООН — это группа всех наций, но нет такой страны, как Организация Объединенных Наций. Это правильно?

2. Буфер кадров является реальным, и буфер цветов также является реальным. Точно так же, как Канада реальна, и Онтарио тоже реально.

Ответ №2:

Если вы действительно хотите это проверить, взгляните на объекты фреймбуфера OpenGL. FBO — это «закадровые» цели рендеринга. Все это означает, что вместо того, чтобы отображать ваше изображение на вашем дисплее, вы отображаете его в каком-то другом месте — FBO. Прежде чем вы сможете это сделать, вы должны создать и настроить FBO. Частью этой конфигурации является добавление цветового вложения — буфера для хранения информации о цвете для каждого пикселя отображаемого изображения. Может быть, вы остановитесь на этом, или, может быть, вы также добавите вложение глубины. Если вы визуализируете 3D-геометрию и хотите, чтобы она выглядела правильно, вам, вероятно, придется добавить это вложение глубины.

На самом деле, это хороший эксперимент. Напишите небольшую программу OpenGL, которая отображает простой 3D-куб на экране. Как только это заработает, измените место назначения рендеринга на FBO, которое вы настраиваете с только цветным вложением. Вероятно, это будет выглядеть не совсем правильно, поскольку в OpenGL нет места для хранения информации о глубине во время рендеринга. Бум! Все получает одинаковую глубину. Теперь добавьте вложение глубины в свой FBO и посмотрите, как изменится рендеринг.

Если учесть, что экранный фреймбуфер — это, по сути, FBO по умолчанию, настраиваемый с самого начала, то становится совершенно ясно, что фреймбуфер состоит из нескольких буферов.