Name

    CHROMIUM_image

Name Strings

    GL_CHROMIUM_image

Version

    Last Modifed Date: May 13, 2015

Dependencies

    OpenGL ES 2.0 is required.

    EXT_texture_format_BGRA8888 affects the definition of this extension.
    ARB_texture_rg affects the definition of this extension.

Overview

    This extension defines a new resource type that is suitable for
    sharing 2D arrays of image data between client APIs.

Issues

    None

New Tokens

    None

New Procedures and Functions

    GLuint CreateImageCHROMIUM(ClientBuffer buffer,
                               GLsizei width,
                               GLsizei height,
                               GLenum internalformat)

    Create an image from <buffer> with width equal to <width> and
    height equal to <height> and format equal to <internalformat>.

    Returns a unique identifier for the image that could be used in
    subsequent operations.

    INVALID_VALUE is generated if <width> or <height> is nonpositive.

    INVALID_VALUE is generated if <internalformat> is not one of
    R8, RGB, RGBA, BGRA_EXT, ATC_RGB_AMD, ATC_RGBA_INTERPOLATED_ALPHA_AMD,
    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT5_EXT or
    ETC1_RGB8_OES.

    void DestroyImageCHROMIUM(GLuint image_id)

    Frees the image previously created by a call to CreateImageCHROMIUM.

    INVALID_OPERATION is generated if <image_id> is not a valid image id.

Dependencies on EXT_texture_format_BGRA8888

    If EXT_texture_format_BGRA8888 is not supported:
     * delete any reference to the BGRA_EXT format.

Dependencies on ARB_texture_rg

    If ARB_texture_rg is not supported:
     * delete any reference to the R8 format.

Dependencies on AMD_compressed_ATC_texture

    If AMD_compressed_ATC_texture is not supported:
     * delete any reference to the ATC_RGB_AMD and
       ATC_RGBA_INTERPOLATED_ALPHA_AMD formats.

Dependencies on EXT_texture_compression_s3tc

    If EXT_texture_compression_s3tc is not supported:
     * delete any reference to the COMPRESSED_RGB_S3TC_DXT1_EXT and
       COMPRESSED_RGBA_S3TC_DXT5_EXT formats.

Dependencies on OES_compressed_ETC1_RGB8_texture

    If OES_compressed_ETC1_RGB8_texture is not supported:
     * delete any reference to the ETC1_RGB8_OES format.

Errors

    None.

New State

    None.

Revision History

    5/9/2013    Documented the extension
    4/30/2014   Moved usage flag to creation function.
    10/7/2014   Remove map/unmap API.
    4/6/2015    Add BGRA_EXT format.
    2/7/2015    Add R8 format.
    5/13/2015   Add compressed formats.
