Является ли gl_FragData [0] всегда цветным буфером? - PullRequest
9 голосов
/ 27 марта 2012

Из немногих примеров, которые я видел в сети, gl_FragData [0] считается цветовым буфером. Я попытался найти значение каждого индекса в gl_FragData и наткнулся на этот отрывок из книги по языку OpenGL Shading (оранжевая книга)

gl_FragData - это массив, которому можно присвоить записанные значения в один или несколько закадровых буферов. Размер этого массива зависит от реализации и может быть запрошен с помощью glGet с символическая константа GL_MAX_DRAW_BUFFERS. Внеэкранные буферы, которые изменен в результате записи значений в gl_FragData в пределах Фрагмент шейдера указывается с помощью glDrawBuffers. Значение написано into gl_FragData [0] обновляет первый буфер в списке, указанном в вызов glDrawBuffers, значение записывается в gl_FragData [1] обновляет второй буфер в списке и т. д.

Не указано, что 0-е значение gl_FragData всегда является цветным буфером. Если есть такая спецификация, где я могу ее найти? Если нет, то какова нормальная практика при записи в gl_FragData?

1 Ответ

9 голосов
/ 27 марта 2012

Это не должен быть цветной буфер как таковой. Но если это не цветной буфер, то это ничто .

Выходной массив gl_FragData относится к значениям, установленным glDrawBuffers. А при использовании FBO значения, передаваемые этой функции, могут быть только GL_COLOR_ATTACHMENTn или GL_NONE. Которые, как следует из имен, являются цветными буферами.

Так что это либо цветной буфер, либо GL_NONE.

Для реализаций GL ES, которые не предлагают glDrawBuffers (то есть, которые не реализуют NV_draw_buffers ), он определяется так, как если бы нулевой индекс был установлен на GL_COLOR_ATTACHMENT0.

Глупо в ES 2.0 допускать возможность множественных вложений без фактического предоставления рендеринга более чем одному из них ...

...