Не все цветовые вложения, которые прикреплены к кадровому буферу, должны обрабатываться шейдерной программой.glDrawBuffers
определяет список цветовых буферов для рисования.
например, давайте предположим, что у вас есть мошенник с 3 цветовыми привязками GL_COLOR_ATTACHMENT0
, GL_COLOR_ATTACHMENT1
и GL_COLOR_ATTACHMENT2
:
Фрагментный шейдер
layout (location = 0) out vec4 out_color1;
layout (location = 1) out vec4 out_color2;
спецификация drawbufferr:
const GLenum buffers[]{ GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT0 };
glDrawBuffers( 2, buffers );
out_color1
отправляет свои данные на розыгрышбуфер с индексом 0 (из-за объявления location = 0
).Вызов glDrawBuffers
выше устанавливает этот буфер равным GL_COLOR_ATTACHMENT2
.Точно так же out_color2
отправляет свои данные в индекс 1, который установлен в GL_COLOR_ATTACHMENT0
.Приложение 1 не получает данные, записанные в него.