Name

    CHROMIUM_copy_compressed_texture

Name Strings

    GL_CHROMIUM_copy_compressed_texture

Version

    Last Modifed Date: August 5, 2015

Dependencies

    OpenGL ES 2.0 is required.

    GL_AMD_compressed_ATC_texture, GL_ATI_texture_compression_atitc,
    GL_EXT_texture_compression_dxt1, GL_ANGLE_texture_compression_dxt5,
    GL_EXT_texture_compression_s3tc and GL_OES_compressed_ETC1_RGB8_texture
    affects the definition of this extension.

Overview

    This extension provides functionality for copying compressed textures. It
    adds a new function glCompressedCopyTextureCHROMIUM that works similarily
    to glCopyTextureCHROMIUM, but for compressed textures.

    Which compressed texture formats that this extension supports depends on
    the supported texture compression formats of the host GPU.

Issues

    glCompressedCopyTextureCHROMIUM will first try to copy into a compressed
    texture of the same format as the source texture. If unsucessful, the
    destination texture format will be changed to GL_RGBA and the texture will
    be stored uncompressed.

New Procedures and Functions

    The command

        void glCompressedCopyTextureCHROMIUM (GLuint source_id, GLuint dest_id)

    Copies the contents of a compressed texture referred to by <source_id> to
    <dest_id> texture.

    Texture level 0 is copied from the source image to level 0 of the
    destination texture.

    The internal format of the source texture must be one of the following
    symbolic constants: GL_ATC_RGB_AMD, GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD,
    GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
    GL_ETC1_RGB8_OES

    The destination texture will be created or replaced with the same internal
    format as the source texture.

    INVALID_OPERATION is generated if internal format of source texture is not
    one of the valid formats described above.

    INVALID_OPERATION is generated if destination texture is immutable.

    INVALID_VALUE is generated if <source_id> or <dest_id> are not valid texture
    objects.

    INVALID_VALUE is generated if textures corresponding to <dest_id> have not
    been bound as GL_TEXTURE_2D object.

    INVALID_VALUE is generated if level 0 of the source texture is not defined.

Errors

    None.

New Tokens

    None.

New State

    None.

Revision History

    15/6/2015    Documented the extension.
    5/8/2015     Added glCompressedCopySubTextureCHROMIUM.
    1/6/2016     Remove glCompressedCopySubTextureCHROMIUM.
    1/8/2016     Remove <target> argument.
