== Compressed Texture Image Formats

For computer graphics, a number of texture compression schemes exist
which reduce both the overall texture memory footprint and the
bandwidth requirements of using the textures.
In this context, ``texture compression'' is distinct from ``image
compression'' in that texture compression schemes are designed to
allow efficient random access as part of texture sampling:
``image compression'' can further reduce image redundancy by
considering the image as a whole, but doing so is impractical
for efficient texture access operations.
The common texture compression schemes are ``block-based'',
relying on similarities between nearby texel regions to describe
``blocks'' of nearby texels in a unit:

* ``<<S3TC,S3TC>>'' describes a block of 4{times}4 _RGB_ texels
  in terms of a low-precision pair of color ``endpoints'', and
  allow each texel to specify an interpolation point between
  these endpoints.
  Alpha channels, if present, may be described similarly or
  with an explict per-texel alpha value.
* ``<<RGTC,RGTC>>'' provides one- and two-channel schemes for
  interpolating between two ``endpoints'' per 4{times}4 texel
  block, and are intended to provide efficient schemes for
  normal encoding, complementing the three-channel approach
  of S3TC.
* ``<<BPTC,BPTC>>'' offers a number of ways of encoding and
  interpolating endpoints, and allows the 4{times}4 texel block
  to be divided into multiple ``subsets'' which can be encoded
  independently, which can be useful for managing different
  regions with sharp transitions.
* ``<<ETC1,ETC1>>'' provides ways of encoding 4{times}4 texel blocks
  as two regions of 2{times}4 or 4{times}2 texels, each of which
  are specified as a base color; texels are then encoded as
  offsets relative to these bases, varying by a grayscale offset.
* ``<<ETC2,ETC2>>'' is a superset of ETC1, adding schemes for color
  patterns that would fit poorly into ETC1 options.
* ``<<ASTC,ASTC>>'' allows a wide range of ways of encoding each
  color block, and supports choosing different block sizes to encode
  the texture, providing a range of compression ratios; it also
  supports 3D and HDR textures.
* ``<<PVRTC,PVRTC>>'' describes several encoding schemes with two colors
  per block of 4{times}4 or 8{times}4 texels, interpolated between
  adjacent texel blocks, and means of modulating between them.

NOTE: Example data format descriptors for compressed formats can
be found under the *_colorModel_* field in <<CompressedFormatModels>>.

=== Terminology

As can be seen above, the compression schemes have a number of
features in common -- particularly in having a number of
endpoints described encoded in some of the bits of the texel
block.
For consistency and to make the terms more concise, the following
descriptions use some slightly unusual terminology:
The value _X_~n~^m^ refers to bit _m_ (starting at 0) of the _n_^th^
_X_ value. For example, _R_~1~^3^ would refer to bit 3 of red
value 1 -- _R_, _G_, _B_ and _A_ (capitalized and italicized) are
generally used to refer to color channels.
Similarly, _R_~1~^2..3^ refers to bits 2..3 of red value 1.
Although unusual, this terminology should be unambiguous
(e.g. none of the formats require exponentiation of arguments).
