我们目前正在使用 GL_SRGB8_ALPHA8 进行 FBO 颜色校正,但它会在较暗的场景中导致显着的色带。
是否有每个颜色通道有 10 位的 GL_SRGB8_ALPHA8 版本(例如 GL_RGB10_A2)?如果没有,这个用例有什么解决方法?
附加的图像已添加对比度以使其更明显,但在源中仍然很明显。
从表面上看,Direct3D 9 似乎支持这一点,因为它不将 sRGB 编码为格式。相反,它将采样器设置为解码为线性空间,因此我看不出它在 D3D9 上如何无法正常工作,否则纹理将被错误地过滤。我不知道它是如何实现的。即使使用 GL_EXT_texture_sRGB_decode ,也决定(有一个注释)不启用这种 D3D9 类似的行为。
像往常一样,OpenGL 似乎总是在追逐这个现在旧 API 的幽灵。它可能只有 D3DSAMP_SRGBTEXTURE 之类的东西,并且与它具有同等地位。大概是硬件实现了它。任何条带都可能取决于显示器,因为最终它必须向下转换为显示器的颜色深度,这可能远低于 10 位。
最后,我们最终得到了线性 16 位浮点格式,我怀疑驱动程序在内部将它用于 SRGB 无论如何,正如@mick-p 指出的那样,我们总是受限于显示颜色深度