首页 > 解决方案 > 使用 Emscripten 的 SDL 进行 WebGL 渲染对于 sRGB 感知代码来说太暗了

问题描述

我有 sRGB 感知的代码,即图像数据在 sRGB 空间中。由于某些原因,保存图像数据的纹理也保存了非 sRGB 的其他图像数据。因此,在着色器中,我应用通常的公式从 sRGB 转换为线性(不谈过滤问题)。在本机上,它正确显示。在 WebGL2 测试应用程序上,使用 SDL 获取“窗口”和 GL 上下文它是黑暗的,基本上与渲染内容时在本机中发出 glDisable(GL_FRAMEBUFFER_SRGB) 的结果相同。

在另一个测试中,图像数据位于使用 sRGB 纹理的 sRGB 空间中。在 WebGL2 测试应用程序上,使用 SDL 获取“窗口”和 GL 上下文它是黑暗的,基本上与渲染内容时在本机中发出 glDisable(GL_FRAMEBUFFER_SRGB) 的结果相同。相反,在本机上,亮度是正确的。在云雀中,我破解了代码以使纹理的内部格式为 GL_RGBA8 而不是 GL_SRGB8_ALPHA8 并且你瞧,它对 WebGL2 显示没有影响,并使本机(正确地)变暗。

这些结果适用于 Safari 和 Chrome。

标签: webglsrgb

解决方案


推荐阅读