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 部分的编码方式与 SRGB_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 扩展规范

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

兼容性说明

  • 此扩展从 Firefox 46 到 Firefox 51 被称为 WEBGL_compressed_texture_es3,并且以前默认在 WebGL 2 上下文中可用——现在不再是这种情况。您必须在 WebGL 1 和 WebGL 2 上下文中都启用它,才能使用它。

另请参阅