0

旧的 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 上下文获得了扩展的一些属性。我disjoint_timer_query_webgl2在 Chrome 中拥有所有缺少的属性,除了一个getQueryObject重命名为 的属性getQueryParameter,但在 Firefox 中,disjoint_timer_query扩展仍然可用于 WebGL2 上下文。

4

1 回答 1

1

WebGL2 不是 100% 向后兼容 WebGL1。更像是 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

换句话说,您不必引用 a 中的常量WebGLRenderingContext。奖励:您的代码将运行得更快且更小。

于 2017-05-16T04:14:39.303 回答