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
    RED, 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 RED 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.
    11/5/2015   Change R8 format to RED.
