旧的WebGL上下文具有EXT_sRGB
扩展名。该扩展暴露了4个常量:
{
SRGB_EXT : 35904,
SRGB_ALPHA_EXT : 35906,
SRGB8_ALPHA8_EXT : 35907,
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT : 33296
}
扩展在WebGL2中被提升并成为核心的一部分,但已经失去了一个常数。 WebGL2只有常量:
{
SRGB : 35904,
SRGB8_ALPHA8 : 35907,
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING : 33296
}
否SRGB_ALPHA
。更多关于WebGL2上下文没有常量值35906.我确实检查了两个浏览器,情况是一样的。另外,我检查了我在本地的所有其他扩展。 WebGL2中所有提升的扩展都将其所有属性合并到上下文中,但是sRGB。在文档中找不到多少。
sRGB 扩展有什么问题?损失背后的原因是什么? 有没有人使用 SRGB_ALPHA_EXT 常量?怎么样?请分享您的经验。
此外, disjoint_timer_query 扩展名出现了一些奇怪的事情。该扩展部分合并。 WebGL2上下文获得了扩展的一些属性。我在Chrome中有disjoint_timer_query_webgl2
,除了一个已重命名为getQueryObject
的{{1}}之外,其他所有属性都已丢失,但在Firefox getQueryParameter
扩展中仍然可以使用WebGL2上下文。
答案 0 :(得分:1)
WebGL2与WebGL1不是100%向后兼容。更像是99%。你找到了一个不是的区域。
SRGB_ALPHA_EXT
是一种未经过格式化的格式,大部分未使用的格式都已弃用。基本的非扩展未规划格式仍然存在,但OpenGL ES 3.0规范中有一个表格,指定它们变为有效大小的内部格式。未涵盖扩展未分级格式。
常量只是常量,因此您可以自由地在自己的代码中定义它们。
const srgba8InternalFormat = 35907;
const srgba8Format = isWebGL2 ? 6408 : 35906;
gl.texImage2D(gl.TEXTURE2D, 0, srgba8InternalFormat, width, height, 0
srgba8Format, gl.UNSIGNED_BYTE, 0
换句话说,您不必引用WebGLRenderingContext
之外的常量。额外奖励:您的代码运行速度更快,更小。