Name

    EXT_texture_format_BGRA8888

Name Strings

    GL_EXT_texture_format_BGRA8888

Notice

    Copyright Imagination Technologies Limited, 2005.

Contact

    Imagination Technologies

Status

    Shipping

Version

    1.3, 12 September 2016

Number

    OpenGL ES Extension #51

Dependencies

    The extension is written against the OpenGLES 1.0 Specification,
    which in turn is based OpenGL 1.3. Thus this spec is effectively
    written against OpenGL 1.3 but does not address sections explicitly
    removed or reduced by OpenGL-ES 1.0.
    
    This extension has interactions with the OpenGL ES 2.0 API.

Overview

    This extension provides an additional format and type combination
    for use when specifying texture data.  The current allowed combinations
    are:

    Internal Format     External Format Type                    Bytes per Pixel
    ---------------     --------------- ----                    ---------------
    RGBA                RGBA             UNSIGNED_BYTE          4
    RGB                 RGB              UNSIGNED_BYTE          3
    RGBA                RGBA             UNSIGNED_SHORT_4_4_4_4 2
    RGBA                RGBA             UNSIGNED_SHORT_5_5_5_1 2
    RGB                 RGB              UNSIGNED_SHORT_5_6_5   2
    LUMINANCE_ALPHA     LUMINANCE_ALPHA  UNSIGNED_BYTE          2
    LUMINANCE           LUMINANCE        UNSIGNED_BYTE          1
    ALPHA               ALPHA            UNSIGNED_BYTE          1


   This table is extended to include format BGRA_EXT and type UNSIGNED_BYTE:

    Internal Format     External Format Type                    Bytes per Pixel
    ---------------     --------------- ----                    ---------------
    BGRA_EXT            BGRA_EXT        UNSIGNED_BYTE           4
    RGBA                RGBA            UNSIGNED_BYTE           4
    RGB                 RGB             UNSIGNED_BYTE           3
    RGBA                RGBA            UNSIGNED_SHORT_4_4_4_4  2
    RGBA                RGBA            UNSIGNED_SHORT_5_5_5_1  2
    RGB                 RGB             UNSIGNED_SHORT_5_6_5    2
    LUMINANCE_ALPHA     LUMINANCE_ALPHA UNSIGNED_BYTE           2
    LUMINANCE           LUMINANCE       UNSIGNED_BYTE           1
    ALPHA               ALPHA           UNSIGNED_BYTE           1
    
    This format is renderable in versions of OpenGL ES from 2.0 onwards.

IP Status

    Unknown

Issues

    None.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <format> and <internalformat> parameters of TexImage2D
    and the <format> parameter of TexSubImage2D:

        GL_BGRA_EXT                                     0x80E1

Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)

    None

Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment Operations and the Frame Buffer)

    None

Additions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions)

    None

Additions to Chapter 6 of the OpenGL 1.3 Specification (State and State Requests)

    None

Additions to the GLX / WGL / AGL Specifications

    None

GLX Protocol

    None

Errors

    None

New State

    None

New Implementation Dependent State

    None
    
Interactions with the OpenGL ES 2.0 specification

    Add the following entry to Table 4.5: Renderbuffer image formats,
    showing their renderable type (color-, depth-, or stencil-renderable)
    and the number of bits each format contains for color (R, G, B, A),
    depth (D), and stencil (S) components:
    
    |-----------------|------------------|------|------|------|------|------|------|
    | Sized           | Renderable       | R    | G    | B    | A    | D    | S    |
    | Internal Format | Type             | bits | bits | bits | bits | bits | bits |
    |-----------------|------------------|------|------|------|------|------|------|
    | GL_BGRA_EXT     | color-renderable | 8    | 8    | 8    | 8    |      |      |
    |-----------------|------------------|------|------|------|------|------|------|

Revision History

    0.1,  26/04/2005  sks:  Initial revision.
    1.0,  08/05/2005  gdc:  Final revision.
    1.1,  19/03/2009  Jon Leech: add extension number and fix tabbing /
                      whitespace issues.
    1.2,  26/10/2009  Benj Lipchak: add EXT suffix to BGRA token.
    1.3,  12/09/2016  Tobias Hector: Added interaction with ES 2.0 (made it renderable).
                      Also made revision dates use the same (dd/mm/yyyy) format.