Меня смущает концепция Framebuffer и Renderbuffer. Я знаю, что они необходимы для рендеринга, но я хочу понять их перед использованием.
Я знаю, что для хранения временного результата рисования требуется некоторый буфер растрового изображения. Задний буфер. А другой буфер требуется, чтобы его можно было увидеть на экране, когда эти рисунки находятся в процессе выполнения. Передний буфер. И переверните их, и снова нарисуйте. Я знаю эту концепцию, но эти объекты сложно связать с этой концепцией.
В чем их смысл и отличия?
opengl
rendering
framebuffer
eonil
источник
источник
Ответы:
На этой странице есть некоторые детали, которые, я думаю, довольно хорошо объясняют разницу. Во-первых:
В то время как:
источник
Объект Framebuffer на самом деле не буфер, а объект агрегатора, который содержит одно или несколько вложений, которые, в свою очередь, являются фактическими буферами. Вы можете понять Framebuffer как структуру C, где каждый член является указателем на буфер. Без какого-либо присоединения объект Framebuffer занимает очень мало места.
Теперь каждый буфер, прикрепленный к Framebuffer, может быть Renderbuffer или текстурой .
Renderbuffer является фактическим буфер (массив байтов, или целых, или пикселей). В Renderbuffer хранит значение пикселей в исходном формате, поэтому он оптимизирован для закадрового рендеринга. Другими словами, рисование в Renderbuffer может быть намного быстрее, чем рисование в текстуру. Недостатком является то, что пиксели используют собственный, зависящий от реализации формат, поэтому чтение из Renderbuffer намного сложнее, чем чтение из текстуры. Тем не менее, как только Renderbuffer был нарисован, его содержимое можно скопировать прямо на экран (или , как я полагаю, в другой Renderbuffer ), очень быстро, используя операции передачи пикселей. Это означает, что Renderbuffer может использоваться для эффективной реализации упомянутого вами шаблона двойного буфера.
Рендербуферы - относительно новая концепция. До них для рендеринга текстуры использовался Framebuffer , который мог быть медленнее, потому что текстура использует стандартный формат. По-прежнему можно выполнить рендеринг в текстуру, и это весьма полезно, когда нужно выполнить несколько проходов по каждому пикселю для построения сцены или нарисовать сцену на поверхности другой сцены!
В вики OpenGL есть эта страница, на которой показаны более подробные сведения и ссылки.
источник