OpenGL MRT glDrawBuffers () аргументы номера и поведение

У меня есть 5 целей рендеринга. Я использую тот же шейдер для записи в первые 4, а затем в отдельном проходе пишу в последний.

Прежде чем вызывать рендеринг для первых 4 целей, я звоню:

GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1,  GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3};
glDrawBuffers(4, drawBuffers);

Однако, когда я вызываю его для второго прохода и хочу записать только последний, 5-й объект, почему следующее дает странные результаты?

GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT4 };
glDrawBuffers(1, drawBuffers);

Почему я должен вместо этого использовать:

GLenum drawBuffers[] = { GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_COLOR_ATTACHMENT4 };
glDrawBuffers(5, drawBuffers);

Это просто, как работает glDrawBuffers (), или это вызвано чем-то другим?

РЕДАКТИРОВАТЬ: исправлен код с учетом комментариев Jarrods

1

Решение

Да это просто как glDrawBuffers работает. Но есть причина для этого.

Фрагментные шейдеры записывают цветовые выходные данные, которые отображаются на определенные «цветовые числа». У них есть нет связи на номера GL_COLOR_ATTACHMENT»i ». Весь смысл glDrawBuffers состоит в том, чтобы отобразить эти номера цветов фрагмента фактическим буферам в кадровом буфере.

3

Другие решения

http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml

2-й параметр должен иметь тип const GLenum* то есть указатель «на массив символьных констант, определяющих буферы, в которые будут записываться цвета фрагмента или значения данных».

Так что просто проходя GL_COLOR_ATTACHMENT4 как 2-й параметр неправильного типа. Вам нужно передать указатель на массив GLEnum,

1

Я считаю, что что-то не так в glDrawBuffers ().
например
tmp = {Participment_color0, Attachement_color2}
glDrawBuffers (TMP).
в шейдере:
gl_fragdata [0] = …
gl_fragdata [2] = …

или вы можете использовать расположение макета, чтобы определить вывод атрибутов.
Но иногда, по крайней мере, в моем ПК, это не работает. Я имею в виду, что attachment_color2 НЕ имеет точного вывода.

0
По вопросам рекламы [email protected]