Когда вызывать glEnable (GL_FRAMEBUFFER_SRGB)?

У меня есть система рендеринга, где я рисую в FBO с мультисэмплерным рендербуфером, затем перетаскиваю его в другой FBO с текстурой, чтобы разрешить образцы для считывания текстуры, чтобы выполнить затенение при постобработке при рисовании в буферный буфер ( Индекс 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) line, что фактически означает, что этот параметр включен для всего конвейера, и я фактически принудительно возвращаю его на каждом кадре.

Я не знаю, правильно ли это или нет. Конечно, он применяет нелинейность к цветам, но я не могу сказать, применяется ли это дважды (что было бы плохо). Это могло бы применить гамму, поскольку я рендеринг к моему первому 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 и забыть об этом в дальнейшем?

Ответы на вопрос(1)

Ваш ответ на вопрос