Name

    EXT_texture_sRGB_RG8

Name Strings

    GL_EXT_texture_sRGB_RG8

Contributors

    Sam Holmes
    Maurice Ribble
    Tobias Hector
    Jan-Harald Fredriksen
    Dylan Perks
    Contributors to EXT_texture_sRGB_R8, on which this is based.

Contact

    Tobias Hector (tobias.hector 'at' imgtec.com)

Status

    Complete.

Version

    Last Modified Date: December 11, 2020
    Revision: 4

Number

    OpenGL ES Extension #223
    OpenGL Extension #PENDING (what a trendy hashtag (wow so trendy))

Dependencies

    OpenGL ES 3.0 or OpenGL 1.2 is required.

    This extension is written against the OpenGL ES 3.1 and
    OpenGL 4.6 (Core Profile) specifications.

    This extension interacts with ARB_texture_view.

    This extension interacts with EXT_texture_view.

    This extension interacts with OES_texture_view.

    This extension interacts with ARB_direct_state_access.

    If OpenGL is not supported, ignore all references to 1D textures,
    including TexImage1D, TexStorage1D, and TextureStorage1D.

    If neither OpenGL 4.5 nor ARB_direct_state_access are supported,
    ignore all references to TextureStorage3D, TextureStorage2D, and
    TextureStorage1D.

    If ARB_texture_view is supported, add SRG8_EXT to the Internal formats
    column of the VIEW_CLASS_16_BITS row in Table 3.X.2.

    If EXT_texture_view is supported, add SRG8_EXT to the Internal formats
    column of the VIEW_CLASS_16_BITS row in Table 8.X.2.

    If OES_texture_view is supported, add SRG8_EXT to the Internal formats
    column of the VIEW_CLASS_16_BITS row in Table 8.X.2.

Overview

    This extension introduces SRG8_EXT as an acceptable internal format.
    This allows efficient sRGB sampling for source images stored with 2
    channels.

New Procedures and Functions

    None

New Tokens

    Accepted by the <internalformat> parameters of TexImage3D, TexImage2D,
    TexImage1D, TexStorage3D, TexStorage2D, TexStorage1D, TextureStorage3D,
    TextureStorage2D, and TextureStorage1D:

        SRG8_EXT    0x8FBE

Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and
Samplers)

    The following table entry is added to Table 8.2 (Valid combinations of
    format, type and sized internalformat):

        Format    Type             External Bytes per Pixel    Internal Format
        ------    ----             ------------------------    ---------------
        RG        UNSIGNED_BYTE    2                           SRG8_EXT

    The following table entry is added to Table 8.13 (Correspondence of sized
    internal color formats to base internal formats):

        Sized Internal Format    Base Internal Format    R    G    B    A    S    CR    TF    Req. rend.    Req. tex.
        ---------------------    --------------------    -    -    -    -    -    --    --    ----------    ---------
        SRG8_EXT                 RG                      8    8                         X                   X

    The following table entry is added to Table 8.24 (sRGB texture internal
    formats):

        Internal Format
        ---------------
        SRG8_EXT

Additions to Chapter 8 of the OpenGL 4.6 (Core Profile) Specification
(Textures and Samplers)

    The following table entry is added to Table 8.2 (Valid combinations of
    format, type and sized internalformat):

        Format    Type             External Bytes per Pixel    Internal Format
        ------    ----             ------------------------    ---------------
        RG        UNSIGNED_BYTE    2                           SRG8_EXT

    The following table entry is added to Table 8.12 (Correspondence of sized
    internal color formats to base internal formats):

        Sized Internal Format    Base Internal Format    R    G    B    A    S    CR    TF    Req. rend.    Req. tex.
        ---------------------    --------------------    -    -    -    -    -    --    --    ----------    ---------
        SRG8_EXT                 RG                      8    8                         X                   X
    
    The following table entry is added to Table 8.22 (Compatible internal
    formats for TextureView):

        Class              Internal formats
        ---------------    ----------------
        VIEW_CLASS_16_BITS  SRG8_EXT

    The following table entry is added to Table 8.24 (sRGB texture internal
    formats):

        Internal Format
        ---------------
        SRG8_EXT

Errors

    None

New State

    None

Revision History

    #01    2/5/2015    Tobias Hector      Initial revision.
    #02    2/5/2015    Tobias Hector      Fixed Table 8.13 entry and whitespace issues.
    #03    2/17/2015   Tobias Hector      Fixed Table 8.2 entry to correctly say 2 bytes.
    #04    12/11/2020  Dylan Perks        Add GL interactions and register for GL
