Name

    EXT_texture_rg

Name Strings
    
    GL_EXT_texture_rg

Contributors

    Contributors to ARB_texture_rg, on which this extension is based
    Kyle Haughey
    Richard Schreyer

Contact

    Benj Lipchak, Apple (lipchak 'at' apple.com)

Status 
    
    Complete

Version
    
    Date: July 22, 2011
    Revision: 3

Number

    OpenGL ES Extension #103

Dependencies

    Requires OpenGL ES 2.0.

    Written based on the wording of the OpenGL ES 2.0.25 Full Specification
    (November 2, 2010).

    OES_texture_float affects the definition of this extension.

    OES_texture_half_float affects the definition of this extension.

    APPLE_framebuffer_multisample affects the definition of this extension.

Overview

    Historically one- and two-component textures have been specified in OpenGL
    ES using the luminance or luminance-alpha (L/LA) formats. With the advent
    of programmable shaders and render-to-texture capabilities these legacy
    formats carry some historical artifacts which are no longer useful.

    For example, when sampling from such textures, the luminance values are
    replicated across the color components. This is no longer necessary with
    programmable shaders.
    
    It is also desirable to be able to render to one- and two-component format
    textures using capabilities such as framebuffer objects (FBO), but
    rendering to L/LA formats is under-specified (specifically how to map
    R/G/B/A values to L/A texture channels).

    This extension adds new base internal formats for one-component RED and
    two-component RG (red green) textures as well as sized RED and RG internal
    formats for renderbuffers. The RED and RG texture formats can be used for
    both texturing and rendering into with framebuffer objects.

New Procedures and Functions
    
    None

New Tokens

    Accepted by the <internalformat> parameter of TexImage2D and CopyTexImage2D,
    and the <format> parameter of TexImage2D, TexSubImage2D, and ReadPixels:

        RED_EXT                 0x1903
        RG_EXT                  0x8227

    Accepted by the <internalformat> parameter of RenderbufferStorage and
    RenderbufferStorageMultisampleAPPLE:

        R8_EXT                  0x8229
        RG8_EXT                 0x822B

Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL ES Operation)

    None

Additions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization)

    (Add the following to Table 3.3: "TexImage2D and ReadPixels formats")

    Format Name     Element Meaning and Order      Target Buffer
    -----------     -------------------------      -------------
    RED_EXT         R                              Color
    RG_EXT          R, G                           Color

    (Add the following to Table 3.4: "Valid pixel format and type combinations")
    (as modified by OES_texture_float and OES_texture_half_float)

    Format          Type                           Bytes per Pixel
    -----------     -------------------------      ---------------
    RED_EXT         FLOAT                          4
    RED_EXT         HALF_FLOAT_OES                 2
    RED_EXT         UNSIGNED_BYTE                  1
    RG_EXT          FLOAT                          8
    RG_EXT          HALF_FLOAT_OES                 4
    RG_EXT          UNSIGNED_BYTE                  2

    (Add the following to Table 3.8: "Conversion from RGBA and depth pixel
    components to internal texture")

    Base Internal Format     RGBA       Internal Components
    --------------------     ------     -------------------
    RED_EXT                  R          R
    RG_EXT                   R,G        R,G

    (Modify Table 3.9: "CopyTexImage internal format/color buffer combinations")

                            Texture Format
    Color Buffer      A  L  LA  R  RG  RGB  RGBA
    ------------      -  -  --  -  --  ---  ----
    A                 X
    R                    X      X
    RG                   X      X  X
    RGB                  X      X  X   X
    RGBA              X  X  X   X  X   X    X

    (Add the following to Table 3.12: "Correspondence of filtered texture
    components to texture source color components")

    Texture Base        Texture source color
    Internal Format     C_s             A_s
    ---------------     -------------   ------
    RED_EXT             (R_t, 0, 0)     1
    RG_EXT              (R_t, G_t, 0)   1

Additions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment
Operations and the Framebuffer)

    In section 4.3.1 "Reading Pixels", subsection "Obtaining Pixels from the
    Framebuffer", modify the last sentence to read:

    "If the framebuffer does not support G, B, or A values then the G, B, and A
    values that are obtained are 0.0, 0.0, and 1.0 respectively."

    In section 4.4.5 "Framebuffer Completeness", modify the last sentence of
    the second paragraph to read:

    "Color-renderable formats contain red, and possibly green, blue, and alpha
    components; depth-renderable formats contain depth components; and
    stencil-renderable formats contain stencil components."

    (Add the following 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 Internal  Renderable Type   R bits G bits B bits A bits D bits S bits
    Format
    --------------  ----------------  ------ ------ ------ ------ ------ ------
    R8_EXT        color-renderable  8
    RG8_EXT       color-renderable  8      8

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

    None

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

    None

Dependencies on OES_texture_float

    If OES_texture_float is not supported, then omit the rows of
    Table 3.4 that have Type FLOAT.

Dependencies on OES_texture_half_float

    If OES_texture_half_float is not supported, then omit the rows of 
    Table 3.4 that have Type HALF_FLOAT_OES.

Dependencies on APPLE_framebuffer_multisample

    If APPLE_framebuffer_multisample is not supported, then all references to
    RenderbufferStorageMultisampleAPPLE should be ignored.

Revision History
    
    #1 February 22, 2011, khaughey
        - initial version adapted from ARB_texture_rg.
    #2 June 16, 2011, benj
        - add interaction with APPLE_framebuffer_multisample
    #3 July 22, 2011, benj
        - rename from APPLE to EXT
