Render and graphic
May 28

Что такое буферы в графике


Буфер — это область памяти, куда GPU или CPU пишет данные. В графике — чаще всего массив пикселей или значений, участвующих в рендеринге.


1. Framebuffer (кадровый буфер)


Framebuffer — это набор буферов, объединённых вместе для хранения результата рендеринга одного кадра.


Он состоит из нескольких "вложенных" буферов, которые выполняют разные задачи:
Основные типы:
• Color buffer (цветовой) — содержит финальные цвета пикселей. То, что пойдёт на экран.
• Depth buffer (глубины) — хранит расстояние от камеры до каждого пикселя (z-значения), чтобы скрывать дальние объекты.
• Stencil buffer (трафарет) — используется для маскирования областей кадра, где разрешено или запрещено рисовать.
Все три — это части одного frame buffer'а, хранятся параллельно.


2. Display buffer (дисплейный буфер)


Это видеопамять, содержащая изображение, которое реально показывается на экране.
• Обычно это один из color буферов (либо скопированный в него, либо напрямую привязанный).
• Может быть двойной или тройной (double/triple buffering), чтобы избежать миганий.
• Он синхронизируется с временем обновления дисплея (vsync).


3. Render Target (цель рендеринга)


Render Target — это любой буфер, в который ты рендеришь, вместо экрана.


Пример: ты хочешь отрендерить отражение на воде. Тогда создаёшь render target — текстуру, и рендеришь туда отдельную сцену.


Он может быть:
• Текстурой
• Буфером в памяти
• Частью Framebuffer


Схема:
Scene Rendering ---> Framebuffer ---> Display Buffer (на экран) ↘︎ Depth + Stencil буферы Shader Effects ---> Render Target ---> потом копируешь в framebuffer