Объект Framebuffer на самом деле не буфер, а объект агрегатора, который содержит одно или несколько вложений, которые, в свою очередь, являются фактическими буферами. Вы можете понимать Framebuffer как структуру C, где каждый член является указателем на буфер. Без каких-либо вложений объект Framebuffer занимает очень мало места.
Теперь каждый буфер, присоединенный к буферу кадра, может быть буфером рендеринга или текстурой.
Renderbuffer - это фактический буфер (массив байтов, целых чисел или пикселей). Renderbuffer хранит значения пикселей в собственном формате, поэтому он оптимизирован для визуализации вне экрана. Другими словами, рисование в Renderbuffer может быть намного быстрее, чем рисование в текстуру. Недостатком является то, что пиксели используют собственный формат, зависящий от реализации, так что чтение из Renderbuffer намного сложнее, чем чтение из текстуры. Тем не менее, как только Renderbuffer был нарисован, его содержимое можно скопировать прямо на экран (или, я думаю, в другой Renderbuffer), очень быстро, используя операции передачи пикселей. Это означает, что Renderbuffer можно использовать для эффективной реализации упомянутого вами шаблона двойного буфера.
Буферы рендеринга - относительно новая концепция. До них буфер кадра использовался для рендеринга в текстуру, что могло быть медленнее, поскольку текстура использует стандартный формат. Рендеринг в текстуру по-прежнему возможен, и это очень полезно, когда нужно выполнить несколько проходов по каждому пикселю для построения сцены или нарисовать сцену на поверхности другой сцены!
В вики OpenGL есть эта страница, на которой показаны дополнительные сведения и ссылки.
person
fernacolo
schedule
18.11.2012