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.
