为什么sRGB扩展已失去常数?

时间:2017-05-15 18:04:20

标签: webgl webgl2 webgl-extensions

旧的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上下文。

1 个答案:

答案 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之外的常量。额外奖励:您的代码运行速度更快,更小。