Open main menu

Ericsson Texture Compression (ETC) is a lossy texture compression technique developed in collaboration with Ericsson Research in early 2005. It was originally developed under the name iPACKMAN[1] and based on an earlier compression scheme called PACKMAN.[2]



The original 'ETC1' compression scheme provides 6x compression of 24-bit RGB data. It does not support the compression of images with Alpha components, although there are work-arounds for this.[3]

ETC1 takes 4x4 groups of pixel data and compresses each into a single 64-bit word. The 4×4 pixel group is first divided into two 4×2 chunks - either horizontally or vertically. Each half is given a base color - either using 4/4/4 RGB or by giving one of them a 5/5/5 RGB and having the other be a 3/3/3 bit offset from that base. Each 4×2 region also has a 3-bit brightness range selection. Each pixel is then offset from the base color by adding one of four signed values to the base color for its half of the 4×4 group.

This format is a part of the OpenGL ES graphics standard extensions[4] for embedded devices such as mobile phones and has been approved by the Khronos Group for use in the WebGL graphics standard for browser-side World Wide Web graphics.[citation needed]

Android version 2.2 (Froyo) includes support for ETC1.[5]

ETC2 and EACEdit

The 'ETC2' scheme expands ETC1 in a backwards-compatible way to provide higher quality RGB compression[6] as well as compression of RGBA data (RGB plus alpha).

The following ETC2 codecs are mandatory in OpenGL ES 3.0[7] and OpenGL 4.3:[8]

  • GL_COMPRESSED_RGB8_ETC2 — Compresses RGB888 data, the followup of ETC1.
  • GL_COMPRESSED_RGBA8_ETC2_EAC — Compresses RGBA8888 data with full alpha support.
  • GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 — Compresses RGBA data where pixels are either fully transparent or fully opaque.

sRGB variants of the above codecs are also available.

EAC is built on the same principles as ETC1/ETC2 but is used for one- or two-channel data. The following four EAC codecs are included as mandatory in OpenGL ES 3.0 and OpenGL 4.3:

  • GL_COMPRESSED_R11_EAC — one channel unsigned data
  • GL_COMPRESSED_SIGNED_R11_EAC — one channel signed data
  • GL_COMPRESSED_RG11_EAC — two channel unsigned data
  • GL_COMPRESSED_SIGNED_RG11_EAC — two channel signed data

A software utility called etcpack for compression and decompression of ETC1/ETC2 textures is available for free download in code form from Ericsson on GitHub.[9]

Smooth ProfileEdit

The 'Smooth Profile' is on the paper[10] only. Like ETC2 Planar Mode but using more function to provide smooth texture.

See alsoEdit


  1. ^ iPACKMAN: High-Quality, Low-Complexity Textures Compression for Mobile Phones -- Jacob Ström (Ericsson Research), Tomas Akeinine-Möller (Lund University)
  2. ^ PACKMAN: Texture Compression for Mobile Phones -- Jacob Ström (Ericsson Research), Tomas Akeinine-Möller (Lund University).
  3. ^ "Sample code for handling alpha channels in ETC1 from ARM". Archived from the original on 2011-10-27. Retrieved 2011-11-03. Cite uses deprecated parameter |dead-url= (help)
  4. ^ OES_compressed_ETC1_RGB8_texture, A description of the ETC1- compression algorithm and texture format in OpenGL ES extension registry
  5. ^ Release notes for Android 2.2 Archived 2010-10-11 at the Wayback Machine, (Froyo)
  6. ^ Paper about ETC2: Texture Compression using Invalid Combinations
  7. ^ OpenGL ES Version 3.0 Specification
  8. ^ OpenGL Version 4.3 Specification
  9. ^ Ericsson ETCPACK on Github
  10. ^ Texture Compression of Light Maps using Smooth Profile Functions -- Jim Rasmusson, Jacob Ström, Per Wennersten (Ericsson Research), Michael Doggett, Tomas Akenine-Möller (Lund University)

External linksEdit