Webgl 为什么sRGB扩展丢失了一个常量?

Webgl 为什么sRGB扩展丢失了一个常量?,webgl,webgl2,webgl-extensions,Webgl,Webgl2,Webgl Extensions,旧WebGL上下文具有扩展名。该扩展公开了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

旧WebGL上下文具有扩展名。该扩展公开了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\u ALPHA
。WebGL2上下文中没有值为35906的常量。我检查了两个浏览器,情况是一样的。此外,我还检查了本地的所有其他扩展。WebGL2中所有升级的扩展都已将其所有属性合并到上下文中,但sRGB除外。在文档中没有找到太多

sRGB扩展有什么问题?损失的原因是什么? 是否有人使用了SRGB\u ALPHA\u EXT常量?怎么用?请分享你的经验


另外,不相交的\u timer\u查询扩展也发生了一些奇怪的事情。该扩展被部分合并。WebGL2上下文获得了扩展的一些属性。我在Chrome中有
disjoint\u timer\u query\u webgl2
,除了一个
getQueryObject
重命名为
getQueryParameter
,它的所有属性都丢失了,但是在Firefox中,disjoint\u timer\u query扩展仍然可以与webgl2上下文一起使用。

webgl2与WebGL1不是100%向后兼容的。更接近99%。你找到了一个不适合你的地方

SRGB\u ALPHA\u 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
中的常量。额外好处:您的代码将运行得更快、更小。

您是说,尽管从WebGL2中删除了35906常量,但它仍然有用,WebGL2理解它吗?也许,这不是你的意思。谢谢你@gman。还是不够清楚。可以或不能在WebGL1中使用35906常量?可以或不能在WebGL2中使用35906常量?可以用另一个代替吗?请阅读代码。在WebGL1中,它使用35906(
SRGB\u ALPHA\u EXT
)。在WebGL2中,它使用6408(
RGBA
)。您只能在WebGL1中使用35906,并且必须启用扩展。在WebGL2中,不能使用35906Clear。是否有可能使用WebbGL1中的其他常数而不是35906来获得相同的结果?