I have a small sample, es-300-fbo-srgb, supposed to showing how to manage gamma correction in opengl es3.
Essentially I have:
- a framebuffer with another
GL_SRGB8_ALPHA8 texture on
GL_COLOR_ATTACHMENT0 and a
GL_DEPTH_COMPONENT24 texture on
- the back buffer of my default fbo is
GL_FRAMEBUFFER_SRGB initially disabled.
Now, if I recap the
display metho, this is what I do:
I render the
TEXTURE_DIFFUSE texture on the sRGB fbo and since the source texture is in sRGB space, my fragment shader will read automatically a linear value and write it to the fbo. Fbo should contain now linear values, although it is sRGB, because
GL_FRAMEBUFFER_SRGB is disabled, so no linear->sRGB conversion is executed.
I blit the content of the fbo to the default fbo back buffer (through a program). But since the texture of this fbo has the sRGB component, on the read values a wrong gamma operation will be performed because they are assumed in sRGB space when they are not.
a second gamma operation is performed by my monitor when it renders the content of the default fbo
So my image is, if I am right, twice as wrong..
Now, if I
glEnable(GL_FRAMEBUFFER_SRGB); I get instead