Quando chamar o glEnable (GL_FRAMEBUFFER_SRGB)?

Eu tenho um sistema de renderização onde eu desenho para um FBO com um renderbuffer multisampled, em seguida, crio-o para outro FBO com uma textura para resolver as amostras, a fim de ler a textura para executar sombreamento pós-processamento ao desenhar para o backbuffer Índice FBO 0).

Agora eu gostaria de obter alguma saída sRGB correta ... O problema é o comportamento do programa é bastante inconsistente entre quando eu corro no OS X e Windows e isso também muda dependendo da máquina: No Windows com o Intel HD 3000 não aplicará a não-linearidade sRGB, mas na minha outra máquina com uma Nvidia GTX 670 ele não. No Intel HD 3000 no OS X também será aplicado.

Então isso provavelmente significa que eu não estou definindo o meuGL_FRAMEBUFFER_SRGB habilitar estado nos pontos certos no programa. No entanto, não consigo encontrar nenhum tutorial que realmente me diga quando devo ativá-lo, eles apenas mencionam que é fácil e não tem nenhum custo de desempenho.

Atualmente, não estou carregando em nenhuma textura, então não tive necessidade de linearizar suas cores ainda.

Para forçar o programa a não cuspir de volta os valores de cores lineares, o que tentei é simplesmente comentar o meuglDisable(GL_FRAMEBUFFER_SRGB) line, o que efetivamente significa que esta configuração está habilitada para todo o pipeline, e eu de fato a forço redundante de volta em cada frame.

Eu não sei se isso está correto ou não. Certamente aplica-se uma não linearização às cores, mas não posso dizer se isso está sendo aplicado duas vezes (o que seria ruim). Poderia aplicar a gama como eu renderizo ao meu primeiro FBO. Isso pode acontecer quando eu crio o primeiro FBO para o segundo FBO. Por que não?

Eu fui tão longe a ponto de tirar fotos do meu quadro final e comparar valores crus de cores de pixel com as cores que eu defini no programa:

Defino a cor de entrada para RGB (1,2,3) e a saída é RGB (13,22,28).

Isso parece ser um monte de compressão de cores na parte inferior e me leva a questionar se o gamma está sendo aplicado várias vezes.

Acabei de passar pela equação sRGB e posso verificar que a conversão parece ser aplicada apenas uma vez, já que lineares 1/255, 2/255 e 3/255 mapeiam de fato para sRGB 13/255, 22/255 e 28/255 usando a equação1.055*C^(1/2.4)+0.055. Como a expansão é tão grande para esses valores de cor baixa, ela deve ficar óbvia se a transformação de cor sRGB estiver sendo aplicada mais de uma vez.

Então, ainda não determinei o que é a coisa certa a fazer. fazglEnable(GL_FRAMEBUFFER_SRGB) aplica-se apenas aos valores finais do framebuffer, caso em que posso apenas definir isso durante a minha rotina de inicialização do GL e esquecê-lo daqui em diante?

questionAnswers(1)

yourAnswerToTheQuestion