我正在使用SRGB_EXT
扩展名在WebGL 1.0中加载纹理。在Chrome中,generateMipmaps
可以正常工作,但是在Firefox中,我得到警告:
Error: WebGL warning: generateMipmap: EXT_sRGB forbids GenerateMipmap with sRGB.
果然,OpenGL规范指出这应该显式失败:
Modify Section 3.7.11: Mipmap Generation Add the following sentence to the end of this section: If the format of a texture is sRGB, he error INVALID_OPERATION is generated.
这并不是特别有用-WebGL加载的几乎所有格式本质上都是sRGB,并且会发生非线性比例的错误数学。
据我所知,这为我提供了一些选择:
忽略着色器内部读取的每个纹理的sRGB转换和伽玛校正,这虽然很慢,但至少是准确的。
在加载时在着色器中将sRGB转换为常规纹理,并将mipmap生成推迟到WebGL。这可能会严重降低纹理的精度,并可能引入其他瑕疵。
在着色器中生成我自己的mipmap。可能是正确的解决方案,但我要确保这一代产品不会带来细微的颜色问题。
如何生成这些mipmap,以确保它们正确运行而不用烘烤我的线性照明模型?