Концепция: в чем польза от glDrawBuffer и glDrawBuffers? - PullRequest
0 голосов
/ 25 июня 2018

Я читаю Красную книгу по программированию OpenGL, когда сталкиваюсь с этими двумя методами, что кажется мне ненужным, так как мы уже можем указать, к какому цветовому буферу будут передаваться выходные данные с layout (location = ) или glBindFragDataLocation. Я что-то здесь неправильно понимаю?

1 Ответ

0 голосов
/ 25 июня 2018

Не все цветовые вложения, которые прикреплены к кадровому буферу, должны обрабатываться шейдерной программой.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 не получает данные, записанные в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...