Что такое буферы в графике
Буфер — это область памяти, куда 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