WEBGL_compressed_texture_etc 扩展

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

WEBGL_compressed_texture_etc 扩展是 WebGL API 的一部分,它公开了 10 种 ETC/EAC 压缩纹理格式

压缩纹理可减少 GPU 存储纹理所需的内存量,从而允许使用更高分辨率的纹理或更多相同分辨率的纹理。

可以使用 WebGLRenderingContext.getExtension() 方法来访问 WebGL 扩展。有关更多信息,请参阅 WebGL 教程中的 使用扩展

注意: 此扩展同时适用于 WebGL1WebGL2 上下文。

常量

压缩纹理格式通过 10 个常量公开,并可用于两个函数:compressedTexImage2D()compressedTexSubImage2D()

ext.COMPRESSED_R11_EAC

单通道(红色)无符号格式压缩。

ext.COMPRESSED_SIGNED_R11_EAC

单通道(红色)有符号格式压缩。

ext.COMPRESSED_RG11_EAC

双通道(红色和绿色)无符号格式压缩。

ext.COMPRESSED_SIGNED_RG11_EAC

双通道(红色和绿色)有符号格式压缩。

ext.COMPRESSED_RGB8_ETC2

压缩没有 alpha 通道的 RGB8 数据。

ext.COMPRESSED_RGBA8_ETC2_EAC

压缩 RGBA8 数据。RGB 部分的编码方式与 RGB_ETC2 相同,但 alpha 部分单独编码。

ext.COMPRESSED_SRGB8_ETC2

压缩没有 alpha 通道的 sRGB8 数据。

ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC

压缩 sRGBA8 数据。sRGB 部分的编码方式与 SRGB8_ETC2 相同,但 alpha 部分单独编码。

ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2

类似于 RGB8_ETC,但具有 alpha 通道的穿透能力,这意味着可以将其完全设置为不透明或透明。

ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2

类似于 SRGB8_ETC,但具有 alpha 通道的穿透能力,这意味着可以将其完全设置为不透明或透明。

示例

js
const ext = gl.getExtension("WEBGL_compressed_texture_etc");

const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);

gl.compressedTexImage2D(
  gl.TEXTURE_2D,
  0,
  ext.COMPRESSED_RGBA8_ETC2_EAC,
  512,
  512,
  0,
  textureData,
);

规范

规范
WebGL WEBGL_compressed_texture_etc 扩展规范

浏览器兼容性

兼容性说明

  • 此扩展在 Firefox 46 到 Firefox 51 版本中名为 WEBGL_compressed_texture_es3,曾默认在 WebGL 2 上下文中可用 - 现在已不再是这样。您需要同时在 WebGL 1 和 WebGL 2 上下文中启用它才能使用。

另见