Name

    EXT_EGL_image_external_wrap_modes

Name Strings

    GL_EXT_EGL_image_external_wrap_modes

Contributors

    Jeff Leger, Qualcomm
    Rob VanReenen, Qualcomm
    Jonathan Wicks, Qualcomm
    John Carmack, Oculus
    Cass Everitt, Oculus
    Graeme Leese, Broadcom

Contacts

    Jeff Leger, Qualcomm  (jleger 'at' qti.qualcomm.com)

Status

    Complete

Version

    Last Modified Date: Feb 06, 2018
    Revision: #4

Number

    OpenGL ES Extension #298

Dependencies

    Requires OES_EGL_image_external.

    Interacts with OES_EGL_image_external_essl3.

    OES_texture_border_clamp affects the definition of this extension.

    The portions of this extension that modify/extend 
    OES_EGL_image_external are written against OpenGL ES 2.0.
    The portions of this extension that modify/extend 
    OES_texture_border_clamp are written against OpenGL ES 3.0.
    The portions of this extension that modify/extend OES_EGL_image_external_essl3 are
    written against OpenGL ES 3.0.

Overview

    This extension builds on OES_EGL_image_external, which only allows
    a external images to use a single clamping wrap mode:  CLAMP_TO_EDGE.
    This extension relaxes that restriction, allowing wrap modes REPEAT
    and MIRRORED_REPEAT.  If OES_texture_border_clamp is supported, then 
    CLAMP_TO_BORDER is also allowed.

    This extension similarly adds to the capabilities of OES_EGL_image_external_essl3,
    allowing the same additional wrap modes.

    Since external images can be non-RGB, this extension clarifies how
    border color values are specified for non-RGB external images.

IP Status

    No known IP claims.

New Procedures and Functions

    None.

New Types

    None.

New Tokens

     None.

Changes to Chapter 3 of the OpenGL ES 2.0 Specification

    Modify the fourth sentence of the first paragraph of Section 3.7.14,
    as added by OES_EGL_image_external
    
    from:
         "The default s and t wrap modes are CLAMP_TO_EDGE and it is an
         INVALID_ENUM error to set the wrap mode to any other value."
    to:
        [[ The following applies if OES_texture_border_clamp is not supported. ]]

        "The default s and t wrap modes are CLAMP_TO_EDGE and it is an
        INVALID_ENUM error to set the wrap mode to any value other than
        CLAMP_TO_EDGE, REPEAT, or MIRRORED_REPEAT."

        [[ The following applies if OES_texture_border_clamp is supported. ]]

        "The default s and t wrap modes are CLAMP_TO_EDGE and it is an
        INVALID_ENUM error to set the wrap mode to any value other than
        CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, or CLAMP_TO_BORDER."

    [[ The following applies if OES_texture_border_clamp is supported. ]]

    Add the following paragraph to the end of Section 3.7.14, as added
    by OES_EGL_image_external:

        The state TEXTURE_BORDER_COLOR_OES is specified as an RGBA color
        in linear color space.  For example, if the original image is stored
        in(non-linear) ITU-R Rec. 601 YV12, the TEXTURE_BORDER_COLOR_OES
        must still be specified as an RGBA color in linear color space.

Changes to section "3.7.4 Texture Parameters" of the OpenGL ES 2.0 
Specification

    Modify the paragraph as added by OES_EGL_image_external
    
    from:
            "When <target> is TEXTURE_EXTERNAL_OES only NEAREST and 
        LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE
        is accepted as TEXTURE_WRAP_S and TEXTURE_WRAP_T."
    to:
        [[ The following applies if OES_texture_border_clamp is not supported. ]]

            "When <target> is TEXTURE_EXTERNAL_OES only NEAREST and
        LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE,
        REPEAT, or MIRRORED_REPEAT are accepted as TEXTURE_WRAP_S and
        TEXTURE_WRAP_T."

        [[ The following applies if OES_texture_border_clamp is supported. ]]

            "When <target> is TEXTURE_EXTERNAL_OES only NEAREST and
        LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE,
        REPEAT, MIRRORED_REPEAT, or CLAMP_TO_BORDER are accepted as 
        TEXTURE_WRAP_S and TEXTURE_WRAP_T."

[[ The following applies if OES_texture_border_clamp is supported. ]]

Changes to section 3.8.10 "Texture Minification" of the OpenGL ES 3.0
Specification

    Modify the sentence added by OES_texture_border_clamp

    From:
        "If the texture contains color components, the values of 
        TEXTURE_BORDER_COLOR_OES are interpreted as an RGBA color to 
        match the texture's internal format in a manner consistent with
        table 3.11."

    To:
         "If the texture contains color components, the values of
        TEXTURE_BORDER_COLOR_OES are interpreted as an RGBA color in
        linear color space to match the texture's internal format in a
        manner consistent with table 3.11, except that if an external
        texture stores YUV values then the linear RGBA border value is
        first converted into a YUVA value in the colorspace of the
        texture."

[[ The following applies if OES_EGL_image_external_essl3 is supported. ]]

Changes to section 3.8.2 "Sampler Objects" of the OpenGL ES 3.0.2
Specification

    Modify the the following sentence added by OES_EGL_image_external_essl3

    From:
        "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to
         anything but CLAMP_TO_EDGE on the sampler object bound to a
         texture unit and the texture bound to that unit is an external
         texture, the texture will be considered incomplete."

    To:

        [[ The following applies if OES_texture_border_clamp is not supported. ]]

         "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to
          anything but CLAMP_TO_EDGE, REPEAT, or MIRRORED_REPEAT on the
          sampler object bound to a texture unit and the texture bound
          to that unit is an external texture, the texture will be
          considered incomplete."

        [[ The following applies if OES_texture_border_clamp is supported. ]]

         "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to
          anything but CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, or
          CLAMP_TO_BORDER on the sampler object bound to a texture unit
          and the texture bound to that unit is an external texture,
          the texture will be considered incomplete."

Issues

    1) For YUV texture formats, should the should the border color be 
    specified as RGBA or YUVA ?

    Resolved:  The border color should be specified as linear RGBA since the 
    application may not know the underlying texture format/colorspace.  The 
    color should be converted by the implementation to a colorspace (e.g., 
    ITU-R Rec. 601) matching the texture's internal format.


Revision History

    Rev.    Date     Author    Changes
    ----  --------  --------  ----------------------------------------------
     1    12/19/17   jwicks    Initial spec
     2.   01/03/18   jleger    Updates and cleanup.
     3.   01/05/18   jleger    Allow additional wrap modes.  Rename the extension.
     4.   02/06/18   jleger    Added interactions with OES_EGL_image_external_essl3.
