在我的渲染器中,我在多重采样的 FBO 上生成了一个抗锯齿场景,该场景被 blitted 到一个颜色附件是纹理的 FBO。然后在渲染到帧缓冲区期间读取纹理。
我想更新它,以便获得伽马正确的结果。使用 sRGB 帧缓冲区的好处是,它允许我通过将非线性 sRGB 值直接存储在帧缓冲区中来获得更好的颜色精度。
我不确定的是我应该做哪些改变来获得这个,以及不同的设置会改变什么。
看起来扩展 ARB_framebuffer_sRGB只是处理与 sRGB 帧缓冲区的读取和混合操作。在我的情况下,我需要使用指定 sRGB 表示类型的纹理,这意味着我将使用扩展EXT_texture_sRGB ...使用线性纹理格式会禁用 sRGB 转换。
编辑:但我刚看到这个:
3) 支持 sRGB 帧缓冲区更新和混合的能力应该是帧缓冲区的一个属性吗?
已解决:是的。它应该是某些像素格式(很可能只是 RGB8 和 RGBA8)的一种功能,表明可以启用 sRGB 混合。
这允许实现简单地将现有的 RGB8 和 RGBA8 像素格式标记为支持 sRGB 混合,然后只为此类格式提供 sRGB 更新和混合功能。
现在我不太确定要为纹理的像素格式指定什么。
好的,那么渲染缓冲区呢?ARB_framebuffer_sRGB 文档没有提到任何关于渲染缓冲区的内容。是否可以使用glRenderbufferStorageMultisample
sRGB 格式,所以我可以获得启用 sRGB 存储的混合?
GL_SRGB_ALPHA
另外,指定内部格式和GL_SRGB8_ALPHA8
指定内部格式有什么区别glTexImage2D
?