WEBGL_compressed_texture_etc
WebGL working group (public_webgl 'at' khronos.org)
Jeff Gilbert, Mozilla
Members of the WebGL working group
Last modified date: September 30, 2016
Revision: 7
WebGL extension #29
Written against the WebGL API 1.0 specification.
This extension exposes the compressed texture formats defined as core in the OpenGL ES 3.0 spec to WebGL. These include the ETC2 and EAC formats, where ETC2 is a superset of ETC1. ETC1 textures can be loaded using the ETC2 token value. All of these formats are in the ETC family.
Browsers should not advertise this extension when the WebGL implementation, or graphics driver, supports these formats by decompressing them.
When this extension is enabled:
COMPRESSED_R11_EAC,
COMPRESSED_SIGNED_R11_EAC,
COMPRESSED_RG11_EAC,
COMPRESSED_SIGNED_RG11_EAC,
COMPRESSED_RGB8_ETC2,
COMPRESSED_SRGB8_ETC2,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_RGBA8_ETC2_EAC,
and COMPRESSED_SRGB8_ALPHA8_ETC2_EAC may be passed to the
compressedTexImage2D and compressedTexSubImage2D entry points. In
WebGL 2.0, they may also be passed to the compressedTexImage3D and
compressedTexSubImage3D entry points with the TEXTURE_2D_ARRAY
target.
getParameter with the argument COMPRESSED_TEXTURE_FORMATS
will include the formats from this specification.
validatedSize (defined for each specific format
below) is validated in the following ways:
compressedTexImage*D or
compressedTexSubImage*D taking ArrayBufferView pixels is
called, then the byteLength of the view must be equal to
validatedSize, or an INVALID_VALUE error is generated.
compressedTexImage*D or
compressedTexSubImage*D taking GLintptr offset is called,
and offset + validatedSize is greater than the size of the bound
PIXEL_UNPACK_BUFFER, an INVALID_OPERATION error is
generated.
validatedSize is computed in the following way:
floor((width + 3) / 4) * floor((height + 3) / 4) * 8
validatedSize is computed in the following way:
floor((width + 3) / 4) * floor((height + 3) / 4) * 16
[Exposed=(Window,Worker), LegacyNoInterfaceObject]
interface WEBGL_compressed_texture_etc {
/* Compressed Texture Formats */
const GLenum COMPRESSED_R11_EAC = 0x9270;
const GLenum COMPRESSED_SIGNED_R11_EAC = 0x9271;
const GLenum COMPRESSED_RG11_EAC = 0x9272;
const GLenum COMPRESSED_SIGNED_RG11_EAC = 0x9273;
const GLenum COMPRESSED_RGB8_ETC2 = 0x9274;
const GLenum COMPRESSED_SRGB8_ETC2 = 0x9275;
const GLenum COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
const GLenum COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
const GLenum COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
const GLenum COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
};
internalformat parameter:
COMPRESSED_R11_EAC,
COMPRESSED_SIGNED_R11_EAC,
COMPRESSED_RG11_EAC,
COMPRESSED_SIGNED_RG11_EAC,
COMPRESSED_RGB8_ETC2,
COMPRESSED_SRGB8_ETC2,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_RGBA8_ETC2_EAC or
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
internalformat parameter:
COMPRESSED_R11_EAC,
COMPRESSED_SIGNED_R11_EAC,
COMPRESSED_RG11_EAC,
COMPRESSED_SIGNED_RG11_EAC,
COMPRESSED_RGB8_ETC2,
COMPRESSED_SRGB8_ETC2,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
COMPRESSED_RGBA8_ETC2_EAC or
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
INVALID_VALUE is generated by compressedTexImage2D,
compressedTexSubImage2D, compressedTexImage3D, and
compressedTexSubImage3D if the variant taking ArrayBufferView pixels
is called and the size restrictions above are not met.
INVALID_OPERATION is generated by compressedTexImage2D,
compressedTexSubImage2D, compressedTexImage3D, and
compressedTexSubImage3D if the variant taking GLintptr offset is
called and the size restrictions above are not met.
Revision 1, 2013/12/9
Revision 2, 2014/07/15
Revision 3, 2014/12/12
Revision 4, 2015/01/31
Revision 5, 2016/09/16
Revision 6, 2016/09/21
Revision 7, 2016/09/30