15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    OES_EGL_image
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_OES_EGL_image
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Gary King
125bd8deadSopenharmony_ci    Acorn Pooley
135bd8deadSopenharmony_ci    Jon Leech
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ciContacts
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci    Gary King, NVIDIA Corporation (gking 'at' nvidia.com)
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciNotice
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Copyright (c) 2006-2014 The Khronos Group Inc. Copyright terms at
225bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciSpecification Update Policy
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
275bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
285bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
295bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
305bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
315bd8deadSopenharmony_ci    described in more detail at
325bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciStatus
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    Approved by the Khronos OpenKODE Working Group in January, 2007
375bd8deadSopenharmony_ci    as part of OpenKODE 1.0 Provisional.
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ciVersion
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    April 23, 2015 (version 8)
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ciNumber
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    OpenGL ES Extension #23
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciDependencies
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    Requires OpenGL-ES 1.1 or OpenGL-ES 2.0.
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci    Requires EGL 1.2 and either the EGL_OES_image or EGL_OES_image_base
525bd8deadSopenharmony_ci    extensions.
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    The EGL_KHR_gl_texture_2D_image, EGL_KHR_gl_texture_cubemap_image,
555bd8deadSopenharmony_ci    EGL_KHR_gl_texture_3D_image, EGL_KHR_gl_renderbuffer_image, and
565bd8deadSopenharmony_ci    EGL_KHR_vg_parent_image extensions provide additional functionality
575bd8deadSopenharmony_ci    layered on EGL_OES_image_base and related to this extension
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    OES_framebuffer_object affects the wording of this specification
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    This extension is written based on the wording of the OpenGL 2.0
625bd8deadSopenharmony_ci    Specification and the EXT_framebuffer_object extension.
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ciOverview
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    This extension provides a mechanism for creating texture and
675bd8deadSopenharmony_ci    renderbuffer objects sharing storage with specified EGLImage objects
685bd8deadSopenharmony_ci    (such objects are referred to as "EGLImage targets").
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    The companion EGL_KHR_image_base and EGL_KHR_image extensions
715bd8deadSopenharmony_ci    provide the definition and rationale for EGLImage objects.
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci    Other EGL extensions, such as EGL_KHR_gl_texture_2D_image,
745bd8deadSopenharmony_ci    EGL_KHR_gl_texture_cubemap_image, EGL_KHR_gl_texture_3D_image,
755bd8deadSopenharmony_ci    EGL_KHR_gl_renderbuffer_image, and EGL_KHR_vg_parent_image, define
765bd8deadSopenharmony_ci    the related functionality of creating EGLImage objects from
775bd8deadSopenharmony_ci    "EGLImage sources" such as OpenGL ES texture or renderbuffers or
785bd8deadSopenharmony_ci    OpenVG VGImage objects.
795bd8deadSopenharmony_ci
805bd8deadSopenharmony_ci    EGL extension specifications are located in the EGL Registry at
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci        http://www.khronos.org/registry/egl/
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ciGlossary
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    Please see the EGL_KHR_image specification for a list of terms
875bd8deadSopenharmony_ci    used by this specification.
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ciNew Types
905bd8deadSopenharmony_ci
915bd8deadSopenharmony_ci    /*
925bd8deadSopenharmony_ci     * GLeglImageOES is an opaque handle to an EGLImage
935bd8deadSopenharmony_ci     */
945bd8deadSopenharmony_ci    typedef void* GLeglImageOES;
955bd8deadSopenharmony_ci
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ciNew Procedures and Functions
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    void EGLImageTargetTexture2DOES(enum target, eglImageOES image)
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ci    void EGLImageTargetRenderbufferStorageOES(enum target,
1025bd8deadSopenharmony_ci                                              eglImageOES image)
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ciNew Tokens
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci     None.
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    - (3.8.2, p. 160)  Insert the following text after the end of the
1115bd8deadSopenharmony_ci      first paragraph (before the discussion of {Copy}TexSubImage):
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci    "Another way of specifying two-dimensional texture images is to
1145bd8deadSopenharmony_ci    reference them from existing EGLImage objects.  Images specified
1155bd8deadSopenharmony_ci    this way will be EGLImage siblings with the original EGLImage
1165bd8deadSopenharmony_ci    source and any other EGLImage targets.
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    The command
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci        void EGLImageTargetTexture2DOES(enum target, eglImageOES image);
1215bd8deadSopenharmony_ci
1225bd8deadSopenharmony_ci    defines an entire two-dimensional texture array.  All properties
1235bd8deadSopenharmony_ci    of the texture images (including width, height, format, border, mipmap
1245bd8deadSopenharmony_ci    levels of detail, and image data) are taken from the specified
1255bd8deadSopenharmony_ci    eglImageOES <image>, rather than from the client or the framebuffer.
1265bd8deadSopenharmony_ci    Any existing image arrays associated with any mipmap levels in the texture
1275bd8deadSopenharmony_ci    object are freed (as if TexImage was called for each, with an image of
1285bd8deadSopenharmony_ci    zero size).  As a result of this referencing operation, all of the pixel
1295bd8deadSopenharmony_ci    data in the <buffer> used as the EGLImage source resource (i.e., the
1305bd8deadSopenharmony_ci    <buffer> parameter passed to the CreateImageOES command that returned
1315bd8deadSopenharmony_ci    <image>) will become undefined.
1325bd8deadSopenharmony_ci
1335bd8deadSopenharmony_ci    Currently, <target> must be TEXTURE_2D.  <image> must be the
1345bd8deadSopenharmony_ci    handle of a valid EGLImage resource, cast into the type eglImageOES.
1355bd8deadSopenharmony_ci    Assuming no errors are generated in EGLImageTargetTexture2DOES, the
1365bd8deadSopenharmony_ci    newly specified texture object will be an EGLImage target of the
1375bd8deadSopenharmony_ci    specified  eglImageOES.  If an application later respecifies any image
1385bd8deadSopenharmony_ci    array in the texture object (through mechanisms such as calls to
1395bd8deadSopenharmony_ci    TexImage2D and/or GenerateMipmapOES, or setting the
1405bd8deadSopenharmony_ci    SGIS_GENERATE_MIPMAP parameter to TRUE), implementations should allocate
1415bd8deadSopenharmony_ci    additional space for all specified (and respecified) image arrays,
1425bd8deadSopenharmony_ci    and copy any existing image data to the newly (re)specified texture
1435bd8deadSopenharmony_ci    object (as if TexImage was called for every level-of-detail in the
1445bd8deadSopenharmony_ci    texture object).  The respecified texture object will not be an
1455bd8deadSopenharmony_ci    EGLImage target.
1465bd8deadSopenharmony_ci
1475bd8deadSopenharmony_ci    If the GL is unable to specify a texture object using the supplied
1485bd8deadSopenharmony_ci    eglImageOES <image> (if, for example, <image> refers to a multisampled
1495bd8deadSopenharmony_ci    eglImageOES), the error INVALID_OPERATION is generated.
1505bd8deadSopenharmony_ci
1515bd8deadSopenharmony_ci    If <image> does not refer to a valid eglImageOES object, the error
1525bd8deadSopenharmony_ci    INVALID_VALUE is generated.
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    If <target> is not TEXTURE_2D, the error INVALID_ENUM is generated.
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ciAdditions to the EXT_framebuffer_object extension
1575bd8deadSopenharmony_ci
1585bd8deadSopenharmony_ci    - (4.4.2.1) Add the following text at the end of section 4.4.2.1
1595bd8deadSopenharmony_ci      (Renderbuffer Objects)
1605bd8deadSopenharmony_ci
1615bd8deadSopenharmony_ci    The command
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci        void EGLImageTargetRenderbufferStorageOES(enum target,
1645bd8deadSopenharmony_ci                                                  eglImageOES image)
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci    establishes the data storage, format, and dimensions of a
1675bd8deadSopenharmony_ci    renderbuffer object's image, using the parameters and storage
1685bd8deadSopenharmony_ci    associated with the eglImageOES <image>.  Assuming no errors
1695bd8deadSopenharmony_ci    are generated in this process, the resulting renderbuffer
1705bd8deadSopenharmony_ci    will be an EGLImage target of the specifed eglImageOES <image>.
1715bd8deadSopenharmony_ci    The renderbuffer will remain an EGLImage target until it is
1725bd8deadSopenharmony_ci    deleted or respecified by a call to
1735bd8deadSopenharmony_ci    {Reference}RenderbufferStorageOES.  As a result of this referencing
1745bd8deadSopenharmony_ci    operation, all of the pixel data in the <buffer> used as the
1755bd8deadSopenharmony_ci    EGLImage source resource (i.e., the <buffer> parameter passed to
1765bd8deadSopenharmony_ci    the CreateImageOES command that returned <image>) will become
1775bd8deadSopenharmony_ci    undefined.
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci    <target> must be RENDERBUFFER_OES, and <image> must be the
1805bd8deadSopenharmony_ci    handle of a valid EGLImage resource, cast into the type
1815bd8deadSopenharmony_ci    eglImageOES.
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    If the GL is unable to create a renderbuffer using the specified
1845bd8deadSopenharmony_ci    eglImageOES, the error INVALID_OPERATION is generated.  If <image>
1855bd8deadSopenharmony_ci    does not refer to a valid eglImageOES object, the error
1865bd8deadSopenharmony_ci    INVALID_VALUE is generated.
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ciIssues
1895bd8deadSopenharmony_ci
1905bd8deadSopenharmony_ci    1.  What happens if an application tries to specify a new mipmap
1915bd8deadSopenharmony_ci        level (or respecify an existing mipmap level) for a texture
1925bd8deadSopenharmony_ci        object that was originally specified using
1935bd8deadSopenharmony_ci        EGLImageTargetTexture2D (e.g., by subsequent calls to
1945bd8deadSopenharmony_ci        {Copy}TexImage, GenerateMipmapOES, and/or setting the
1955bd8deadSopenharmony_ci        texture's GENERATE_MIPMAP_SGIS parameter to TRUE) ?
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci        RESOLVED:  If the application respecifies any properties of
1985bd8deadSopenharmony_ci        an EGLImage target texture, the GL should allocate additional
1995bd8deadSopenharmony_ci        memory for the respecified object, copying any data from
2005bd8deadSopenharmony_ci        previously-specified levels (including those in the EGLImage
2015bd8deadSopenharmony_ci        source).  The respecified texture object will not be an
2025bd8deadSopenharmony_ci        EGLImage target, potentially orphaning the EGLImage.
2035bd8deadSopenharmony_ci
2045bd8deadSopenharmony_ci    2.  What happens if multiple texture or renderbuffer objects, which
2055bd8deadSopenharmony_ci        are each EGLImage siblings, are attached to multiple attachment
2065bd8deadSopenharmony_ci        points of a framebuffer object?
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci        RESOLVED:  There are several possibilities for handling this
2095bd8deadSopenharmony_ci        situation, listed below.  The primary goal for any solution
2105bd8deadSopenharmony_ci        should be minimizing the required run-time error checking &
2115bd8deadSopenharmony_ci        validation, since determining that two objects refer to the same
2125bd8deadSopenharmony_ci        parent resource is a complex operation.
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci         i.   Generate an error if a context share group attempts to create
2155bd8deadSopenharmony_ci              two EGLImage siblings (either source or target) .
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci              This limits error checking to just EGLImageTargetTexture /
2185bd8deadSopenharmony_ci              EGLImageTargetRenderbufferStorage, which should be infrequent
2195bd8deadSopenharmony_ci              calls, particularly during run-time.  However, some potentially
2205bd8deadSopenharmony_ci              valuable use cases are restricted with this approach, such
2215bd8deadSopenharmony_ci              as referencing 2D texture objects from cube map EGLImage sources
2225bd8deadSopenharmony_ci              in the same context share group.
2235bd8deadSopenharmony_ci
2245bd8deadSopenharmony_ci         ii.  Add a new clause to the framebuffer completeness test that
2255bd8deadSopenharmony_ci              disallows multiple EGLImage siblings being attached to the
2265bd8deadSopenharmony_ci              same framebuffer object.
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci              This would be in the spirit of the OES_framebuffer_object
2295bd8deadSopenharmony_ci              extension and does not limit any valuable use cases; however,
2305bd8deadSopenharmony_ci              it has the potential to significantly increase runtime
2315bd8deadSopenharmony_ci              overhead, given the complexity of this completeness check
2325bd8deadSopenharmony_ci              and the potential frequency that framebuffer completeness
2335bd8deadSopenharmony_ci              may need to be checked.
2345bd8deadSopenharmony_ci
2355bd8deadSopenharmony_ci         iii. Leave the rendering results undefined, but require that
2365bd8deadSopenharmony_ci              behavior be limited to undefined rendering results (i.e.,
2375bd8deadSopenharmony_ci              the application and/or system may not crash as a result
2385bd8deadSopenharmony_ci              of this operation).
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci              This solution allows implementations the opportunity to have
2415bd8deadSopenharmony_ci              virtually no additional run-time validation overhead, nor
2425bd8deadSopenharmony_ci              are any valuable use cases restricted.  Implementations
2435bd8deadSopenharmony_ci              may consider framebuffer objects which contain multiple
2445bd8deadSopenharmony_ci              EGLImage siblings as incomplete framebuffers if necessary to
2455bd8deadSopenharmony_ci              ensure application & system stability.
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci        SUGGESTION:  Solution (iii).  The only reasonable well-defined
2485bd8deadSopenharmony_ci        behavior for this type of API usage is an error; however, given
2495bd8deadSopenharmony_ci        the potential for the error check to noticeably increase validation
2505bd8deadSopenharmony_ci        overhead, leaving this behavior undefined seems like the best
2515bd8deadSopenharmony_ci        choice.
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    3.  What about portability problems introduced by allowing implementation-
2545bd8deadSopenharmony_ci        dependent failures?
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ci        UNRESOLVED:  This is the same issue described in Issue 14 of the
2575bd8deadSopenharmony_ci        EGL_KHR_image_base specification. Like the resolution for that
2585bd8deadSopenharmony_ci        issue, this specification should include some minimum
2595bd8deadSopenharmony_ci        requirements, but leave the larger portability problem
2605bd8deadSopenharmony_ci        unresolved at the moment.
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ci    4.  Should EGLImageTargetTexture2DOES and
2635bd8deadSopenharmony_ci        EGLImageTargetRenderBufferStorageOES result in undefined pixel data,
2645bd8deadSopenharmony_ci        as with calls to eglCreateImageOES?
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ci        UNRESOLVED:  One of the problems with allowing the referencing
2675bd8deadSopenharmony_ci        functions to result in undefined pixel data is that the EGLImage
2685bd8deadSopenharmony_ci        source object may be part of a larger image structure (such as
2695bd8deadSopenharmony_ci        an array of mipmap levels-of-detail, or cube map faces).  While we
2705bd8deadSopenharmony_ci        can specify that the pixel data in the EGLImage become undefined
2715bd8deadSopenharmony_ci        quite easily, specifying that the pixel data in other images become
2725bd8deadSopenharmony_ci        undefined is more difficult.  So, with that discussion, the following
2735bd8deadSopenharmony_ci        options were considered:
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci          i.   Specify that the pixel data in the EGLImage, and other image
2765bd8deadSopenharmony_ci               arrays associated with the EGLImage source, become undefined
2775bd8deadSopenharmony_ci               as a result of referencing.
2785bd8deadSopenharmony_ci
2795bd8deadSopenharmony_ci          ii.  Specify that only the pixel data in the EGLImage becomes
2805bd8deadSopenharmony_ci               undefined; any data in other image arrays associated with the
2815bd8deadSopenharmony_ci               EGLImage source must not be affected by the referencing
2825bd8deadSopenharmony_ci               operation.
2835bd8deadSopenharmony_ci
2845bd8deadSopenharmony_ci          iii. Specify that the pixel data in the EGLImage is unaffected as
2855bd8deadSopenharmony_ci               a result of the referencing operation.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci        Option (i) gives the greatest flexibility (and potentially ease-
2885bd8deadSopenharmony_ci        of implementation) to implementers, which should may result in
2895bd8deadSopenharmony_ci        implementations exporting a larger number of compatible configurations
2905bd8deadSopenharmony_ci        than the other, stricter options.  Additionally, for well-behaved
2915bd8deadSopenharmony_ci        applications (i.e., applications which perform all resource creation
2925bd8deadSopenharmony_ci        and referencing prior to use), making the image data undefined will
2935bd8deadSopenharmony_ci        not have any adverse side effects.
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ci        Option (ii) provides option (i)'s benefits if the EGLImage source
2965bd8deadSopenharmony_ci        is a trivial image (i.e., no additional mipmap levels-of-detail,
2975bd8deadSopenharmony_ci        3D texture slices, etc.); however, some implementations may be
2985bd8deadSopenharmony_ci        required to implement potentially-expensive copy operations to support
2995bd8deadSopenharmony_ci        complex EGLImage source images.
3005bd8deadSopenharmony_ci
3015bd8deadSopenharmony_ci        Option (iii) is the strictest, and may significantly impede
3025bd8deadSopenharmony_ci        implementers' ability to expose compatible configurations.
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ci        Weighing the benefits (increased configuration compatibility and ease-
3055bd8deadSopenharmony_ci        / performance- of implementation) versus the costs (specification
3065bd8deadSopenharmony_ci        ugliness), the specification has currently selected option (i),
3075bd8deadSopenharmony_ci        favoring compatibility and performance.
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci    5.  What should the entry point for referencing 2D textures be named?
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci        UNRESOLVED:  Unfortunately, OpenGL is not particularly consistent
3135bd8deadSopenharmony_ci        with texture naming conventions.  However, most texture function
3145bd8deadSopenharmony_ci        names have followed the convention of using a verb- or adjective-
3155bd8deadSopenharmony_ci        specifier followed by the object type, e.g. : CopyTexImage,
3165bd8deadSopenharmony_ci        CompressedTexImage, DrawPixels, etc.
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci        Therefore, this issue can be broken into two sub-issues: naming
3195bd8deadSopenharmony_ci        the verb or adjective and naming the object type.
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci        The following options were considered for the verb or adjective:
3225bd8deadSopenharmony_ci          a1)  Reference / Referenced
3235bd8deadSopenharmony_ci          a2)  EGLImageTarget
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci        Reference (a1) is the verb for creating EGLImage targets from
3265bd8deadSopenharmony_ci        EGLImages (defined in the EGL_OES_image specification), but
3275bd8deadSopenharmony_ci        "Reference<blah>" might confuse some developers, since the
3285bd8deadSopenharmony_ci        direction of the verb sounds backwards.
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci        Therefore, option (a2) has been selected, since the newly-
3315bd8deadSopenharmony_ci        specified texture object will be an EGLImage target.
3325bd8deadSopenharmony_ci
3335bd8deadSopenharmony_ci        And the following options were considered for the object type:
3345bd8deadSopenharmony_ci          b1)  TexImage
3355bd8deadSopenharmony_ci          b2)  Texture
3365bd8deadSopenharmony_ci          b3)  TextureObject
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci        (b1) follows the convention used by other texture specification
3395bd8deadSopenharmony_ci        functions; however, unlike {Copy,Compressed}TexImage, which
3405bd8deadSopenharmony_ci        specify only a single mipmap level-of-detail, the referencing
3415bd8deadSopenharmony_ci        entry point respecifies all image arrays in the texture object.
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci        (b2) and (b3) address the issues with (b1).  The OpenGL
3445bd8deadSopenharmony_ci        specification interchangeably uses "texture" and "texture object"
3455bd8deadSopenharmony_ci        to refer to the entire collection of image arrays, so either
3465bd8deadSopenharmony_ci        choice seems reasonable.  For brevity, (b2) has been used
3475bd8deadSopenharmony_ci        in this specification.
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci        Note, though, that eglBindTexImage also respecifies all image
3505bd8deadSopenharmony_ci        arrays in the texture object, but it does not change the
3515bd8deadSopenharmony_ci        TexImage suffix.
3525bd8deadSopenharmony_ci
3535bd8deadSopenharmony_ci        Another option would be to treat the referencing function as an
3545bd8deadSopenharmony_ci        attachment, rather than a specification, in which case a more
3555bd8deadSopenharmony_ci        appropriate name would follow the convention used in the
3565bd8deadSopenharmony_ci        OES_framebuffer_object extension, such as Texture2DeglImageOES.
3575bd8deadSopenharmony_ci
3585bd8deadSopenharmony_ci    6.  What should the entry point for referencing renderbuffers be named?
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci        UNRESOLVED:  There are far fewer conventions for renderbuffer
3615bd8deadSopenharmony_ci        function names than there are for textures, so the naming for
3625bd8deadSopenharmony_ci        this function should use whichever convention is selected
3635bd8deadSopenharmony_ci        to resolve Issue 5.  Given the current selections in that issue,
3645bd8deadSopenharmony_ci        EGLImageTargetRenderbufferStorage is being used.
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ciDependencies on EGL_KHR_image, EGL_KHR_image_base, and EGL 1.2
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci    If EGL 1.2 is not supported, or if neither the EGL_OES_image nor
3695bd8deadSopenharmony_ci    EGL_OES_image_base extensions is supported, all discussion of
3705bd8deadSopenharmony_ci    EGLImages should be ignored, and any calls to either
3715bd8deadSopenharmony_ci    EGLImageTargetTexture2DOES or EGLImageTargetRenderbufferStorageOES
3725bd8deadSopenharmony_ci    should generate the error INVALID_OPERATION.
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ciDependencies on OES_framebuffer_object
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci    If the OES_framebuffer_object extension is not supported, all
3775bd8deadSopenharmony_ci    discussion of renderbuffers should be ignored, and all calls to
3785bd8deadSopenharmony_ci    EGLImageTargetRenderbufferStorageOES should generate the error
3795bd8deadSopenharmony_ci    INVALID_OPERATION.
3805bd8deadSopenharmony_ci
3815bd8deadSopenharmony_ciRevision History
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci    #8 (April 23, 2015, Jon Leech)
3845bd8deadSopenharmony_ci       - Fix typo EGLImageTargetTexImage2DOES -> EGLImageTargetTexture2DOES
3855bd8deadSopenharmony_ci         (Bug 8114).
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ci    #7 (April 17, 2014, Jon Leech)
3885bd8deadSopenharmony_ci       - Add missing error for invalid <image> parameter to
3895bd8deadSopenharmony_ci         EGLImageTargetTexture2DOES (Bug 5164).
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    #6 (April 1, 2009, Acorn Pooley, Jon Leech)
3925bd8deadSopenharmony_ci       - Fix dependancy typo. Mention EGL_KHR_image_base. Correct
3935bd8deadSopenharmony_ci         spelling of EGL_KHR_image and refer to alternate
3945bd8deadSopenharmony_ci         EGL_KHR_image_base. Correct dependency on EGL from 1.1 to 1.2.
3955bd8deadSopenharmony_ci         Change filename in the registry to correspond to capitalization
3965bd8deadSopenharmony_ci         of the extension string. Don't update the version number
3975bd8deadSopenharmony_ci         further until all internal edits are completed.
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci    #5 (April 1, 2009, Jon Leech)
4005bd8deadSopenharmony_ci       - Added more overview pointing to companion EGL extensions.
4015bd8deadSopenharmony_ci
4025bd8deadSopenharmony_ci    #4 (April 22, 2007, Jon Leech)
4035bd8deadSopenharmony_ci       - Added updated 'Status' to reflect OpenKODE 1.0 Provisional.
4045bd8deadSopenharmony_ci
4055bd8deadSopenharmony_ci    #3  (December 14, 2006)
4065bd8deadSopenharmony_ci       - Changed requirement to egl 1.2 to include EGLClientBuffer type.
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci    #2  (October 20, 2006)
4095bd8deadSopenharmony_ci       - Reworded phrasing describing undefined pixel data as a
4105bd8deadSopenharmony_ci         result of EGLImageTarget* commands
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci    #1 - Original Release
413