¿Cuándo llamar a glEnable (GL_FRAMEBUFFER_SRGB)?

Tengo un sistema de renderizado en el que dibujé en un FBO con un tampón de procesamiento de múltiples muestras, luego lo mezclé en otro FBO con una textura para resolver las muestras con el fin de leer la textura para realizar el sombreado de posprocesamiento mientras dibujaba en el backbuffer ( Índice FBO 0).

Ahora me gustaría obtener una salida sRGB correcta ... El problema es que el comportamiento del programa es bastante inconsistente cuando lo ejecuto en OS X y Windows y esto también cambia según la máquina: En Windows con Intel HD 3000 no aplicará la no linealidad sRGB pero en mi otra máquina con una Nvidia GTX 670 sí lo hace. En el Intel HD 3000 en OS X también lo aplicará.

Así que esto probablemente significa que no estoy configurando miGL_FRAMEBUFFER_SRGB habilitar el estado en los puntos correctos del programa. Sin embargo, parece que no puedo encontrar ningún tutorial que me diga cuándo debo habilitarlo, solo mencionan que es muy fácil y que no conlleva costos de rendimiento.

Actualmente no estoy cargando texturas, así que no he tenido la necesidad de lidiar con la linealización de sus colores todavía.

Para forzar al programa a no simplemente volver a escupir los valores de color lineales, lo que he intentado es simplemente comentar miglDisable(GL_FRAMEBUFFER_SRGB) línea, lo que efectivamente significa que esta configuración está habilitada para toda la canalización, y en realidad lo vuelvo a forzar en cada fotograma.

No sé si esto es correcto o no. Ciertamente, aplica una no linealización a los colores, pero no puedo decir si esto se aplica dos veces (lo que sería malo). Podría aplicar el gamma como lo hago para mi primer FBO. Podría hacerlo cuando blité el primer FBO al segundo FBO. Por qué no?

He llegado al extremo de tomar capturas de pantalla de mi fotograma final y comparar los valores de color de píxel sin procesar con los colores que configuré en el programa:

Establecí el color de entrada a RGB (1,2,3) y la salida es RGB (13,22,28).

Eso parece una gran cantidad de compresión de color en el extremo inferior y me lleva a cuestionar si la gama se está aplicando varias veces.

Acabo de pasar por la ecuación de sRGB y puedo verificar que la conversión parece haberse aplicado solo una vez, ya que 1/255, 2/255 y 3/255 lineales se asignan a sRGB 13/255, 22/255, y 28/255 usando la ecuación1.055*C^(1/2.4)+0.055. Dado que la expansión es tan grande para estos valores de color bajos, debería ser obvio si la transformación de color sRGB se aplica más de una vez.

Entonces, todavía no he determinado qué es lo correcto a hacer. haceglEnable(GL_FRAMEBUFFER_SRGB) ¿Solo se aplica a los valores finales de framebuffer, en cuyo caso puedo configurar esto durante mi rutina de inicio de GL y olvidarme de ello más adelante?

Respuestas a la pregunta(1)

Su respuesta a la pregunta