Быстрый вопрос о glColorMask и его работе - PullRequest
2 голосов
/ 09 февраля 2011

Я хочу визуализировать буфер глубины, чтобы сделать хорошее отображение теней. Мой код рисования, тем не менее, состоит из многих шейдерных переключателей. Если я установлю glColorMask(0,0,0,0) и оставлю все шейдерные программы, текстуры и другие, как есть, и просто отобразлю буфер глубины, будет ли это «ОК»? Я имею в виду, если glColorMask отключает «запись цветовых компонентов» , значит ли это, что затенение для каждого фрагмента НЕ будет выполняться ?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Для рендеринга карты теней вы обычно хотите связать текстуру глубины (предпочтительно квадратную и степенную, равную двум, потому что драйверы стерео воспринимают это как подсказку!) К FBO и использовать ровно один шейдер (как можно более простой) для все. Вы не хотите прикреплять цветной буфер, потому что вы вообще не интересуетесь цветом, и это создает больше ненужного давления на ROP (плюс, некоторые аппаратные средства могут рендерить двойную скорость или больше только с глубиной). Вы не хотите переключаться между многими шейдерами.

В зависимости от того, выполняете ли вы «классическое» отображение теней или что-то более сложное, например, карты экспоненциальных теней, шейдер, который вы будете использовать, либо прост, насколько он может быть (постоянный цвет без записи глубины), либо выполняет некоторые (умеренно сложные) вычисления по глубине, но обычно вы не хотите выполнять какие-либо вычисления цвета, поскольку это будет означать ненужные вычисления, которые не будут видны каким-либо образом.

1 голос
/ 10 февраля 2011

Нет, операции с фрагментами будут выполняться в любом случае, но их результат будет подавлен вашей маской нулевого цвета.

Если вы не хотите, чтобы выполнялись некоторые операции с фрагментами - используйте подходящую шейдерную программу, к которой прикреплен пустой фрагментный шейдер, и установите буфер рисования на GL_NONE.

Есть еще один способ отключить обработку фрагментов - включить GL_RASTERIZER_DISCARD, но вы не получите даже значения глубины в этом случае:)

1 голос
/ 09 февраля 2011

Нет, шейдерные программы выполняются независимо от конвейера с фиксированными функциями.Установка glColorMask не повлияет на шейдерные программы.

...