Когда вызывать glEnable (GL _FRAMEBUFFER _SRGB )?

У меня есть система рендеринга, в которой я рисую в FBO с мультисэмплированным буфером рендеринга, а затем переношу его в другой FBO с текстурой, чтобы разрешить сэмплы, чтобы считывать текстуру для выполнения затенения после -обработки при рисовании в backbuffer (Индекс FBO 0 ).

Теперь я хотел бы получить правильный вывод sRGB... Проблема в том, что поведение программы довольно несовместимо между запуском ее в OS X и Windows, и это также меняется в зависимости от машины :В Windows с Intel HD 3000 не будет применять нелинейность sRGB, но на другой моей машине с Nvidia GTX 670 она применяется. На Intel HD 3000 в OS X он также будет применяться.

Так что это, вероятно, означает, что я не устанавливаю свое состояние включения GL_FRAMEBUFFER_SRGBв нужных точках программы. Однако я не могу найти какие-либо учебные пособия, которые действительно говорят мне, когда я должен включить его, они только упоминают, что это очень просто и не влияет на производительность.

В настоящее время я не загружаю какие-либо текстуры, поэтому мне еще не приходилось заниматься линеаризацией их цветов.

Чтобы заставить программу не просто выдавать линейные значения цвета, я попытался просто закомментировать мою строку glDisable(GL_FRAMEBUFFER_SRGB), что фактически означает, что этот параметр включен для всего конвейера, и я на самом деле избыточно принудительно возвращаю его на каждый Рамка.

Я не знаю, правильно это или нет. Он, конечно, применяет нелинейность к цветам, но я не могу сказать, применяется ли она дважды (, что было бы плохо ). Он может применить гамму, когда я визуализирую свой первый FBO. Он мог сделать это, когда я соединил первый FBO со вторым FBO. Почему нет?

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

. Я установил входной цвет на RGB (1,2,3 ), а выход — RGB (13,22,28 ).

Это похоже на сильное сжатие цвета на нижнем уровне и заставляет меня задаться вопросом, применяется ли гамма несколько раз.

Я только что прошел уравнение sRGB и могу убедиться, что преобразование, кажется, применяется только один раз, поскольку линейные 1/255, 2/255 и 3/255 действительно сопоставляются с sRGB 13/255, 22/255 и 28/255 с использованием уравнения 1.055*C^(1/2.4)+0.055. Учитывая, что расширение настолько велико для этих низких значений цвета, действительно должно быть очевидно, применяется ли цветовое преобразование sRGB более одного раза.

Так что я еще не определился, как правильно поступить. относится ли glEnable(GL_FRAMEBUFFER_SRGB)только к окончательным значениям буфера кадра, и в этом случае я могу просто установить это во время моей процедуры инициализации GL и забыть об этом в дальнейшем?

16
задан Nicol Bolas 8 July 2012 в 21:12
поделиться