15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_direct_state_access
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_direct_state_access
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Graham Sellers (graham.sellers 'at' amd.com)
125bd8deadSopenharmony_ci    Christophe Riccio (christophe.riccio 'at' unity3d.com)
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContributors
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Graham Sellers, AMD
175bd8deadSopenharmony_ci    Piers Daniell, NVIDIA
185bd8deadSopenharmony_ci    Christophe Riccio, Unity
195bd8deadSopenharmony_ci    Daniel Rákos, AMD
205bd8deadSopenharmony_ci    Daniel Koch, NVIDIA
215bd8deadSopenharmony_ci    Pat Brown, NVIDIA
225bd8deadSopenharmony_ci    Jon Leech
235bd8deadSopenharmony_ci    Members of the OpenGL ARB working group
245bd8deadSopenharmony_ci    Contributors to GL_EXT_direct_state_access
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ciNotice
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ci    Copyright (c) 2014 The Khronos Group Inc. Copyright terms at
295bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ciSpecification Update Policy
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
345bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
355bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
365bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
375bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
385bd8deadSopenharmony_ci    described in more detail at
395bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ciStatus
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    Complete.
445bd8deadSopenharmony_ci    Approved by the ARB on June 26, 2014.
455bd8deadSopenharmony_ci    Ratified by the Khronos Board of Promoters on August 7, 2014.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciVersion
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    Last Modified Date:         September 17, 2019
505bd8deadSopenharmony_ci    Author Revision:            51
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ciNumber
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    ARB Extension #164
555bd8deadSopenharmony_ci
565bd8deadSopenharmony_ciDependencies
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci    OpenGL 2.0 is required.
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    This extension is written against the OpenGL 4.4 (core) specification.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ciOverview
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    In unextended OpenGL, most mutation of state contained in objects is through
655bd8deadSopenharmony_ci    an indirection known as a binding. Objects are attached to a context (either
665bd8deadSopenharmony_ci    directly or indirectly via a container) and then commands to modify or
675bd8deadSopenharmony_ci    query their state are issued on that context, indirecting through its
685bd8deadSopenharmony_ci    attachments and into the underlying object. This is known as `bind-to-edit'.
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    This extension derives from the GL_EXT_direct_state_access extension, which
715bd8deadSopenharmony_ci    added accessors for most state on most objects, allowing it to be queried
725bd8deadSopenharmony_ci    and modified without the object needing to be bound to a context. In cases
735bd8deadSopenharmony_ci    where a single property of an object is to be modified, directly accessing
745bd8deadSopenharmony_ci    its state can be more efficient than binding the object to the context and
755bd8deadSopenharmony_ci    then indirecting through it. Further, directly accessing the state of
765bd8deadSopenharmony_ci    objects through their names rather than by bind-to-edit does not disturb
775bd8deadSopenharmony_ci    the bindings of the current context, which is useful for tools, middleware
785bd8deadSopenharmony_ci    and other applications that are unaware of the outer state but it can also
795bd8deadSopenharmony_ci    avoid cases of redundant state changes.
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci    There are several subtle differences between this extension and the older
825bd8deadSopenharmony_ci    GL_EXT_direct_state_access extension. First, this extension only expands
835bd8deadSopenharmony_ci    functionality that still exists in core profile OpenGL. Second, any function
845bd8deadSopenharmony_ci    that only partially avoids bind-to-edit (for example, explicitly specifying
855bd8deadSopenharmony_ci    a texture unit, bypassing the active texture selector but still indirecting
865bd8deadSopenharmony_ci    through a texture binding) has been omitted. Finally, the original extension
875bd8deadSopenharmony_ci    effectively allowed any function to create new objects whereas in unextended
885bd8deadSopenharmony_ci    OpenGL, only binding functions created objects (bind-to-create), even if
895bd8deadSopenharmony_ci    their names were obtained through one of the glGen* functions. This
905bd8deadSopenharmony_ci    extension does not allow on-the-spot creation of objects. Rather than rely
915bd8deadSopenharmony_ci    on bind-to-create (which would defeat the purpose of the extension), we add
925bd8deadSopenharmony_ci    glCreate* functions that produce new names that represent state vectors
935bd8deadSopenharmony_ci    initialized to their default values. Due to this last change, several
945bd8deadSopenharmony_ci    functions no longer require their <target> parameters, and so where
955bd8deadSopenharmony_ci    applicable, this parameter is absent from this extension.
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ciNew Procedures and Functions
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    /* Transform Feedback object functions */
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ci    void CreateTransformFeedbacks(sizei n, uint *ids);
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci    void TransformFeedbackBufferBase(uint xfb, uint index,
1045bd8deadSopenharmony_ci                                     uint buffer);
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    void TransformFeedbackBufferRange(uint xfb, uint index,
1075bd8deadSopenharmony_ci                                      uint buffer, intptr offset, sizeiptr size);
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci    void GetTransformFeedbackiv(uint xfb, enum pname, int *param);
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    void GetTransformFeedbacki_v(uint xfb, enum pname, uint index,
1125bd8deadSopenharmony_ci                                 int *param);
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci    void GetTransformFeedbacki64_v(uint xfb, enum pname, uint index,
1155bd8deadSopenharmony_ci                                   int64 *param);
1165bd8deadSopenharmony_ci
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    /* Buffer object functions */
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    void CreateBuffers(sizei n, uint *buffers);
1215bd8deadSopenharmony_ci
1225bd8deadSopenharmony_ci    void NamedBufferStorage(uint buffer,
1235bd8deadSopenharmony_ci                            sizeiptr size,
1245bd8deadSopenharmony_ci                            const void *data,
1255bd8deadSopenharmony_ci                            bitfield flags);
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ci    void NamedBufferData(uint buffer,
1285bd8deadSopenharmony_ci                         sizeiptr size,
1295bd8deadSopenharmony_ci                         const void *data,
1305bd8deadSopenharmony_ci                         enum usage);
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci    void NamedBufferSubData(uint buffer,
1335bd8deadSopenharmony_ci                            intptr offset, sizeiptr size,
1345bd8deadSopenharmony_ci                            const void *data);
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci    void CopyNamedBufferSubData(uint readBuffer, uint writeBuffer,
1375bd8deadSopenharmony_ci                                intptr readOffset, intptr writeOffset,
1385bd8deadSopenharmony_ci                                sizeiptr size);
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci    void ClearNamedBufferData(uint buffer,
1415bd8deadSopenharmony_ci                              enum internalformat,
1425bd8deadSopenharmony_ci                              enum format,
1435bd8deadSopenharmony_ci                              enum type,
1445bd8deadSopenharmony_ci                              const void *data);
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ci    void ClearNamedBufferSubData(uint buffer,
1475bd8deadSopenharmony_ci                                 enum internalformat,
1485bd8deadSopenharmony_ci                                 intptr offset,
1495bd8deadSopenharmony_ci                                 sizeiptr size,
1505bd8deadSopenharmony_ci                                 enum format,
1515bd8deadSopenharmony_ci                                 enum type,
1525bd8deadSopenharmony_ci                                 const void *data);
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    void *MapNamedBuffer(uint buffer, enum access);
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci    void *MapNamedBufferRange(uint buffer,
1575bd8deadSopenharmony_ci                              intptr offset, sizeiptr length,
1585bd8deadSopenharmony_ci                              bitfield access);
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci    boolean UnmapNamedBuffer(uint buffer);
1615bd8deadSopenharmony_ci
1625bd8deadSopenharmony_ci    void FlushMappedNamedBufferRange(uint buffer, intptr offset,
1635bd8deadSopenharmony_ci                                     sizeiptr length);
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ci    void GetNamedBufferParameteriv(uint buffer,
1665bd8deadSopenharmony_ci                                   enum pname, int *params);
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci    void GetNamedBufferParameteri64v(uint buffer,
1695bd8deadSopenharmony_ci                                   enum pname, int64 *params);
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci    void GetNamedBufferPointerv(uint buffer,
1725bd8deadSopenharmony_ci                                enum pname, void **params);
1735bd8deadSopenharmony_ci
1745bd8deadSopenharmony_ci    void GetNamedBufferSubData(uint buffer,
1755bd8deadSopenharmony_ci                               intptr offset, sizeiptr size, void *data);
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci    /* Framebuffer object functions */
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci    void CreateFramebuffers(sizei n, uint *framebuffers);
1815bd8deadSopenharmony_ci
1825bd8deadSopenharmony_ci    void NamedFramebufferRenderbuffer(uint framebuffer,
1835bd8deadSopenharmony_ci                                      enum attachment,
1845bd8deadSopenharmony_ci                                      enum renderbuffertarget,
1855bd8deadSopenharmony_ci                                      uint renderbuffer);
1865bd8deadSopenharmony_ci
1875bd8deadSopenharmony_ci    void NamedFramebufferParameteri(uint framebuffer,
1885bd8deadSopenharmony_ci                                    enum pname,
1895bd8deadSopenharmony_ci                                    int param);
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ci    void NamedFramebufferTexture(uint framebuffer,
1925bd8deadSopenharmony_ci                                 enum attachment,
1935bd8deadSopenharmony_ci                                 uint texture, int level);
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    void NamedFramebufferTextureLayer(uint framebuffer,
1965bd8deadSopenharmony_ci                                      enum attachment,
1975bd8deadSopenharmony_ci                                      uint texture, int level, int layer);
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci    void NamedFramebufferDrawBuffer(uint framebuffer, enum mode);
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci    void NamedFramebufferDrawBuffers(uint framebuffer, sizei n,
2025bd8deadSopenharmony_ci                                     const enum *bufs);
2035bd8deadSopenharmony_ci
2045bd8deadSopenharmony_ci    void NamedFramebufferReadBuffer(uint framebuffer, enum mode);
2055bd8deadSopenharmony_ci
2065bd8deadSopenharmony_ci    void InvalidateNamedFramebufferData(uint framebuffer,
2075bd8deadSopenharmony_ci                                        sizei numAttachments,
2085bd8deadSopenharmony_ci                                        const enum *attachments);
2095bd8deadSopenharmony_ci
2105bd8deadSopenharmony_ci    void InvalidateNamedFramebufferSubData(uint framebuffer,
2115bd8deadSopenharmony_ci                                           sizei numAttachments,
2125bd8deadSopenharmony_ci                                           const enum *attachments,
2135bd8deadSopenharmony_ci                                           int x, int y,
2145bd8deadSopenharmony_ci                                           sizei width, sizei height);
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci    void ClearNamedFramebufferiv(uint framebuffer, enum buffer,
2175bd8deadSopenharmony_ci                                 int drawbuffer, const int *value);
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci    void ClearNamedFramebufferuiv(uint framebuffer, enum buffer,
2205bd8deadSopenharmony_ci                                  int drawbuffer, const uint *value);
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci    void ClearNamedFramebufferfv(uint framebuffer, enum buffer,
2235bd8deadSopenharmony_ci                                 int drawbuffer, const float *value);
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci    void ClearNamedFramebufferfi(uint framebuffer, enum buffer,
2265bd8deadSopenharmony_ci                                 int drawbuffer, float depth, int stencil);
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci    void BlitNamedFramebuffer(uint readFramebuffer,
2295bd8deadSopenharmony_ci                              uint drawFramebuffer,
2305bd8deadSopenharmony_ci                              int srcX0,
2315bd8deadSopenharmony_ci                              int srcY0,
2325bd8deadSopenharmony_ci                              int srcX1,
2335bd8deadSopenharmony_ci                              int srcY1,
2345bd8deadSopenharmony_ci                              int dstX0,
2355bd8deadSopenharmony_ci                              int dstY0,
2365bd8deadSopenharmony_ci                              int dstX1,
2375bd8deadSopenharmony_ci                              int dstY1,
2385bd8deadSopenharmony_ci                              bitfield mask,
2395bd8deadSopenharmony_ci                              enum filter);
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci    enum CheckNamedFramebufferStatus(uint framebuffer, enum target);
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci    void GetNamedFramebufferParameteriv(uint framebuffer,
2445bd8deadSopenharmony_ci                                        enum pname,
2455bd8deadSopenharmony_ci                                        int *param);
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci    void GetNamedFramebufferAttachmentParameteriv(uint framebuffer,
2485bd8deadSopenharmony_ci                                                  enum attachment,
2495bd8deadSopenharmony_ci                                                  enum pname,
2505bd8deadSopenharmony_ci                                                  int *params);
2515bd8deadSopenharmony_ci
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    /* Renderbuffer object functions */
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci    void CreateRenderbuffers(sizei n, uint *renderbuffers);
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci    void NamedRenderbufferStorage(uint renderbuffer,
2585bd8deadSopenharmony_ci                                  enum internalformat,
2595bd8deadSopenharmony_ci                                  sizei width, sizei height);
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci    void NamedRenderbufferStorageMultisample(uint renderbuffer,
2625bd8deadSopenharmony_ci                                             sizei samples,
2635bd8deadSopenharmony_ci                                             enum internalformat,
2645bd8deadSopenharmony_ci                                             sizei width, sizei height);
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ci    void GetNamedRenderbufferParameteriv(uint renderbuffer,
2675bd8deadSopenharmony_ci                                         enum pname, int *params);
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci    /* Texture object functions */
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ci    void CreateTextures(enum target, sizei n, uint *textures);
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci    void TextureBuffer(uint texture,
2755bd8deadSopenharmony_ci                       enum internalformat, uint buffer);
2765bd8deadSopenharmony_ci
2775bd8deadSopenharmony_ci    void TextureBufferRange(uint texture,
2785bd8deadSopenharmony_ci                            enum internalformat, uint buffer,
2795bd8deadSopenharmony_ci                            intptr offset, sizeiptr size);
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ci    void TextureStorage1D(uint texture, sizei levels,
2825bd8deadSopenharmony_ci                          enum internalformat,
2835bd8deadSopenharmony_ci                          sizei width);
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci    void TextureStorage2D(uint texture, sizei levels,
2865bd8deadSopenharmony_ci                          enum internalformat,
2875bd8deadSopenharmony_ci                          sizei width, sizei height);
2885bd8deadSopenharmony_ci
2895bd8deadSopenharmony_ci    void TextureStorage3D(uint texture, sizei levels,
2905bd8deadSopenharmony_ci                          enum internalformat,
2915bd8deadSopenharmony_ci                          sizei width, sizei height, sizei depth);
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    void TextureStorage2DMultisample(uint texture, sizei samples,
2945bd8deadSopenharmony_ci                                     enum internalformat, sizei width,
2955bd8deadSopenharmony_ci                                     sizei height,
2965bd8deadSopenharmony_ci                                     boolean fixedsamplelocations);
2975bd8deadSopenharmony_ci
2985bd8deadSopenharmony_ci    void TextureStorage3DMultisample(uint texture, sizei samples,
2995bd8deadSopenharmony_ci                                     enum internalformat, sizei width,
3005bd8deadSopenharmony_ci                                     sizei height, sizei depth,
3015bd8deadSopenharmony_ci                                     boolean fixedsamplelocations);
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ci    void TextureSubImage1D(uint texture, int level,
3045bd8deadSopenharmony_ci                           int xoffset, sizei width,
3055bd8deadSopenharmony_ci                           enum format, enum type,
3065bd8deadSopenharmony_ci                           const void *pixels);
3075bd8deadSopenharmony_ci
3085bd8deadSopenharmony_ci    void TextureSubImage2D(uint texture, int level,
3095bd8deadSopenharmony_ci                           int xoffset, int yoffset,
3105bd8deadSopenharmony_ci                           sizei width, sizei height,
3115bd8deadSopenharmony_ci                           enum format, enum type,
3125bd8deadSopenharmony_ci                           const void *pixels);
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ci    void TextureSubImage3D(uint texture, int level,
3155bd8deadSopenharmony_ci                           int xoffset, int yoffset, int zoffset,
3165bd8deadSopenharmony_ci                           sizei width, sizei height, sizei depth,
3175bd8deadSopenharmony_ci                           enum format, enum type,
3185bd8deadSopenharmony_ci                           const void *pixels);
3195bd8deadSopenharmony_ci
3205bd8deadSopenharmony_ci    void CompressedTextureSubImage1D(uint texture, int level,
3215bd8deadSopenharmony_ci                                     int xoffset,
3225bd8deadSopenharmony_ci                                     sizei width,
3235bd8deadSopenharmony_ci                                     enum format,
3245bd8deadSopenharmony_ci                                     sizei imageSize, const void *data);
3255bd8deadSopenharmony_ci
3265bd8deadSopenharmony_ci    void CompressedTextureSubImage2D(uint texture, int level,
3275bd8deadSopenharmony_ci                                     int xoffset, int yoffset,
3285bd8deadSopenharmony_ci                                     sizei width, sizei height,
3295bd8deadSopenharmony_ci                                     enum format,
3305bd8deadSopenharmony_ci                                     sizei imageSize, const void *data);
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ci    void CompressedTextureSubImage3D(uint texture, int level,
3335bd8deadSopenharmony_ci                                     int xoffset, int yoffset, int zoffset,
3345bd8deadSopenharmony_ci                                     sizei width, sizei height, sizei depth,
3355bd8deadSopenharmony_ci                                     enum format,
3365bd8deadSopenharmony_ci                                     sizei imageSize, const void *data);
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci    void CopyTextureSubImage1D(uint texture,
3395bd8deadSopenharmony_ci                               int level,
3405bd8deadSopenharmony_ci                               int xoffset,
3415bd8deadSopenharmony_ci                               int x, int y,
3425bd8deadSopenharmony_ci                               sizei width);
3435bd8deadSopenharmony_ci
3445bd8deadSopenharmony_ci    void CopyTextureSubImage2D(uint texture,
3455bd8deadSopenharmony_ci                               int level,
3465bd8deadSopenharmony_ci                               int xoffset, int yoffset,
3475bd8deadSopenharmony_ci                               int x, int y,
3485bd8deadSopenharmony_ci                               sizei width, sizei height);
3495bd8deadSopenharmony_ci
3505bd8deadSopenharmony_ci    void CopyTextureSubImage3D(uint texture,
3515bd8deadSopenharmony_ci                               int level,
3525bd8deadSopenharmony_ci                               int xoffset, int yoffset, int zoffset,
3535bd8deadSopenharmony_ci                               int x, int y,
3545bd8deadSopenharmony_ci                               sizei width, sizei height);
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci    void TextureParameterf(uint texture,
3575bd8deadSopenharmony_ci                           enum pname, float param);
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ci    void TextureParameterfv(uint texture,
3605bd8deadSopenharmony_ci                            enum pname, const float *param);
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci    void TextureParameteri(uint texture,
3635bd8deadSopenharmony_ci                           enum pname, int param);
3645bd8deadSopenharmony_ci
3655bd8deadSopenharmony_ci    void TextureParameterIiv(uint texture,
3665bd8deadSopenharmony_ci                             enum pname, const int *params);
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci    void TextureParameterIuiv(uint texture,
3695bd8deadSopenharmony_ci                              enum pname, const uint *params);
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci    void TextureParameteriv(uint texture,
3725bd8deadSopenharmony_ci                            enum pname, const int *param);
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ci    void GenerateTextureMipmap(uint texture);
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci    void BindTextureUnit(uint unit, uint texture);
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    void GetTextureImage(uint texture, int level,
3795bd8deadSopenharmony_ci                         enum format, enum type,
3805bd8deadSopenharmony_ci                         sizei bufSize,
3815bd8deadSopenharmony_ci                         void *pixels);
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci    void GetCompressedTextureImage(uint texture, int level,
3845bd8deadSopenharmony_ci                                   sizei bufSize,
3855bd8deadSopenharmony_ci                                   void *pixels);
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ci    void GetTextureLevelParameterfv(uint texture,
3885bd8deadSopenharmony_ci                                    int level,
3895bd8deadSopenharmony_ci                                    enum pname, float *params);
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    void GetTextureLevelParameteriv(uint texture,
3925bd8deadSopenharmony_ci                                    int level,
3935bd8deadSopenharmony_ci                                    enum pname, int *params);
3945bd8deadSopenharmony_ci
3955bd8deadSopenharmony_ci    void GetTextureParameterfv(uint texture,
3965bd8deadSopenharmony_ci                               enum pname, float *params);
3975bd8deadSopenharmony_ci
3985bd8deadSopenharmony_ci    void GetTextureParameterIiv(uint texture,
3995bd8deadSopenharmony_ci                                enum pname, int *params);
4005bd8deadSopenharmony_ci
4015bd8deadSopenharmony_ci    void GetTextureParameterIuiv(uint texture,
4025bd8deadSopenharmony_ci                                 enum pname, uint *params);
4035bd8deadSopenharmony_ci
4045bd8deadSopenharmony_ci    void GetTextureParameteriv(uint texture,
4055bd8deadSopenharmony_ci                               enum pname, int *params);
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci    /* Vertex Array object functions */
4095bd8deadSopenharmony_ci
4105bd8deadSopenharmony_ci    void CreateVertexArrays(sizei n, uint *arrays);
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci    void DisableVertexArrayAttrib(uint vaobj, uint index);
4135bd8deadSopenharmony_ci
4145bd8deadSopenharmony_ci    void EnableVertexArrayAttrib(uint vaobj, uint index);
4155bd8deadSopenharmony_ci
4165bd8deadSopenharmony_ci    void VertexArrayElementBuffer(uint vaobj, uint buffer);
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci    void VertexArrayVertexBuffer(uint vaobj, uint bindingindex, uint buffer,
4195bd8deadSopenharmony_ci                                 intptr offset, sizei stride);
4205bd8deadSopenharmony_ci
4215bd8deadSopenharmony_ci    void VertexArrayVertexBuffers(uint vaobj, uint first, sizei count,
4225bd8deadSopenharmony_ci                                  const uint *buffers,
4235bd8deadSopenharmony_ci                                  const intptr *offsets,
4245bd8deadSopenharmony_ci                                  const sizei *strides);
4255bd8deadSopenharmony_ci
4265bd8deadSopenharmony_ci    void VertexArrayAttribFormat(uint vaobj, uint attribindex, int size,
4275bd8deadSopenharmony_ci                                 enum type, boolean normalized,
4285bd8deadSopenharmony_ci                                 uint relativeoffset);
4295bd8deadSopenharmony_ci
4305bd8deadSopenharmony_ci    void VertexArrayAttribIFormat(uint vaobj, uint attribindex, int size,
4315bd8deadSopenharmony_ci                                  enum type, uint relativeoffset);
4325bd8deadSopenharmony_ci
4335bd8deadSopenharmony_ci    void VertexArrayAttribLFormat(uint vaobj, uint attribindex, int size,
4345bd8deadSopenharmony_ci                                  enum type, uint relativeoffset);
4355bd8deadSopenharmony_ci
4365bd8deadSopenharmony_ci    void VertexArrayAttribBinding(uint vaobj, uint attribindex,
4375bd8deadSopenharmony_ci                                  uint bindingindex);
4385bd8deadSopenharmony_ci
4395bd8deadSopenharmony_ci    void VertexArrayBindingDivisor(uint vaobj, uint bindingindex,
4405bd8deadSopenharmony_ci                                   uint divisor);
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ci    void GetVertexArrayiv(uint vaobj,
4435bd8deadSopenharmony_ci                          enum pname,
4445bd8deadSopenharmony_ci                          int *param);
4455bd8deadSopenharmony_ci
4465bd8deadSopenharmony_ci    void GetVertexArrayIndexediv(uint vaobj,
4475bd8deadSopenharmony_ci                                 uint index,
4485bd8deadSopenharmony_ci                                 enum pname,
4495bd8deadSopenharmony_ci                                 int *param);
4505bd8deadSopenharmony_ci
4515bd8deadSopenharmony_ci    void GetVertexArrayIndexed64iv(uint vaobj,
4525bd8deadSopenharmony_ci                                   uint index,
4535bd8deadSopenharmony_ci                                   enum pname,
4545bd8deadSopenharmony_ci                                   int64 *param);
4555bd8deadSopenharmony_ci
4565bd8deadSopenharmony_ci    /* Sampler object functions */
4575bd8deadSopenharmony_ci
4585bd8deadSopenharmony_ci    void CreateSamplers(sizei n, uint *samplers);
4595bd8deadSopenharmony_ci
4605bd8deadSopenharmony_ci
4615bd8deadSopenharmony_ci    /* Program Pipeline object functions */
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci    void CreateProgramPipelines(sizei n, uint *pipelines);
4645bd8deadSopenharmony_ci
4655bd8deadSopenharmony_ci
4665bd8deadSopenharmony_ci    /* Query object functions */
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci    void CreateQueries(enum target, sizei n, uint *ids);
4695bd8deadSopenharmony_ci    void GetQueryBufferObjectiv(uint id, uint buffer, enum pname,
4705bd8deadSopenharmony_ci                                intptr offset);
4715bd8deadSopenharmony_ci    void GetQueryBufferObjectuiv(uint id, uint buffer, enum pname,
4725bd8deadSopenharmony_ci                                 intptr offset);
4735bd8deadSopenharmony_ci    void GetQueryBufferObjecti64v(uint id, uint buffer, enum pname,
4745bd8deadSopenharmony_ci                                  intptr offset);
4755bd8deadSopenharmony_ci    void GetQueryBufferObjectui64v(uint id, uint buffer, enum pname,
4765bd8deadSopenharmony_ci                                   intptr offset);
4775bd8deadSopenharmony_ci
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ciNew Tokens
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetTextureParameter{if}v and
4825bd8deadSopenharmony_ci    GetTextureParameterI{i ui}v:
4835bd8deadSopenharmony_ci
4845bd8deadSopenharmony_ci        TEXTURE_TARGET                                      0x1006
4855bd8deadSopenharmony_ci
4865bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetQueryObjectiv:
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci        QUERY_TARGET                                        0x82EA
4895bd8deadSopenharmony_ci
4905bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetIntegeri_v:
4915bd8deadSopenharmony_ci
4925bd8deadSopenharmony_ci        TEXTURE_BINDING_1D                                  <existing>
4935bd8deadSopenharmony_ci        TEXTURE_BINDING_1D_ARRAY                            <existing>
4945bd8deadSopenharmony_ci        TEXTURE_BINDING_2D                                  <existing>
4955bd8deadSopenharmony_ci        TEXTURE_BINDING_2D_ARRAY                            <existing>
4965bd8deadSopenharmony_ci        TEXTURE_BINDING_2D_MULTISAMPLE                      <existing>
4975bd8deadSopenharmony_ci        TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY                <existing>
4985bd8deadSopenharmony_ci        TEXTURE_BINDING_3D                                  <existing>
4995bd8deadSopenharmony_ci        TEXTURE_BINDING_BUFFER                              <existing>
5005bd8deadSopenharmony_ci        TEXTURE_BINDING_CUBE_MAP                            <existing>
5015bd8deadSopenharmony_ci        TEXTURE_BINDING_CUBE_MAP_ARRAY                      <existing>
5025bd8deadSopenharmony_ci        TEXTURE_BINDING_RECTANGLE                           <existing>
5035bd8deadSopenharmony_ci
5045bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 4.4 (core) Specification (OpenGL
5055bd8deadSopenharmony_ciFundamentals)
5065bd8deadSopenharmony_ci
5075bd8deadSopenharmony_ci    Replace the final paragraph of Section 2.5.1.1, "Name Spaces, Name
5085bd8deadSopenharmony_ci    Generation and Object Creation" with the following:
5095bd8deadSopenharmony_ci
5105bd8deadSopenharmony_ci    Objects may also be created directly by functions that return a new
5115bd8deadSopenharmony_ci    name or names representing a freshly initialized object. Some functions
5125bd8deadSopenharmony_ci    return a single object name directly whereas others are able to create a
5135bd8deadSopenharmony_ci    large number of new objects, returning their names in an array. Examples of
5145bd8deadSopenharmony_ci    the former are CreateProgram for program objects and FenceSync for fence
5155bd8deadSopenharmony_ci    sync objects. Examples of the latter are CreateBuffers, CreateTextures and
5165bd8deadSopenharmony_ci    CreateVertexArrays for buffers, textures and vertex arrays, respectively.
5175bd8deadSopenharmony_ci
5185bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 4.4 (core) Specification (Event Model)
5195bd8deadSopenharmony_ci
5205bd8deadSopenharmony_ci    Modifications to Section 4.2, "Query Objects and Asynchronous Queries"
5215bd8deadSopenharmony_ci
5225bd8deadSopenharmony_ci    (Insert the following after the description of GenQueries and before the
5235bd8deadSopenharmony_ci    introduction of DeleteQueries, p 39)
5245bd8deadSopenharmony_ci
5255bd8deadSopenharmony_ci    Query objects may also be created with the command
5265bd8deadSopenharmony_ci
5275bd8deadSopenharmony_ci        void CreateQueries(enum target, sizei n, uint *ids);
5285bd8deadSopenharmony_ci
5295bd8deadSopenharmony_ci    CreateQueries returns <n> previously unused query object names in <ids>,
5305bd8deadSopenharmony_ci    each representing a new query object with the specified <target>.
5315bd8deadSopenharmony_ci    <target> must be one of the query object targets described in section
5325bd8deadSopenharmony_ci    4.2.
5335bd8deadSopenharmony_ci
5345bd8deadSopenharmony_ci    The initial state of the resulting query object is that the result is
5355bd8deadSopenharmony_ci    marked available (the value of QUERY_RESULT_AVAILABLE) for the query
5365bd8deadSopenharmony_ci    object is TRUE) and the result value (the value of QUERY_RESULT) is
5375bd8deadSopenharmony_ci    zero.
5385bd8deadSopenharmony_ci
5395bd8deadSopenharmony_ci    Errors
5405bd8deadSopenharmony_ci
5415bd8deadSopenharmony_ci    An INVALID_ENUM error is generated if <target> is not one of the query
5425bd8deadSopenharmony_ci    object targets described in section 4.2.
5435bd8deadSopenharmony_ci
5445bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <n> is negative.
5455bd8deadSopenharmony_ci
5465bd8deadSopenharmony_ci
5475bd8deadSopenharmony_ci    (Modify the introduction of GetQueryObject* as follows, p. ??, to add
5485bd8deadSopenharmony_ci    the QUERY_TARGET <pname> and the GetQueryBufferObject* commands)
5495bd8deadSopenharmony_ci
5505bd8deadSopenharmony_ci    The state of a query object may be queried with the commands
5515bd8deadSopenharmony_ci
5525bd8deadSopenharmony_ci    void GetQueryObjectiv(uint id,enum pname,int *params);
5535bd8deadSopenharmony_ci    void GetQueryObjectuiv(uint id,enum pname,uint *params);
5545bd8deadSopenharmony_ci    void GetQueryObjecti64v(uint id,enum pname,int64 *params);
5555bd8deadSopenharmony_ci    void GetQueryObjectui64v(uint id,enum pname,uint64 *params);
5565bd8deadSopenharmony_ci    void GetQueryBufferObjectiv(uint id,uint buffer,enum pname,intptr offset);
5575bd8deadSopenharmony_ci    void GetQueryBufferObjectuiv(uint id,uint buffer,enum pname,intptr offset);
5585bd8deadSopenharmony_ci    void GetQueryBufferObjecti64v(uint id,uint buffer,enum pname,intptr offset);
5595bd8deadSopenharmony_ci    void GetQueryBufferObjectui64v(uint id,uint buffer,enum pname,intptr offset);
5605bd8deadSopenharmony_ci
5615bd8deadSopenharmony_ci    <id> is the name of a query object.
5625bd8deadSopenharmony_ci
5635bd8deadSopenharmony_ci    For GetQueryBufferObject*, <buffer> is the name of a buffer object and
5645bd8deadSopenharmony_ci    <offset> is an offset into <buffer> at which the queried value is
5655bd8deadSopenharmony_ci    written.
5665bd8deadSopenharmony_ci
5675bd8deadSopenharmony_ci    For GetQueryObject*, the queried value may be returned either in client
5685bd8deadSopenharmony_ci    memory or in a buffer object. If zero is bound to the current query
5695bd8deadSopenharmony_ci    result buffer binding point (see QUERY_RESULT in
5705bd8deadSopenharmony_ci    section~\ref{vert:vbo:bind), then <params> is treated as a pointer into
5715bd8deadSopenharmony_ci    client memory at which the queried value is written. Otherwise, <params>
5725bd8deadSopenharmony_ci    is treated as an offset into the query result buffer object at which the
5735bd8deadSopenharmony_ci    queried value is written.
5745bd8deadSopenharmony_ci
5755bd8deadSopenharmony_ci    There may be an indeterminate delay ...
5765bd8deadSopenharmony_ci
5775bd8deadSopenharmony_ci    If <pname> is QUERY_TARGET, then the target of the query object is
5785bd8deadSopenharmony_ci    returned as a single integer.
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci    If <pname> is QUERY_RESULT, then the query object's result value is
5815bd8deadSopenharmony_ci    returned as a single integer. If the value ...
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci    If <pname> is QUERY_RESULT_NO_WAIT, then the query object's result value
5845bd8deadSopenharmony_ci    is returned as a single integer if the result ...
5855bd8deadSopenharmony_ci
5865bd8deadSopenharmony_ci    If multiple queries are issued using the same object name prior to
5875bd8deadSopenharmony_ci    calling these query commands, the result and availability information
5885bd8deadSopenharmony_ci    returned ...
5895bd8deadSopenharmony_ci
5905bd8deadSopenharmony_ci    Errors
5915bd8deadSopenharmony_ci
5925bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <id> is not the name of a
5935bd8deadSopenharmony_ci    query object, or if the query object named by <id> is currently active.
5945bd8deadSopenharmony_ci
5955bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetQueryBufferObject* if
5965bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
5975bd8deadSopenharmony_ci
5985bd8deadSopenharmony_ci    An INVALID_ENUM error is generated if <pname> is not QUERY_RESULT,
5995bd8deadSopenharmony_ci    QUERY_RESULT_AVAILABLE, QUERY_RESULT_NO_WAIT, or QUERY_TARGET.
6005bd8deadSopenharmony_ci
6015bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the query writes to a buffer
6025bd8deadSopenharmony_ci    object, and the specified buffer offset would cause data to be written
6035bd8deadSopenharmony_ci    beyond the bounds of that buffer object.
6045bd8deadSopenharmony_ci
6055bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by GetQueryBufferObject* if <offset>
6065bd8deadSopenharmony_ci    is negative.
6075bd8deadSopenharmony_ci
6085bd8deadSopenharmony_ci
6095bd8deadSopenharmony_ci    Modifications to Section 4.3, "Time Queries"
6105bd8deadSopenharmony_ci
6115bd8deadSopenharmony_ci    (Add following the description of QueryCounter on p. 45)
6125bd8deadSopenharmony_ci
6135bd8deadSopenharmony_ci    A timer query object is created with the commands
6145bd8deadSopenharmony_ci
6155bd8deadSopenharmony_ci        void QueryCounter(uint id, enum target);
6165bd8deadSopenharmony_ci
6175bd8deadSopenharmony_ci    ... <id> must be the name of an existing query object of that type.
6185bd8deadSopenharmony_ci
6195bd8deadSopenharmony_ci    Alternatively, TIMESTAMP query objects can be created by calling
6205bd8deadSopenharmony_ci    CreateQueries with <target> set to TIMESTAMP.
6215bd8deadSopenharmony_ci
6225bd8deadSopenharmony_ci    When QueryCounter is called ... for that object is marked available.
6235bd8deadSopenharmony_ci    Timer queries can be used within a BeginQuery / EndQuery block where the
6245bd8deadSopenharmony_ci    <target> is ...
6255bd8deadSopenharmony_ci
6265bd8deadSopenharmony_ci    (Retain the remainder of the section.)
6275bd8deadSopenharmony_ci
6285bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 4.4 (core) Specification (Buffer Objects)
6295bd8deadSopenharmony_ci
6305bd8deadSopenharmony_ci    (Insert the following before the introduction of DeleteBuffers, p. 53)
6315bd8deadSopenharmony_ci
6325bd8deadSopenharmony_ci    In addition to generating an unused name and then binding it to a target
6335bd8deadSopenharmony_ci    with BindBuffer, a buffer object may also be created with the command
6345bd8deadSopenharmony_ci
6355bd8deadSopenharmony_ci        void CreateBuffers(sizei n, uint *buffers);
6365bd8deadSopenharmony_ci
6375bd8deadSopenharmony_ci    CreateBuffers returns <n> previously unused buffer names in <buffers>, each
6385bd8deadSopenharmony_ci    representing a new buffer object initialized as if it had been bound to
6395bd8deadSopenharmony_ci    an unspecified target.
6405bd8deadSopenharmony_ci
6415bd8deadSopenharmony_ci    Errors
6425bd8deadSopenharmony_ci
6435bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <n> is negative.
6445bd8deadSopenharmony_ci
6455bd8deadSopenharmony_ci
6465bd8deadSopenharmony_ci    Modifications to Section 6.2, "Creating and Modifying Buffer Object Data Stores"
6475bd8deadSopenharmony_ci
6485bd8deadSopenharmony_ci    (Modify the introduction of BufferStorage as follows, p. 59)
6495bd8deadSopenharmony_ci
6505bd8deadSopenharmony_ci    The data store of a buffer object is created with the commands
6515bd8deadSopenharmony_ci
6525bd8deadSopenharmony_ci        void BufferStorage(enum target, sizeiptr size,
6535bd8deadSopenharmony_ci                           const void *data, bitfield flags);
6545bd8deadSopenharmony_ci        void NamedBufferStorage(uint buffer, sizeiptr size,
6555bd8deadSopenharmony_ci                                const void *data, bitfield flags);
6565bd8deadSopenharmony_ci
6575bd8deadSopenharmony_ci    For BufferStorage, the data store belongs to the buffer object bound to
6585bd8deadSopenharmony_ci    <target>, which must be one of the values listed in table 6.1. For
6595bd8deadSopenharmony_ci    NamedBufferStorage, <buffer> is the name of the buffer object. <size> is
6605bd8deadSopenharmony_ci    the size of the data store in basic machine units, and <flags> contains
6615bd8deadSopenharmony_ci    a bitfield describing the intended usage of the data store.
6625bd8deadSopenharmony_ci
6635bd8deadSopenharmony_ci    The data store of the buffer object is allocated as a result of these
6645bd8deadSopenharmony_ci    commands, and cannot be de-allocated ...
6655bd8deadSopenharmony_ci
6665bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace references to
6675bd8deadSopenharmony_ci    "BufferStorage" with "*BufferStorage").
6685bd8deadSopenharmony_ci
6695bd8deadSopenharmony_ci    Errors
6705bd8deadSopenharmony_ci
6715bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedBufferStorage if
6725bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
6735bd8deadSopenharmony_ci
6745bd8deadSopenharmony_ci
6755bd8deadSopenharmony_ci    (Modify the introduction of BufferData as follows, p. 61)
6765bd8deadSopenharmony_ci
6775bd8deadSopenharmony_ci    A mutable data store may be allocated for a buffer object with the
6785bd8deadSopenharmony_ci    commands
6795bd8deadSopenharmony_ci
6805bd8deadSopenharmony_ci        void BufferData(enum target, sizeiptr size,
6815bd8deadSopenharmony_ci                        const void *data, enum usage);
6825bd8deadSopenharmony_ci        void NamedBufferData(uint buffer, sizeiptr size,
6835bd8deadSopenharmony_ci                             const void *data, enum usage);
6845bd8deadSopenharmony_ci
6855bd8deadSopenharmony_ci    For BufferData, the buffer object is that bound to <target>, which must
6865bd8deadSopenharmony_ci    be one of the targets listed in table 6.1. For NamedBufferData, <buffer>
6875bd8deadSopenharmony_ci    is the name of the buffer object.
6885bd8deadSopenharmony_ci
6895bd8deadSopenharmony_ci    <size> is the size of the data store in basic machine units, <data>
6905bd8deadSopenharmony_ci    points to the source data in client memory, and <usage> indicates the
6915bd8deadSopenharmony_ci    expected application usage pattern of the data store.
6925bd8deadSopenharmony_ci
6935bd8deadSopenharmony_ci    If <data> is non-NULL ...
6945bd8deadSopenharmony_ci
6955bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace references to
6965bd8deadSopenharmony_ci    "BufferData" with "*BufferData").
6975bd8deadSopenharmony_ci
6985bd8deadSopenharmony_ci    Errors
6995bd8deadSopenharmony_ci
7005bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedBufferData if <buffer>
7015bd8deadSopenharmony_ci    is not the name of an existing buffer object.
7025bd8deadSopenharmony_ci
7035bd8deadSopenharmony_ci
7045bd8deadSopenharmony_ci    (Modify the introduction of BufferSubData as follows, p. 63)
7055bd8deadSopenharmony_ci
7065bd8deadSopenharmony_ci    To modify some or all of the data contained in a buffer object's data
7075bd8deadSopenharmony_ci    store, the client may use the commands
7085bd8deadSopenharmony_ci
7095bd8deadSopenharmony_ci        void BufferSubData(enum target, intptr offset,
7105bd8deadSopenharmony_ci                           sizeiptr size, const void *data);
7115bd8deadSopenharmony_ci        void NamedBufferSubData(uint buffer, intptr offset,
7125bd8deadSopenharmony_ci                                sizeiptr size, const void *data);
7135bd8deadSopenharmony_ci
7145bd8deadSopenharmony_ci    For BufferSubData, <target> specifies the target to which the buffer
7155bd8deadSopenharmony_ci    object is bound, and must be one of the values listed in table 6.1. For
7165bd8deadSopenharmony_ci    NamedBufferSubData, <buffer> is the name of the buffer object.
7175bd8deadSopenharmony_ci
7185bd8deadSopenharmony_ci    (Retain the remainder of the section.)
7195bd8deadSopenharmony_ci
7205bd8deadSopenharmony_ci    Errors
7215bd8deadSopenharmony_ci
7225bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedBufferSubData if
7235bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
7245bd8deadSopenharmony_ci
7255bd8deadSopenharmony_ci
7265bd8deadSopenharmony_ci    Modifications to Section 6.2.1, "Clearing Buffer Object Data Stores"
7275bd8deadSopenharmony_ci
7285bd8deadSopenharmony_ci    (Modify the introduction of ClearBufferSubData as follows, p. 64)
7295bd8deadSopenharmony_ci
7305bd8deadSopenharmony_ci    To fill all or part of a buffer object's data store with constant
7315bd8deadSopenharmony_ci    values, use the commands
7325bd8deadSopenharmony_ci
7335bd8deadSopenharmony_ci        void ClearBufferSubData(enum target, enum internalformat, intptr offset,
7345bd8deadSopenharmony_ci                                sizeiptr size, enum format, enum type,
7355bd8deadSopenharmony_ci                                const void *data);
7365bd8deadSopenharmony_ci        void ClearNamedBufferSubData(uint buffer, enum internalformat,
7375bd8deadSopenharmony_ci                                     intptr offset, sizeiptr size, enum format,
7385bd8deadSopenharmony_ci                                     enum type, const void *data);
7395bd8deadSopenharmony_ci
7405bd8deadSopenharmony_ci    For ClearBufferSubData, the buffer object is that bound to <target>,
7415bd8deadSopenharmony_ci    which must be one of the values listed in table 6.1. For
7425bd8deadSopenharmony_ci    ClearNamedBufferSubData, <buffer> is the name of the buffer object.
7435bd8deadSopenharmony_ci
7445bd8deadSopenharmony_ci    (Retain the remainder of the section.)
7455bd8deadSopenharmony_ci
7465bd8deadSopenharmony_ci    Errors
7475bd8deadSopenharmony_ci
7485bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by ClearNamedBufferSubData if
7495bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
7505bd8deadSopenharmony_ci
7515bd8deadSopenharmony_ci
7525bd8deadSopenharmony_ci    (Retain the remainder of the section.)
7535bd8deadSopenharmony_ci
7545bd8deadSopenharmony_ci    (Modify the introduction of ClearBufferData as follows, p. 65)
7555bd8deadSopenharmony_ci
7565bd8deadSopenharmony_ci    The commands
7575bd8deadSopenharmony_ci
7585bd8deadSopenharmony_ci        void ClearBufferData(enum target, enum internalformat, enum format,
7595bd8deadSopenharmony_ci                             enum type, const void *data);
7605bd8deadSopenharmony_ci        void ClearNamedBufferData(uint buffer, enum internalformat, enum format,
7615bd8deadSopenharmony_ci                                  enum type, const void *data);
7625bd8deadSopenharmony_ci
7635bd8deadSopenharmony_ci    are respectively equivalent to
7645bd8deadSopenharmony_ci
7655bd8deadSopenharmony_ci        ClearBufferSubData(target, internalformat, 0, size,
7665bd8deadSopenharmony_ci                           format, type, data);
7675bd8deadSopenharmony_ci
7685bd8deadSopenharmony_ci    and
7695bd8deadSopenharmony_ci
7705bd8deadSopenharmony_ci        ClearNamedBufferSubData(buffer, internalformat, 0, size,
7715bd8deadSopenharmony_ci                                format, type, data);
7725bd8deadSopenharmony_ci
7735bd8deadSopenharmony_ci    where <size> is the value of BUFFER_SIZE for the destination buffer
7745bd8deadSopenharmony_ci    object.
7755bd8deadSopenharmony_ci
7765bd8deadSopenharmony_ci
7775bd8deadSopenharmony_ci    Modifications to Section 6.3, "Mapping and Unmapping Buffer Data"
7785bd8deadSopenharmony_ci
7795bd8deadSopenharmony_ci    (Modify the introduction of MapBufferRange as follows, p. 65)
7805bd8deadSopenharmony_ci
7815bd8deadSopenharmony_ci    All or part of the data store of a buffer object may be mapped into the
7825bd8deadSopenharmony_ci    client's address space with the commands
7835bd8deadSopenharmony_ci
7845bd8deadSopenharmony_ci        void *MapBufferRange(enum target, intptr offset, sizeiptr length,
7855bd8deadSopenharmony_ci                             bitfield acesss);
7865bd8deadSopenharmony_ci        void *MapNamedBufferRange(uint buffer, intptr offset, sizeiptr length,
7875bd8deadSopenharmony_ci                                  bitfield access);
7885bd8deadSopenharmony_ci
7895bd8deadSopenharmony_ci    For MapBufferRange, the buffer object is that bound to <target>, which
7905bd8deadSopenharmony_ci    and must be one of the values listed in table 6.1. For
7915bd8deadSopenharmony_ci    MapNamedBufferRange, <buffer> is the name of the buffer object.
7925bd8deadSopenharmony_ci
7935bd8deadSopenharmony_ci    <offset> and <length> indicate the range of data in the buffer object
7945bd8deadSopenharmony_ci    that is to be mapped, in terms of basic machine units. <access> is a
7955bd8deadSopenharmony_ci    bitfield containing flags which describe the requested mapping. These
7965bd8deadSopenharmony_ci    flags are described below.
7975bd8deadSopenharmony_ci
7985bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace further references
7995bd8deadSopenharmony_ci    to "MapBufferRange" with "Map*BufferRange").
8005bd8deadSopenharmony_ci
8015bd8deadSopenharmony_ci    Errors
8025bd8deadSopenharmony_ci
8035bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by MapNamedBufferRange if
8045bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
8055bd8deadSopenharmony_ci
8065bd8deadSopenharmony_ci
8075bd8deadSopenharmony_ci    (Modify the introduction of MapBuffer with the following, p. 69)
8085bd8deadSopenharmony_ci
8095bd8deadSopenharmony_ci    The entire data store of a buffer object can be mapped into the client's
8105bd8deadSopenharmony_ci    address space with the commands
8115bd8deadSopenharmony_ci
8125bd8deadSopenharmony_ci        void *MapBuffer(enum target, enum access);
8135bd8deadSopenharmony_ci        void *MapNamedBuffer(uint buffer, enum access);
8145bd8deadSopenharmony_ci
8155bd8deadSopenharmony_ci    These commands are respectively equivalent to
8165bd8deadSopenharmony_ci
8175bd8deadSopenharmony_ci        MapBufferRange(target, 0, length, flags);
8185bd8deadSopenharmony_ci
8195bd8deadSopenharmony_ci    and
8205bd8deadSopenharmony_ci
8215bd8deadSopenharmony_ci        MapNamedBufferRange(buffer, 0, length, flags);
8225bd8deadSopenharmony_ci
8235bd8deadSopenharmony_ci    where <length> is ...
8245bd8deadSopenharmony_ci
8255bd8deadSopenharmony_ci    (Retain remainder of the section.)
8265bd8deadSopenharmony_ci
8275bd8deadSopenharmony_ci
8285bd8deadSopenharmony_ci    (Modify the introduction of FlushMappedBufferRange as follows, p. 69)
8295bd8deadSopenharmony_ci
8305bd8deadSopenharmony_ci    If a buffer object is mapped with the MAP_FLUSH_EXPLICIT_BIT flag,
8315bd8deadSopenharmony_ci    modifications to the mapped range may be indicated with the commands
8325bd8deadSopenharmony_ci
8335bd8deadSopenharmony_ci        void FlushMappedBufferRange(enum target,
8345bd8deadSopenharmony_ci                                    intptr offset,
8355bd8deadSopenharmony_ci                                    sizeiptr length);
8365bd8deadSopenharmony_ci        void FlushMappedNamedBufferRange(uint buffer,
8375bd8deadSopenharmony_ci                                         intptr offset,
8385bd8deadSopenharmony_ci                                         sizeiptr length);
8395bd8deadSopenharmony_ci
8405bd8deadSopenharmony_ci    For FlushMappedBufferRange, the buffer object is that bound to <target>,
8415bd8deadSopenharmony_ci    which must be one of the targets listed in Table 6.1. For
8425bd8deadSopenharmony_ci    FlushMappedNamedBufferRange, <buffer> is the name of the buffer object.
8435bd8deadSopenharmony_ci
8445bd8deadSopenharmony_ci    <offset> and <length> ...
8455bd8deadSopenharmony_ci
8465bd8deadSopenharmony_ci    Retain the remainder of Section 6.3, but replace the two further references
8475bd8deadSopenharmony_ci    to FlushMappedBufferRange with "FlushMapped*BufferRange").
8485bd8deadSopenharmony_ci
8495bd8deadSopenharmony_ci    Errors
8505bd8deadSopenharmony_ci
8515bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by FlushMappedNamedBufferRange
8525bd8deadSopenharmony_ci    if <buffer> is not the name of an existing buffer object.
8535bd8deadSopenharmony_ci
8545bd8deadSopenharmony_ci
8555bd8deadSopenharmony_ci    Modifications to Section 6.3.1, "Unmapping Buffers"
8565bd8deadSopenharmony_ci
8575bd8deadSopenharmony_ci    (Modify the introduction of UnmapBuffer as follows, p. 70)
8585bd8deadSopenharmony_ci
8595bd8deadSopenharmony_ci    After the client ..., the mapping must be relinquished with one
8605bd8deadSopenharmony_ci    of the commands
8615bd8deadSopenharmony_ci
8625bd8deadSopenharmony_ci        boolean UnmapBuffer(enum target);
8635bd8deadSopenharmony_ci        boolean UnmapNamedBuffer(uint buffer);
8645bd8deadSopenharmony_ci
8655bd8deadSopenharmony_ci    For UnmapBuffer, the buffer object is that bound to <target>, which must
8665bd8deadSopenharmony_ci    be one of the targets listed in table 6.1. For UnmapNamedBuffer,
8675bd8deadSopenharmony_ci    <buffer> is the name of the buffer object.
8685bd8deadSopenharmony_ci
8695bd8deadSopenharmony_ci    Unmapping a mapped buffer ...
8705bd8deadSopenharmony_ci
8715bd8deadSopenharmony_ci    (Retain the remainder of Section 6.3.1, but replace any further
8725bd8deadSopenharmony_ci    reference to "UnmapBuffer" with "Unmap*Buffer").
8735bd8deadSopenharmony_ci
8745bd8deadSopenharmony_ci    If an error is generated, FALSE is returned.
8755bd8deadSopenharmony_ci
8765bd8deadSopenharmony_ci    Errors
8775bd8deadSopenharmony_ci
8785bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by UnmapNamedBuffer if <buffer>
8795bd8deadSopenharmony_ci    is not the name of an existing buffer object.
8805bd8deadSopenharmony_ci
8815bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the buffer object's
8825bd8deadSopenharmony_ci    data store is already in the unmapped state.
8835bd8deadSopenharmony_ci
8845bd8deadSopenharmony_ci
8855bd8deadSopenharmony_ci    Modifications to Section 6.6, "Copying Between Buffers"
8865bd8deadSopenharmony_ci
8875bd8deadSopenharmony_ci    (Modify the introduction of CopyBufferSubData as follows, p. 72)
8885bd8deadSopenharmony_ci
8895bd8deadSopenharmony_ci    All or part of the data store of a buffer object may be copied to the
8905bd8deadSopenharmony_ci    data store of another buffer object with the commands
8915bd8deadSopenharmony_ci
8925bd8deadSopenharmony_ci        void CopyBufferSubData(enum readTarget, enum writeTarget,
8935bd8deadSopenharmony_ci                               intptr readOffset, intptr writeOffset,
8945bd8deadSopenharmony_ci                               sizeiptr size);
8955bd8deadSopenharmony_ci        void CopyNamedBufferSubData(uint readBuffer, uint writeBuffer,
8965bd8deadSopenharmony_ci                                    intptr readOffset, intptr writeOffset,
8975bd8deadSopenharmony_ci                                    sizeiptr size);
8985bd8deadSopenharmony_ci
8995bd8deadSopenharmony_ci    For CopyBufferSubData, <readTarget> and <writeTarget> are the targets to
9005bd8deadSopenharmony_ci    which the source and destination buffers are bound, and each must be one
9015bd8deadSopenharmony_ci    of the targets listed in table 6.1. For CopyNamedBufferSubData,
9025bd8deadSopenharmony_ci    <readBuffer> and <writeBuffer> are the names of the source and
9035bd8deadSopenharmony_ci    destination buffers, respectively.
9045bd8deadSopenharmony_ci
9055bd8deadSopenharmony_ci    While any of these targets may be used, COPY_READ_BUFFER and
9065bd8deadSopenharmony_ci    COPY_WRITE_BUFFER are provided specifically for copies, so that they can
9075bd8deadSopenharmony_ci    be used without affecting other buffer binding targets that may be in
9085bd8deadSopenharmony_ci    use.
9095bd8deadSopenharmony_ci
9105bd8deadSopenharmony_ci    <writeOffset> and <size> specify the range of data in the destination
9115bd8deadSopenharmony_ci    buffer object that is to be replaced, in terms of basic machine units.
9125bd8deadSopenharmony_ci    <readOffset> and <size> specify the range of data in the source buffer
9135bd8deadSopenharmony_ci    object that is to be copied to the corresponding region of the
9145bd8deadSopenharmony_ci    destination buffer object.
9155bd8deadSopenharmony_ci
9165bd8deadSopenharmony_ci    (Replace references in the Errors section of "the buffer object bound to
9175bd8deadSopenharmony_ci    <readTarget> / <writeTarget>" with "the source / destination buffer
9185bd8deadSopenharmony_ci    object", respectively).
9195bd8deadSopenharmony_ci
9205bd8deadSopenharmony_ci    Errors
9215bd8deadSopenharmony_ci
9225bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by CopyNamedBufferSubData if
9235bd8deadSopenharmony_ci    <readBuffer> or <writeBuffer> is not the name of an existing buffer
9245bd8deadSopenharmony_ci    object.
9255bd8deadSopenharmony_ci
9265bd8deadSopenharmony_ci
9275bd8deadSopenharmony_ci    Modifications to Section 6.7, "Buffer Object Queries"
9285bd8deadSopenharmony_ci
9295bd8deadSopenharmony_ci    (Replace the introduction of GetBufferParameteri{64}v with the following,
9305bd8deadSopenharmony_ci    p. 73)
9315bd8deadSopenharmony_ci
9325bd8deadSopenharmony_ci    To query information about a buffer object, use the commands
9335bd8deadSopenharmony_ci
9345bd8deadSopenharmony_ci        void GetBufferParameteriv(enum target, enum pname, int *data);
9355bd8deadSopenharmony_ci        void GetBufferParamereri64v(enum target, enum pname, int64 *data);
9365bd8deadSopenharmony_ci        void GetNamedBufferParameteriv(uint buffer, enum pname, int *data);
9375bd8deadSopenharmony_ci        void GetNamedBufferParameteri64v(uint buffer, enum pname, int64 *data);
9385bd8deadSopenharmony_ci
9395bd8deadSopenharmony_ci    For GetBufferParameter*, the buffer object is that bound to <target>,
9405bd8deadSopenharmony_ci    which must be one of the targets listed in table 6.1. For
9415bd8deadSopenharmony_ci    GetNamedBufferParameter*, <buffer> is the name of the buffer object.
9425bd8deadSopenharmony_ci
9435bd8deadSopenharmony_ci    <pname> must be one of the buffer object parameters in table 6.2, other
9445bd8deadSopenharmony_ci    than BUFFER_MAP_POINTER. The value of the specified parameter of the
9455bd8deadSopenharmony_ci    target buffer object is returned in <data>.
9465bd8deadSopenharmony_ci
9475bd8deadSopenharmony_ci    Errors
9485bd8deadSopenharmony_ci
9495bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetNamedBufferParameter* if
9505bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
9515bd8deadSopenharmony_ci
9525bd8deadSopenharmony_ci
9535bd8deadSopenharmony_ci    (Replace the introduction of GetBufferSubData with the following, p. 73)
9545bd8deadSopenharmony_ci
9555bd8deadSopenharmony_ci    To query the data store of a buffer object, use the commands
9565bd8deadSopenharmony_ci
9575bd8deadSopenharmony_ci        void GetBufferSubData(enum target, intptr offset,
9585bd8deadSopenharmony_ci                              sizeiptr size, void *data);
9595bd8deadSopenharmony_ci        void GetNamedBufferSubData(uint buffer, intptr offset,
9605bd8deadSopenharmony_ci                                   sizeiptr size, void *data);
9615bd8deadSopenharmony_ci
9625bd8deadSopenharmony_ci    For GetBufferSubData, <target> specifies the target to which the source
9635bd8deadSopenharmony_ci    buffer object is bound, and must be one of the values listed in table
9645bd8deadSopenharmony_ci    6.1. For GetNamedBufferSubData, <buffer> specifies the name of the source
9655bd8deadSopenharmony_ci    buffer object.
9665bd8deadSopenharmony_ci
9675bd8deadSopenharmony_ci    <offset> and <size> indicate ...
9685bd8deadSopenharmony_ci
9695bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace references to
9705bd8deadSopenharmony_ci    "the buffer object bound to <target>" with "the source buffer object").
9715bd8deadSopenharmony_ci
9725bd8deadSopenharmony_ci    Errors
9735bd8deadSopenharmony_ci
9745bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetNamedBufferSubData if
9755bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
9765bd8deadSopenharmony_ci
9775bd8deadSopenharmony_ci
9785bd8deadSopenharmony_ci    (Replace the introduction of GetBufferPointerv with the following, p. 74)
9795bd8deadSopenharmony_ci
9805bd8deadSopenharmony_ci    While part or all of the data store of a buffer object is mapped, the
9815bd8deadSopenharmony_ci    pointer to the mapped range of the data store can be queried with the
9825bd8deadSopenharmony_ci    commands
9835bd8deadSopenharmony_ci
9845bd8deadSopenharmony_ci        void GetBufferPointerv(enum target, enum pname, const void **params);
9855bd8deadSopenharmony_ci        void GetNamedBufferPointerv(uint buffer, enum pname,
9865bd8deadSopenharmony_ci                                    const void **params);
9875bd8deadSopenharmony_ci
9885bd8deadSopenharmony_ci    For GetBufferPointerv, the buffer object is that bound tp <target>,
9895bd8deadSopenharmony_ci    which must be one of the targets listed in table 6.1. For
9905bd8deadSopenharmony_ci    GetNamedBufferPointerv, <buffer> is the name of the buffer object.
9915bd8deadSopenharmony_ci
9925bd8deadSopenharmony_ci    (Retain the remainder of the section.)
9935bd8deadSopenharmony_ci
9945bd8deadSopenharmony_ci    Errors
9955bd8deadSopenharmony_ci
9965bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetNamedBufferPointerv if
9975bd8deadSopenharmony_ci    <buffer> is not the name of an existing buffer object.
9985bd8deadSopenharmony_ci
9995bd8deadSopenharmony_ci
10005bd8deadSopenharmony_ciAdditions to Chapter 7 of the OpenGL 4.4 (core) Specification (Programs and
10015bd8deadSopenharmony_ciShaders)
10025bd8deadSopenharmony_ci
10035bd8deadSopenharmony_ci    Modifications to Section 7.4, "Program Pipeline Objects"
10045bd8deadSopenharmony_ci
10055bd8deadSopenharmony_ci    (Insert the following after the description of BindProgramPipeline, p. 110)
10065bd8deadSopenharmony_ci
10075bd8deadSopenharmony_ci    Program pipeline objects may also be created with the command
10085bd8deadSopenharmony_ci
10095bd8deadSopenharmony_ci        void CreateProgramPipelines(sizei n, uint *pipelines);
10105bd8deadSopenharmony_ci
10115bd8deadSopenharmony_ci    CreateProgramPipelines returns <n> previously unused program pipeline
10125bd8deadSopenharmony_ci    names in <pipelines>, each representing a new program pipeline object
10135bd8deadSopenharmony_ci    which is a state vector comprising all the state and with the same
10145bd8deadSopenharmony_ci    initial values listed in table 23.31.
10155bd8deadSopenharmony_ci
10165bd8deadSopenharmony_ci    Errors
10175bd8deadSopenharmony_ci
10185bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <n> is negative.
10195bd8deadSopenharmony_ci
10205bd8deadSopenharmony_ci
10215bd8deadSopenharmony_ciAdditions to Chapter 8 of the OpenGL 4.4 (core) Specification (Textures and
10225bd8deadSopenharmony_ciSamplers)
10235bd8deadSopenharmony_ci
10245bd8deadSopenharmony_ci    Modifications to Section 8.1, "Texture Objects"
10255bd8deadSopenharmony_ci
10265bd8deadSopenharmony_ci    (Insert the following after the description of BindTextures, p. 164)
10275bd8deadSopenharmony_ci
10285bd8deadSopenharmony_ci    The command
10295bd8deadSopenharmony_ci
10305bd8deadSopenharmony_ci        void BindTextureUnit(uint unit, uint texture);
10315bd8deadSopenharmony_ci
10325bd8deadSopenharmony_ci    binds an existing texture object to the texture unit numbered <unit>.
10335bd8deadSopenharmony_ci    <texture> must be zero or the name of an existing texture object. When
10345bd8deadSopenharmony_ci    <texture> is the name of an existing texture object, that object is
10355bd8deadSopenharmony_ci    bound to the target, in the corresponding texture unit, that was
10365bd8deadSopenharmony_ci    specified when the object was created. When <texture> is zero, each of
10375bd8deadSopenharmony_ci    the targets enumerated at the beginning of this section is reset to its
10385bd8deadSopenharmony_ci    default texture for the corresponding texture image unit.
10395bd8deadSopenharmony_ci
10405bd8deadSopenharmony_ci    Errors
10415bd8deadSopenharmony_ci
10425bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by BindTextureUnit if <texture>
10435bd8deadSopenharmony_ci    is not zero or the name of an existing texture object.
10445bd8deadSopenharmony_ci
10455bd8deadSopenharmony_ci
10465bd8deadSopenharmony_ci    Texture objects may also be created with the command
10475bd8deadSopenharmony_ci
10485bd8deadSopenharmony_ci        void CreateTextures(enum target, sizei n, uint *textures);
10495bd8deadSopenharmony_ci
10505bd8deadSopenharmony_ci    CreateTextures returns <n> previously unused texture names in
10515bd8deadSopenharmony_ci    <textures>, each representing a new texture object that is a state
10525bd8deadSopenharmony_ci    vector comprising all the state and with the same initial values listed
10535bd8deadSopenharmony_ci    in section 8.22. The new texture objects are and remain textures of the
10545bd8deadSopenharmony_ci    dimensionality and type specified by <target> until they are deleted.
10555bd8deadSopenharmony_ci
10565bd8deadSopenharmony_ci    Errors
10575bd8deadSopenharmony_ci
10585bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <n> is negative.
10595bd8deadSopenharmony_ci
10605bd8deadSopenharmony_ci
10615bd8deadSopenharmony_ci    Modifications to Section 8.2, "Sampler Objects"
10625bd8deadSopenharmony_ci
10635bd8deadSopenharmony_ci    (Insert the following after the description of GenSamplers, p. 165)
10645bd8deadSopenharmony_ci
10655bd8deadSopenharmony_ci    Sampler objects may also be created with the command
10665bd8deadSopenharmony_ci
10675bd8deadSopenharmony_ci        void CreateSamplers(sizei n, uint *samplers);
10685bd8deadSopenharmony_ci
10695bd8deadSopenharmony_ci    CreateSamplers returns <n> previously unused sampler names in
10705bd8deadSopenharmony_ci    <samplers>, each representing a new sampler object which is a state
10715bd8deadSopenharmony_ci    vector comprising all the state and with the same initial values listed
10725bd8deadSopenharmony_ci    in table 23.18.
10735bd8deadSopenharmony_ci
10745bd8deadSopenharmony_ci    Errors
10755bd8deadSopenharmony_ci
10765bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <n> is negative.
10775bd8deadSopenharmony_ci
10785bd8deadSopenharmony_ci
10795bd8deadSopenharmony_ci    Modifications to Section 8.6, "Alternate Texture Image Specification"
10805bd8deadSopenharmony_ci
10815bd8deadSopenharmony_ci    (Modify introduction and add to the list of commands comprising
10825bd8deadSopenharmony_ci    TexSubImage*D and CopyTexSubImage*D, p. 201)
10835bd8deadSopenharmony_ci
10845bd8deadSopenharmony_ci    To respecify only a rectangular subregion of the texel array of a
10855bd8deadSopenharmony_ci    texture object, use the commands
10865bd8deadSopenharmony_ci
10875bd8deadSopenharmony_ci        ...
10885bd8deadSopenharmony_ci        void TextureSubImage1D(uint texture,
10895bd8deadSopenharmony_ci                               int level, int xoffset, sizei width,
10905bd8deadSopenharmony_ci                               enum format, enum type,
10915bd8deadSopenharmony_ci                               const void *pixels);
10925bd8deadSopenharmony_ci        void TextureSubImage2D(uint texture,
10935bd8deadSopenharmony_ci                               int level, int xoffset, int yoffset,
10945bd8deadSopenharmony_ci                               sizei width, sizei height,
10955bd8deadSopenharmony_ci                               enum format, enum type,
10965bd8deadSopenharmony_ci                               const void *pixels);
10975bd8deadSopenharmony_ci        void TextureSubImage3D(uint texture,
10985bd8deadSopenharmony_ci                               int level,
10995bd8deadSopenharmony_ci                               int xoffset, int yoffset, int zoffset,
11005bd8deadSopenharmony_ci                               sizei width, sizei height, sizei depth,
11015bd8deadSopenharmony_ci                               enum format, enum type,
11025bd8deadSopenharmony_ci                               const void *pixels);
11035bd8deadSopenharmony_ci        void CopyTextureSubImage1D(uint texture,
11045bd8deadSopenharmony_ci                                   int level,
11055bd8deadSopenharmony_ci                                   int xoffset,
11065bd8deadSopenharmony_ci                                   int x, int y,
11075bd8deadSopenharmony_ci                                   sizei width);
11085bd8deadSopenharmony_ci        void CopyTextureSubImage2D(uint texture,
11095bd8deadSopenharmony_ci                                   int level,
11105bd8deadSopenharmony_ci                                   int xoffset, int yoffset,
11115bd8deadSopenharmony_ci                                   int x, int y,
11125bd8deadSopenharmony_ci                                   sizei width, sizei height);
11135bd8deadSopenharmony_ci        void CopyTextureSubImage3D(uint texture,
11145bd8deadSopenharmony_ci                                   int level,
11155bd8deadSopenharmony_ci                                   int xoffset, int yoffset, int zoffset,
11165bd8deadSopenharmony_ci                                   int x, int y,
11175bd8deadSopenharmony_ci                                   sizei width, sizei height);
11185bd8deadSopenharmony_ci
11195bd8deadSopenharmony_ci    For *TexSubImage*, the texture object is that bound to <target>. For
11205bd8deadSopenharmony_ci    *TextureSubImage*, <texture> is the name of the texture object. <target>
11215bd8deadSopenharmony_ci    or the effective target of <texture> (the value of TEXTURE_TARGET; see
11225bd8deadSopenharmony_ci    section 8.10) must match each command as shown in table 8.subtarg.
11235bd8deadSopenharmony_ci
11245bd8deadSopenharmony_ci    Command Name            Valid <target>s or effective <target>s
11255bd8deadSopenharmony_ci    ---------------------   --------------------------------------
11265bd8deadSopenharmony_ci    TexSubImage1D           TEXTURE_1D
11275bd8deadSopenharmony_ci    CopyTexSubImage1D
11285bd8deadSopenharmony_ci    TextureSubImage1D
11295bd8deadSopenharmony_ci    CopyTextureSubImage1D
11305bd8deadSopenharmony_ci
11315bd8deadSopenharmony_ci    TexSubImage2D           TEXTURE_2D,
11325bd8deadSopenharmony_ci    CopyTexSubImage2D       TEXTURE_1D_ARRAY,
11335bd8deadSopenharmony_ci    TextureSubImage2D       TEXTURE_RECTANGLE, or one of the
11345bd8deadSopenharmony_ci    CopyTextureSubImage2D   cube map face targets from table 8.18
11355bd8deadSopenharmony_ci
11365bd8deadSopenharmony_ci    TextureSubImage2D       TEXTURE_2D,
11375bd8deadSopenharmony_ci    CopyTextureSubImage2D   TEXTURE_1D_ARRAY, or
11385bd8deadSopenharmony_ci                            TEXTURE_RECTANGLE
11395bd8deadSopenharmony_ci
11405bd8deadSopenharmony_ci    TexSubImage3D           TEXTURE_3D,
11415bd8deadSopenharmony_ci    CopyTexSubImage3D       TEXTURE_2D_ARRAY, or
11425bd8deadSopenharmony_ci                            TEXTURE_CUBE_MAP_ARRAY
11435bd8deadSopenharmony_ci
11445bd8deadSopenharmony_ci    TextureSubImage3D       TEXTURE_3D,
11455bd8deadSopenharmony_ci    CopyTextureSubImage3D   TEXTURE_2D_ARRAY,
11465bd8deadSopenharmony_ci                            TEXTURE_CUBE_MAP_ARRAY or
11475bd8deadSopenharmony_ci                            TEXTURE_CUBE_MAP
11485bd8deadSopenharmony_ci    ----------------------------------------------------------------
11495bd8deadSopenharmony_ci    Table 8.subtarg: Valid texture <target> parameters or effective
11505bd8deadSopenharmony_ci    <texture> targets for texture subimage commands.
11515bd8deadSopenharmony_ci
11525bd8deadSopenharmony_ci    No change is made to the <internalformat> ...
11535bd8deadSopenharmony_ci
11545bd8deadSopenharmony_ci    The <level> parameter of each command specifies ...
11555bd8deadSopenharmony_ci
11565bd8deadSopenharmony_ci    Errors
11575bd8deadSopenharmony_ci
11585bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by *TexSubImage* if <target> does
11595bd8deadSopenharmony_ci    not match the command, as shown in table 8.subtarg.
11605bd8deadSopenharmony_ci
11615bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by *TextureSubImage* if
11625bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
11635bd8deadSopenharmony_ci
11645bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by *TextureSubImage* if the
11655bd8deadSopenharmony_ci    effective target of <texture> does not match the command, as shown in
11665bd8deadSopenharmony_ci    table 8.subtarg.
11675bd8deadSopenharmony_ci
11685bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if the effective <target> is
11695bd8deadSopenharmony_ci    TEXTURE_RECTANGLE and <level> is not zero.
11705bd8deadSopenharmony_ci
11715bd8deadSopenharmony_ci
11725bd8deadSopenharmony_ci    Modifications to Section 8.7, "Compressed Texture Images"
11735bd8deadSopenharmony_ci
11745bd8deadSopenharmony_ci    To respecify only a rectangular subregion of the texel array of an
11755bd8deadSopenharmony_ci    texture object, with incoming data stored in a specific compressed
11765bd8deadSopenharmony_ci    format, use the commands
11775bd8deadSopenharmony_ci
11785bd8deadSopenharmony_ci        ...
11795bd8deadSopenharmony_ci        void CompressedTextureSubImage1D(uint texture, int level,
11805bd8deadSopenharmony_ci                                         int xoffset, sizei width,
11815bd8deadSopenharmony_ci                                         enum format,
11825bd8deadSopenharmony_ci                                         sizei imageSize, const void *data);
11835bd8deadSopenharmony_ci        void CompressedTextureSubImage2D(uint texture, int level,
11845bd8deadSopenharmony_ci                                         int xoffset, int yoffset,
11855bd8deadSopenharmony_ci                                         sizei width, sizei height,
11865bd8deadSopenharmony_ci                                         enum format,
11875bd8deadSopenharmony_ci                                         sizei imageSize, const void *data);
11885bd8deadSopenharmony_ci        void CompressedTextureSubImage3D(uint texture, int level,
11895bd8deadSopenharmony_ci                                         int xoffset, int yoffset,
11905bd8deadSopenharmony_ci                                         int zoffset,
11915bd8deadSopenharmony_ci                                         sizei width, sizei height,
11925bd8deadSopenharmony_ci                                         sizei depth, enum format,
11935bd8deadSopenharmony_ci                                         sizei imageSize, const void *data);
11945bd8deadSopenharmony_ci
11955bd8deadSopenharmony_ci    Modify the following text, beginning "respecify only a rectangular
11965bd8deadSopenharmony_ci    region ..." as follows:
11975bd8deadSopenharmony_ci
11985bd8deadSopenharmony_ci    The <target>, <texture>, <level>, <xoffset>, <yoffset>, <zoffset>,
11995bd8deadSopenharmony_ci    <width>, <height>, and <depth> parameters have the same meaning as in
12005bd8deadSopenharmony_ci    the corresponding commands from section 8.6 without the Compressed
12015bd8deadSopenharmony_ci    prefix (where those parameters are present). <data> points to compressed
12025bd8deadSopenharmony_ci    image data stored in the compressed image format corresponding to
12035bd8deadSopenharmony_ci    <format>.
12045bd8deadSopenharmony_ci
12055bd8deadSopenharmony_ci    ...
12065bd8deadSopenharmony_ci
12075bd8deadSopenharmony_ci    Errors
12085bd8deadSopenharmony_ci
12095bd8deadSopenharmony_ci    Modify existing errors to apply to all forms of the commands by dropping
12105bd8deadSopenharmony_ci    "bound to <target>" phrasing and using "effective <target>" instead of
12115bd8deadSopenharmony_ci    "<target>".
12125bd8deadSopenharmony_ci
12135bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by CompressedTextureSubImage*D
12145bd8deadSopenharmony_ci    if <texture> is not the name of an existing texture object.
12155bd8deadSopenharmony_ci
12165bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by CompressedTextureSubImage*D
12175bd8deadSopenharmony_ci    if the effective <target> is TEXTURE_RECTANGLE.
12185bd8deadSopenharmony_ci
12195bd8deadSopenharmony_ci
12205bd8deadSopenharmony_ci    Modifications to Section 8.9, "Buffer Textures"
12215bd8deadSopenharmony_ci
12225bd8deadSopenharmony_ci    (Modify the introduction of TexBuffer with the following, p. 214)
12235bd8deadSopenharmony_ci
12245bd8deadSopenharmony_ci    The commands
12255bd8deadSopenharmony_ci
12265bd8deadSopenharmony_ci        void TexBufferRange(enum target, enum internalformat,
12275bd8deadSopenharmony_ci                            uint buffer, intptr offset, sizeiptr size);
12285bd8deadSopenharmony_ci        void TextureBufferRange(uint texture, enum internalformat,
12295bd8deadSopenharmony_ci                                uint buffer, intptr offset, sizeiptr size);
12305bd8deadSopenharmony_ci
12315bd8deadSopenharmony_ci    attach the range of the storage for the buffer object named <buffer> for
12325bd8deadSopenharmony_ci    <size> basic machine units, starting at <offset> (also in basic machine
12335bd8deadSopenharmony_ci    units) to a buffer texture.
12345bd8deadSopenharmony_ci
12355bd8deadSopenharmony_ci    For TexBufferRange, the buffer texture is that currently bound to
12365bd8deadSopenharmony_ci    <target>. For TextureBufferRange, <texture> is the name of the buffer
12375bd8deadSopenharmony_ci    texture. <target> or the effective target of <texture> must be
12385bd8deadSopenharmony_ci    TEXTURE_BUFFER
12395bd8deadSopenharmony_ci
12405bd8deadSopenharmony_ci    If <buffer> is zero, then any buffer object attached to the buffer
12415bd8deadSopenharmony_ci    texture is detached, the values <offset> and <size> are ignored and the
12425bd8deadSopenharmony_ci    state for <offset> and <size> for the buffer texture are reset to zero.
12435bd8deadSopenharmony_ci    <internalformat> specifies the storage format for the texel array found
12445bd8deadSopenharmony_ci    in the range of the attached buffer object, and must be one of the sized
12455bd8deadSopenharmony_ci    internal formats from table 8.15.
12465bd8deadSopenharmony_ci
12475bd8deadSopenharmony_ci    Errors
12485bd8deadSopenharmony_ci
12495bd8deadSopenharmony_ci    Modify existing errors to apply to all forms of the command where
12505bd8deadSopenharmony_ci    parameters are equivalent.
12515bd8deadSopenharmony_ci
12525bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureBufferRange if
12535bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
12545bd8deadSopenharmony_ci
12555bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureBufferRange if the
12565bd8deadSopenharmony_ci    effective <target> is not TEXTURE_BUFFER.
12575bd8deadSopenharmony_ci
12585bd8deadSopenharmony_ci    (Replace the introduction of TexBuffer with the following, p. 214)
12595bd8deadSopenharmony_ci
12605bd8deadSopenharmony_ci    The commands
12615bd8deadSopenharmony_ci
12625bd8deadSopenharmony_ci        TexBuffer(enum target, enum internalformat, uint buffer);
12635bd8deadSopenharmony_ci        TextureBuffer(uint texture, enum internalformat, uint buffer);
12645bd8deadSopenharmony_ci
12655bd8deadSopenharmony_ci    are respectively equivalent to
12665bd8deadSopenharmony_ci
12675bd8deadSopenharmony_ci        TexBufferRange(<target>, <internalformat>, <buffer>, 0, size);
12685bd8deadSopenharmony_ci
12695bd8deadSopenharmony_ci    and
12705bd8deadSopenharmony_ci
12715bd8deadSopenharmony_ci        TextureBufferRange(<texture>, <internalformat>, <buffer>, 0, size);
12725bd8deadSopenharmony_ci
12735bd8deadSopenharmony_ci    where <size> is set to the value of BUFFER_SIZE for <buffer>.
12745bd8deadSopenharmony_ci
12755bd8deadSopenharmony_ci    (Retain the remainder of the section.)
12765bd8deadSopenharmony_ci
12775bd8deadSopenharmony_ci
12785bd8deadSopenharmony_ci    Modifications to Section 8.10, "Texture Parameters"
12795bd8deadSopenharmony_ci
12805bd8deadSopenharmony_ci    (Modify introduction to the section)
12815bd8deadSopenharmony_ci
12825bd8deadSopenharmony_ci    Texture parameters control how the texel array of a texture object is
12835bd8deadSopenharmony_ci    treated when specified or changed, and when applied to a fragment. Each
12845bd8deadSopenharmony_ci    parameter is set with the commands
12855bd8deadSopenharmony_ci
12865bd8deadSopenharmony_ci        void TexParameter{if}(enum target, enum pname, T param);
12875bd8deadSopenharmony_ci        void TexParameter{if}v(enum target, enum pname, const T *params);
12885bd8deadSopenharmony_ci        void TexParameterI{i ui}v(enum target, enum pname, const T *params);
12895bd8deadSopenharmony_ci        void TextureParameter{if}(uint texture, enum pname, T param);
12905bd8deadSopenharmony_ci        void TextureParameter{if}v(uint texture, enum pname, const T *params);
12915bd8deadSopenharmony_ci        void TextureParameterI{i ui}v(uint texture, enum pname, const T *params);
12925bd8deadSopenharmony_ci
12935bd8deadSopenharmony_ci    For TexParameter*, the texture object is that bound to <target>. For
12945bd8deadSopenharmony_ci    TextureParameter*, <texture> is the name of the texture object. <target>
12955bd8deadSopenharmony_ci    or the effective target of <texture> must be one of [insert existing
12965bd8deadSopenharmony_ci    list of valid texture targets].
12975bd8deadSopenharmony_ci
12985bd8deadSopenharmony_ci    ...
12995bd8deadSopenharmony_ci
13005bd8deadSopenharmony_ci    Errors
13015bd8deadSopenharmony_ci
13025bd8deadSopenharmony_ci    Modify existing errors to apply to all forms of the command where
13035bd8deadSopenharmony_ci    parameters are equivalent.
13045bd8deadSopenharmony_ci
13055bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureParameter* if
13065bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
13075bd8deadSopenharmony_ci
13085bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureParameter* if
13095bd8deadSopenharmony_ci    the effective <target> is not one of the valid targets listed above.
13105bd8deadSopenharmony_ci
13115bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureParameter* if the
13125bd8deadSopenharmony_ci    effective <target> is either TEXTURE_2D_MULTISAMPLE or
13135bd8deadSopenharmony_ci    TEXTURE_2D_MULTISAMPLE_ARRAY , and pname is any sampler state from table
13145bd8deadSopenharmony_ci    23.23.
13155bd8deadSopenharmony_ci
13165bd8deadSopenharmony_ci
13175bd8deadSopenharmony_ci    Modifications to Section 8.11.2, "Texture Parameter Queries", p. 220
13185bd8deadSopenharmony_ci
13195bd8deadSopenharmony_ci    Parameters of a texture object may be queried with the commands
13205bd8deadSopenharmony_ci
13215bd8deadSopenharmony_ci        void GetTexParameter{if}v(enum target, enum pname, T *params);
13225bd8deadSopenharmony_ci        void GetTexParameterI{i ui}v(enum target, enum pname, T *params);
13235bd8deadSopenharmony_ci        void GetTextureParameter{if}v(uint texture, enum pname, T *params);
13245bd8deadSopenharmony_ci        void GetTextureParameterI{i ui}v(uint texture, enum pname, T *params);
13255bd8deadSopenharmony_ci
13265bd8deadSopenharmony_ci    For GetTexParameter*, the texture object is that bound to <target>. For
13275bd8deadSopenharmony_ci    GetTextureParameter*, <texture> is the name of the texture object.
13285bd8deadSopenharmony_ci
13295bd8deadSopenharmony_ci    The value of texture parameter <pname> for the texture is returned in
13305bd8deadSopenharmony_ci    <params>.
13315bd8deadSopenharmony_ci
13325bd8deadSopenharmony_ci    <target> or the effective target of <texture> must be one of TEXTURE_1D,
13335bd8deadSopenharmony_ci    TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY,
13345bd8deadSopenharmony_ci    TEXTURE_RECTANGLE, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY,
13355bd8deadSopenharmony_ci    TEXTURE_2D_MULTISAMPLE, or TEXTURE_2D_MULTISAMPLE_ARRAY, indicating the
13365bd8deadSopenharmony_ci    currently bound one-, two-, or three-dimensional, one- or
13375bd8deadSopenharmony_ci    two-dimensional array, rectangle, cube map, cube map array,
13385bd8deadSopenharmony_ci    two-dimensional multisample, or two-dimensional multisample array
13395bd8deadSopenharmony_ci    texture object.
13405bd8deadSopenharmony_ci
13415bd8deadSopenharmony_ci    <pname> must be one of IMAGE_FORMAT_COMPATIBILITY_TYPE,
13425bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_FORMAT, TEXTURE_IMMUTABLE_LEVELS, TEXTURE_TARGET,
13435bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LEVEL, TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER,
13445bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS, or one of the symbolic values in table 8.16.
13455bd8deadSopenharmony_ci
13465bd8deadSopenharmony_ci    Querying pname TEXTURE_BORDER_COLOR with GetTex*ParameterIiv or
13475bd8deadSopenharmony_ci    GetTex*ParameterIuiv returns the border color values as signed integers or
13485bd8deadSopenharmony_ci    unsigned integers, respectively; otherwise the values are returned as
13495bd8deadSopenharmony_ci    described in section 2.2.2. If the border color is queried with a type
13505bd8deadSopenharmony_ci    that does not match the original type with which it was specified, the
13515bd8deadSopenharmony_ci    result is undefined.
13525bd8deadSopenharmony_ci
13535bd8deadSopenharmony_ci    Querying <pname> TEXTURE_TARGET returns the <effective target> of the
13545bd8deadSopenharmony_ci    texture object. For GetTexParameter*, this is the <target> parameter.
13555bd8deadSopenharmony_ci    For GetTextureParameter*, it is the target to which <texture> was
13565bd8deadSopenharmony_ci    initially bound when it was created, or the value of the <target>
13575bd8deadSopenharmony_ci    parameter to the call to CreateTextures which created the texture.
13585bd8deadSopenharmony_ci
13595bd8deadSopenharmony_ci
13605bd8deadSopenharmony_ci    Errors
13615bd8deadSopenharmony_ci
13625bd8deadSopenharmony_ci    Modify existing errors to apply to all forms of the command where
13635bd8deadSopenharmony_ci    parameters are equivalent.
13645bd8deadSopenharmony_ci
13655bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureParameter* if
13665bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
13675bd8deadSopenharmony_ci
13685bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureParameter* if the
13695bd8deadSopenharmony_ci    effective <target> is not one of the texture targets described above.
13705bd8deadSopenharmony_ci
13715bd8deadSopenharmony_ci
13725bd8deadSopenharmony_ci    Modifications to Section 8.11.3, "Texture Level Parameter Queries", p. 220
13735bd8deadSopenharmony_ci
13745bd8deadSopenharmony_ci    Parameters of a specified level-of-detail of a texture object may
13755bd8deadSopenharmony_ci    be queried with the commands
13765bd8deadSopenharmony_ci
13775bd8deadSopenharmony_ci
13785bd8deadSopenharmony_ci        void GetTexLevelParameter{if}v(enum target, int level,
13795bd8deadSopenharmony_ci                                       enum pname, T *params);
13805bd8deadSopenharmony_ci        void GetTextureLevelParameter{if}v(uint texture, int level,
13815bd8deadSopenharmony_ci                                           enum pname, T *params);
13825bd8deadSopenharmony_ci
13835bd8deadSopenharmony_ci    For GetTexLevelParameter*, the texture object is that bound to <target>.
13845bd8deadSopenharmony_ci    For GetTextureLevelParameter*, <texture> is the name of the texture
13855bd8deadSopenharmony_ci    object.
13865bd8deadSopenharmony_ci
13875bd8deadSopenharmony_ci    The value of texture parameter <pname> for level-of-detail <level> of
13885bd8deadSopenharmony_ci    the texture is returned in <params>. <pname> must be one of the symbolic
13895bd8deadSopenharmony_ci    values in tables 23.16- 23.17.
13905bd8deadSopenharmony_ci
13915bd8deadSopenharmony_ci    The effective target of the texture object must be one of [incorporate
13925bd8deadSopenharmony_ci    the existing list of valid targets, but remove "one of the cube map face
13935bd8deadSopenharmony_ci    targets from table 8.18" and "one of the six distinct 2D images making
13945bd8deadSopenharmony_ci    up the cube map texture object"] ...
13955bd8deadSopenharmony_ci
13965bd8deadSopenharmony_ci    For GetTexLevelParameter* only, target may also be one of the cube map
13975bd8deadSopenharmony_ci    face targets from table 8.18, indicating one of the six distinct
13985bd8deadSopenharmony_ci    two-dimensional images making up the cube map texture object. Note that
13995bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP is not a valid target parameter for
14005bd8deadSopenharmony_ci    GetTexLevelParameter*.
14015bd8deadSopenharmony_ci
14025bd8deadSopenharmony_ci    For GetTextureLevelParameter* only, texture may also be a cube map
14035bd8deadSopenharmony_ci    texture object. In this case the query is always performed for face zero
14045bd8deadSopenharmony_ci    (the TEXTURE_CUBE_MAP_POSITIVE_X face), since there is no way to
14055bd8deadSopenharmony_ci    specify another face.
14065bd8deadSopenharmony_ci
14075bd8deadSopenharmony_ci    <level> determins which level-of-detail's state is returned...
14085bd8deadSopenharmony_ci
14095bd8deadSopenharmony_ci    Errors
14105bd8deadSopenharmony_ci
14115bd8deadSopenharmony_ci    Modify existing errors to apply to all forms of the command where
14125bd8deadSopenharmony_ci    parameters are equivalent.
14135bd8deadSopenharmony_ci
14145bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureLevelParameter* if
14155bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
14165bd8deadSopenharmony_ci
14175bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureLevelParameter* if
14185bd8deadSopenharmony_ci    the effective <target> is not one of the targets described above as
14195bd8deadSopenharmony_ci    valid for the corresponding command.
14205bd8deadSopenharmony_ci
14215bd8deadSopenharmony_ci
14225bd8deadSopenharmony_ci    Modifications to Section 8.11.4, "Texture Image Queries"
14235bd8deadSopenharmony_ci
14245bd8deadSopenharmony_ci    (Replace the first paragraph with the following, p. 223)
14255bd8deadSopenharmony_ci
14265bd8deadSopenharmony_ci    Texture images may be obtained from a texture object with the commands
14275bd8deadSopenharmony_ci
14285bd8deadSopenharmony_ci        void GetTexImage(enum target, int level, enum format,
14295bd8deadSopenharmony_ci                         enum type, void *pixels);
14305bd8deadSopenharmony_ci        void GetTextureImage(uint texture, int level, enum format,
14315bd8deadSopenharmony_ci                             enum type, sizei bufSize, void *pixels);
14325bd8deadSopenharmony_ci
14335bd8deadSopenharmony_ci    For GetTexImage, <target> specifies the target to which the texture
14345bd8deadSopenharmony_ci    object is bound. <target> must be one of TEXTURE_1D, TEXTURE_2D,
14355bd8deadSopenharmony_ci    TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
14365bd8deadSopenharmony_ci    or TEXTURE_RECTANGLE, indicating a one-, two- or three-dimensional, one-
14375bd8deadSopenharmony_ci    or two-dimensional array, cube map array or rectangle texture,
14385bd8deadSopenharmony_ci    respectively, of one of the targets from table 8.18, indicating the
14395bd8deadSopenharmony_ci    corresponding face of a cube map texture.
14405bd8deadSopenharmony_ci
14415bd8deadSopenharmony_ci    For GetTextureImage, <texture> is the name of the texture object
14425bd8deadSopenharmony_ci    containing the image to be retrieved. In addition to the types of
14435bd8deadSopenharmony_ci    textures accepted by the Get*TexImage commands, GetTextureImage also
14445bd8deadSopenharmony_ci    accepts cube map texture objects (with effective <target>
14455bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP).
14465bd8deadSopenharmony_ci
14475bd8deadSopenharmony_ci    <level> is a level-of-detail number, <format> is a pixel format from
14485bd8deadSopenharmony_ci    table 8.3, and <type> is a pixel type from table 8.2.
14495bd8deadSopenharmony_ci
14505bd8deadSopenharmony_ci    For GetTextureImage, <bufSize> is the size of the buffer to receive the
14515bd8deadSopenharmony_ci    retrieved pixel data. GetTextureImage does not write more than <bufSize>
14525bd8deadSopenharmony_ci    bytes into <pixels>.
14535bd8deadSopenharmony_ci
14545bd8deadSopenharmony_ci    (Modify remaining paragraphs as shown)
14555bd8deadSopenharmony_ci
14565bd8deadSopenharmony_ci    These commands obtain component groups ... where the layers are treated
14575bd8deadSopenharmony_ci    as rows or images. Cube map textures are treated as three-dimensional
14585bd8deadSopenharmony_ci    images with a depth of 6, where the cube map faces are ordered as image
14595bd8deadSopenharmony_ci    layers as shown in table 9.2
14605bd8deadSopenharmony_ci
14615bd8deadSopenharmony_ci    These groups are then packed and placed ...
14625bd8deadSopenharmony_ci
14635bd8deadSopenharmony_ci    For three-dimensional, two-dimensional array, cube map array, and cube
14645bd8deadSopenharmony_ci    map textures, pixel storage operations are applied as if ...
14655bd8deadSopenharmony_ci
14665bd8deadSopenharmony_ci    The row length ...
14675bd8deadSopenharmony_ci
14685bd8deadSopenharmony_ci    Errors
14695bd8deadSopenharmony_ci
14705bd8deadSopenharmony_ci    Replace references to <lod> by <level>.
14715bd8deadSopenharmony_ci
14725bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureImage if <texture>
14735bd8deadSopenharmony_ci    is not the name of an existing texture object.
14745bd8deadSopenharmony_ci
14755bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by GetTexImage if <target> is not one
14765bd8deadSopenharmony_ci    of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY,
14775bd8deadSopenharmony_ci    TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY, TEXTURE_RECTANGLE, or one of
14785bd8deadSopenharmony_ci    the targets from table 8.18.
14795bd8deadSopenharmony_ci
14805bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureImage if <target>
14815bd8deadSopenharmony_ci    is not one of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY,
14825bd8deadSopenharmony_ci    TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY, TEXTURE_RECTANGLE, or
14835bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP.
14845bd8deadSopenharmony_ci
14855bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTextureImage if the buffer
14865bd8deadSopenharmony_ci    size required to store the requested data is greater than <bufSize>
14875bd8deadSopenharmony_ci
14885bd8deadSopenharmony_ci
14895bd8deadSopenharmony_ci    (Replace the introduction of GetCompressedTexImage by the following, p. 225)
14905bd8deadSopenharmony_ci
14915bd8deadSopenharmony_ci    Texture images stored in compressed form may be obtained with the
14925bd8deadSopenharmony_ci    commands
14935bd8deadSopenharmony_ci
14945bd8deadSopenharmony_ci        void GetCompressedTexImage(enum target, int level, void *pixels);
14955bd8deadSopenharmony_ci        void GetCompressedTextureImage(uint texture, int level, sizei bufSize,
14965bd8deadSopenharmony_ci                                       void *pixels);
14975bd8deadSopenharmony_ci
14985bd8deadSopenharmony_ci    For GetCompressedTexImage, the texture is that
14995bd8deadSopenharmony_ci    which is bound to <target>.
15005bd8deadSopenharmony_ci    For GetCompressedTextureImage, <texture> is the name of the texture object.
15015bd8deadSopenharmony_ci
15025bd8deadSopenharmony_ci    <target>, <level>, <bufSize> and <pixels> are interpreted in the same
15035bd8deadSopenharmony_ci    manner as the corresponding parameters of GetTexImage and
15045bd8deadSopenharmony_ci    GetTextureImage.
15055bd8deadSopenharmony_ci
15065bd8deadSopenharmony_ci    GetCompressedTexImage writes <n> ubytes of compressed image data to the
15075bd8deadSopenharmony_ci    pixel pack buffer or client memory pointed to by <pixels>, while
15085bd8deadSopenharmony_ci    GetCompressedTextureImage writes min(n, bufSize) ubytes. <n> is the
15095bd8deadSopenharmony_ci    value of TEXTURE_COMPRESSED_IMAGE_SIZE for the texture image. The
15105bd8deadSopenharmony_ci    compressed image data is formatted according to the definition of the
15115bd8deadSopenharmony_ci    texture's internal format.
15125bd8deadSopenharmony_ci
15135bd8deadSopenharmony_ci    By default the pixel storage modes ...
15145bd8deadSopenharmony_ci
15155bd8deadSopenharmony_ci    Errors
15165bd8deadSopenharmony_ci
15175bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetCompressedTextureImage if
15185bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
15195bd8deadSopenharmony_ci
15205bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <level> is negative, or greater
15215bd8deadSopenharmony_ci    than the maximum allowable level.
15225bd8deadSopenharmony_ci
15235bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the texture image is stored
15245bd8deadSopenharmony_ci    with an uncompressed internal format.
15255bd8deadSopenharmony_ci
15265bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if a pixel pack buffer object is
15275bd8deadSopenharmony_ci    bound and packing the texture image into the buffer's memory would
15285bd8deadSopenharmony_ci    exceed the size of the buffer.
15295bd8deadSopenharmony_ci
15305bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetCompressedTextureImage if
15315bd8deadSopenharmony_ci    the buffer size required to store the requested data is greated than
15325bd8deadSopenharmony_ci    <bufSize>.
15335bd8deadSopenharmony_ci
15345bd8deadSopenharmony_ci
15355bd8deadSopenharmony_ci    Modifications to Section 8.14.4, "Manual Mipmap Generation"
15365bd8deadSopenharmony_ci
15375bd8deadSopenharmony_ci    (Modify the introduction of GenerateMipmap by the following, p. 237)
15385bd8deadSopenharmony_ci
15395bd8deadSopenharmony_ci    Mipmaps can be generated manually for a texture object with the commands
15405bd8deadSopenharmony_ci
15415bd8deadSopenharmony_ci        void GenerateMipmap(enum target);
15425bd8deadSopenharmony_ci        void GenerateTextureMipmap(uint texture);
15435bd8deadSopenharmony_ci
15445bd8deadSopenharmony_ci    For GenerateMipmap, <target> specifies the target to which the texture
15455bd8deadSopenharmony_ci    object is bound. For GenerateTextureMipmap, <texture> is the name of the
15465bd8deadSopenharmony_ci    texture object.
15475bd8deadSopenharmony_ci
15485bd8deadSopenharmony_ci    <target> or the effective target of <texture> must be
15495bd8deadSopenharmony_ci    one of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D,
15505bd8deadSopenharmony_ci    TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, or
15515bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP_ARRAY.
15525bd8deadSopenharmony_ci
15535bd8deadSopenharmony_ci    If <target> or the effective target of <texture> is TEXTURE_CUBE_MAP or
15545bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP_ARRAY, then the texture object must be cube complete or
15555bd8deadSopenharmony_ci    cube array complete respectively, as defined in section 8.17.
15565bd8deadSopenharmony_ci
15575bd8deadSopenharmony_ci    (include the remainder of the description of GenerateMipmap, starting
15585bd8deadSopenharmony_ci    with "Mipmap generation replaces...")
15595bd8deadSopenharmony_ci
15605bd8deadSopenharmony_ci    Errors
15615bd8deadSopenharmony_ci
15625bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by GenerateMipmap if <target> is
15635bd8deadSopenharmony_ci    not one of the valid targets listed above.
15645bd8deadSopenharmony_ci
15655bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GenerateTextureMipmap if
15665bd8deadSopenharmony_ci    <texture> is not the name of an existing texture object.
15675bd8deadSopenharmony_ci
15685bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GenerateTextureMipmap if the
15695bd8deadSopenharmony_ci    effective <target> is not one of the valid targets listed above.
15705bd8deadSopenharmony_ci
15715bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GenerateTextureMipmap if the
15725bd8deadSopenharmony_ci    effective <target> is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY, and
15735bd8deadSopenharmony_ci    the texture object is not cube complete or cube array complete,
15745bd8deadSopenharmony_ci    respectively.
15755bd8deadSopenharmony_ci
15765bd8deadSopenharmony_ci
15775bd8deadSopenharmony_ci    Modifications to Section 8.19, "Immutable-Format Texture Images"
15785bd8deadSopenharmony_ci
15795bd8deadSopenharmony_ci    (Replace the list of "generic" errors generated by these commands,
15805bd8deadSopenharmony_ci    following the third paragraph of the section)
15815bd8deadSopenharmony_ci
15825bd8deadSopenharmony_ci    The TexStorage* commands specify properties of the texture object bound
15835bd8deadSopenharmony_ci    to the <target> parameter of each command.
15845bd8deadSopenharmony_ci
15855bd8deadSopenharmony_ci    The TextureStorage* commands behave similarly to the equivalent
15865bd8deadSopenharmony_ci    TexStorage* commands, but specify properties of the texture object named
15875bd8deadSopenharmony_ci    by the <texture> parameter of each command. The effective target of
15885bd8deadSopenharmony_ci    <texture> must be compatible with the <target> parameter of the
15895bd8deadSopenharmony_ci    equivalent TexStore* command.
15905bd8deadSopenharmony_ci
15915bd8deadSopenharmony_ci
15925bd8deadSopenharmony_ci    Errors
15935bd8deadSopenharmony_ci
15945bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TexStorage* if zero is bound
15955bd8deadSopenharmony_ci    to <target>.
15965bd8deadSopenharmony_ci
15975bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage* if <texture>
15985bd8deadSopenharmony_ci    is not the name of an existing texture object.
15995bd8deadSopenharmony_ci
16005bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <width>, <height>, <depth> or
16015bd8deadSopenharmony_ci    <levels> is less than 1, for commands with the corresponding parameters.
16025bd8deadSopenharmony_ci
16035bd8deadSopenharmony_ci    An INVALID_ENUM error is generated if <internalformat> is one of the
16045bd8deadSopenharmony_ci    unsized base internal formats listed in table 8.11.
16055bd8deadSopenharmony_ci
16065bd8deadSopenharmony_ci
16075bd8deadSopenharmony_ci    (Modify the introduction of TexStorage1D as follows, p. 247)
16085bd8deadSopenharmony_ci
16095bd8deadSopenharmony_ci    The commands
16105bd8deadSopenharmony_ci
16115bd8deadSopenharmony_ci        void TexStorage1D(enum target, sizei levels,
16125bd8deadSopenharmony_ci                          enum internalformat, sizei width);
16135bd8deadSopenharmony_ci        void TextureStorage1D(uint texture, sizei levels,
16145bd8deadSopenharmony_ci                              enum internalformat, sizei width);
16155bd8deadSopenharmony_ci
16165bd8deadSopenharmony_ci    specify all the levels of a one-dimensional texture (or, for
16175bd8deadSopenharmony_ci    TexStorage1D, proxy) at the same time. TexStorage1D is described by the
16185bd8deadSopenharmony_ci    pseudocode below:
16195bd8deadSopenharmony_ci
16205bd8deadSopenharmony_ci    (Include original TexStorage1D pseudocode, p. 247)
16215bd8deadSopenharmony_ci
16225bd8deadSopenharmony_ci    (add to the Errors section for TexStorage1D)
16235bd8deadSopenharmony_ci
16245bd8deadSopenharmony_ci    Errors
16255bd8deadSopenharmony_ci
16265bd8deadSopenharmony_ci    In addition to the generic errors described at the start of this
16275bd8deadSopenharmony_ci    section,
16285bd8deadSopenharmony_ci
16295bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage1D if
16305bd8deadSopenharmony_ci    the effective <target> is not TEXTURE_1D.
16315bd8deadSopenharmony_ci
16325bd8deadSopenharmony_ci
16335bd8deadSopenharmony_ci    (Modify the introduction of TexStorage2D as follows, 247)
16345bd8deadSopenharmony_ci
16355bd8deadSopenharmony_ci    The commands
16365bd8deadSopenharmony_ci
16375bd8deadSopenharmony_ci        void TexStorage2D(enum target, sizei levels, enum internalformat,
16385bd8deadSopenharmony_ci                          sizei width, sizei height);
16395bd8deadSopenharmony_ci        void TextureStorage2D(uint texture, sizei levels, enum internalformat,
16405bd8deadSopenharmony_ci                              sizei width, sizei height);
16415bd8deadSopenharmony_ci
16425bd8deadSopenharmony_ci    specify all the levels of a two-dimensional, cube-map, one-dimensional
16435bd8deadSopenharmony_ci    array or rectangle texture (or, for TexStorage2D, proxy) at the same
16445bd8deadSopenharmony_ci    time. TexStorage2D is described by the <target>-dependent pseudocode
16455bd8deadSopenharmony_ci    below:
16465bd8deadSopenharmony_ci
16475bd8deadSopenharmony_ci    (Include original TexStorage2D pseudocode, p. 248)
16485bd8deadSopenharmony_ci
16495bd8deadSopenharmony_ci    (add to the Errors section for TexStorage2D)
16505bd8deadSopenharmony_ci
16515bd8deadSopenharmony_ci    Errors
16525bd8deadSopenharmony_ci
16535bd8deadSopenharmony_ci    In addition to the generic errors described at the start of this
16545bd8deadSopenharmony_ci    section,
16555bd8deadSopenharmony_ci
16565bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage2D if the
16575bd8deadSopenharmony_ci    effective <target> is not one of those listed above.
16585bd8deadSopenharmony_ci
16595bd8deadSopenharmony_ci
16605bd8deadSopenharmony_ci    (Modify the introduction of TexStorage3D as follows, p. 249)
16615bd8deadSopenharmony_ci
16625bd8deadSopenharmony_ci    The commands
16635bd8deadSopenharmony_ci
16645bd8deadSopenharmony_ci        void TexStorage3D(enum target, sizei levels, enum internalformat,
16655bd8deadSopenharmony_ci                          sizei width, sizei height, sizei depth);
16665bd8deadSopenharmony_ci        void TextureStorage3D(uint texture, sizei levels, enum internalformat,
16675bd8deadSopenharmony_ci                              sizei width, sizei height, sizei depth);
16685bd8deadSopenharmony_ci
16695bd8deadSopenharmony_ci    specify all the levels of a three-dimensional, two-dimensional array
16705bd8deadSopenharmony_ci    texture or cube-map array texture (or, for TexStorage3D, proxy).
16715bd8deadSopenharmony_ci    TexStorage3D is described by the <target>-dependent pseudocode below:
16725bd8deadSopenharmony_ci
16735bd8deadSopenharmony_ci    (Include original TexStorage3D pseudocode, p. 249)
16745bd8deadSopenharmony_ci
16755bd8deadSopenharmony_ci    (add to the Errors section for TexStorage3D)
16765bd8deadSopenharmony_ci
16775bd8deadSopenharmony_ci    Errors
16785bd8deadSopenharmony_ci
16795bd8deadSopenharmony_ci    In addition to the generic errors described at the start of this
16805bd8deadSopenharmony_ci    section,
16815bd8deadSopenharmony_ci
16825bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage3D if the
16835bd8deadSopenharmony_ci    effective <target> is not one of those listed above.
16845bd8deadSopenharmony_ci
16855bd8deadSopenharmony_ci
16865bd8deadSopenharmony_ci    (Modify the introduction of TexStorage2DMultisample as follows, p. 250)
16875bd8deadSopenharmony_ci
16885bd8deadSopenharmony_ci    The commands
16895bd8deadSopenharmony_ci
16905bd8deadSopenharmony_ci        void TexStorage2DMultisample(enum target, sizei samples,
16915bd8deadSopenharmony_ci                                     enum internalformat, sizei width,
16925bd8deadSopenharmony_ci                                     sizei height,
16935bd8deadSopenharmony_ci                                     boolean fixedsamplelocations);
16945bd8deadSopenharmony_ci        void TextureStorage2DMultisample(uint texture, sizei samples,
16955bd8deadSopenharmony_ci                                         enum internalformat, sizei width,
16965bd8deadSopenharmony_ci                                         sizei height,
16975bd8deadSopenharmony_ci                                         boolean fixedsamplelocations);
16985bd8deadSopenharmony_ci
16995bd8deadSopenharmony_ci    specify a two-dimensional multisample texture (or, for
17005bd8deadSopenharmony_ci    TexStorage2DMultisample, proxy). For TexStorage2DMultisample, <target>
17015bd8deadSopenharmony_ci    must be TEXTURE_2D_MULTISAMPLE or PROXY_TEXTURE_2D_MULTISAMPLE. Calling
17025bd8deadSopenharmony_ci    TexStorage2DMultisample is equivalent to calling TexImage2DMultisample
17035bd8deadSopenharmony_ci    with the equivalently named parameters set to the same values, except
17045bd8deadSopenharmony_ci    that the resulting texture has immutable format.
17055bd8deadSopenharmony_ci
17065bd8deadSopenharmony_ci    Errors
17075bd8deadSopenharmony_ci
17085bd8deadSopenharmony_ci    In addition to the generic errors described at the start of this
17095bd8deadSopenharmony_ci    section,
17105bd8deadSopenharmony_ci
17115bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage2DMultisample
17125bd8deadSopenharmony_ci    if the effective <target> is not TEXTURE_2D_MULTISAMPLE.
17135bd8deadSopenharmony_ci
17145bd8deadSopenharmony_ci
17155bd8deadSopenharmony_ci    (Modify the introduction of TexStorage3DMultisample as follows, p. 250)
17165bd8deadSopenharmony_ci
17175bd8deadSopenharmony_ci    The commands
17185bd8deadSopenharmony_ci
17195bd8deadSopenharmony_ci        void TexStorage3DMultisample(enum target, sizei samples,
17205bd8deadSopenharmony_ci                                     enum internalformat, sizei width,
17215bd8deadSopenharmony_ci                                     sizei height, sizei depth,
17225bd8deadSopenharmony_ci                                     boolean fixedsamplelocations);
17235bd8deadSopenharmony_ci        void TextureStorage3DMultisample(uint texture, sizei samples,
17245bd8deadSopenharmony_ci                                         enum internalformat, sizei width,
17255bd8deadSopenharmony_ci                                         sizei height, sizei depth,
17265bd8deadSopenharmony_ci                                         boolean fixedsamplelocations);
17275bd8deadSopenharmony_ci
17285bd8deadSopenharmony_ci    specify a two-dimensional multisample array texture (or, for
17295bd8deadSopenharmony_ci    TexStorage3DMultisample, proxy). For TexStorage3DMultisample, <target>
17305bd8deadSopenharmony_ci    must be TEXTURE_2D_MULTISAMPLE_ARRAY or
17315bd8deadSopenharmony_ci    PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY.
17325bd8deadSopenharmony_ci
17335bd8deadSopenharmony_ci    Calling TexStorage3DMultisample is equivalent to calling
17345bd8deadSopenharmony_ci    TexImage3DMultisample with the equivalently named parameters set to the
17355bd8deadSopenharmony_ci    same values, except that the resulting texture has immutable format.
17365bd8deadSopenharmony_ci
17375bd8deadSopenharmony_ci    Errors
17385bd8deadSopenharmony_ci
17395bd8deadSopenharmony_ci    In addition to the generic errors described at the start of this
17405bd8deadSopenharmony_ci    section,
17415bd8deadSopenharmony_ci
17425bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by TextureStorage3DMultisample
17435bd8deadSopenharmony_ci    if the effective <target> is not TEXTURE_2D_MULTISAMPLE_ARRAY.
17445bd8deadSopenharmony_ci
17455bd8deadSopenharmony_ci
17465bd8deadSopenharmony_ciAdditions to Chapter 9 of the OpenGL 4.4 (core) Specification (Framebuffers and
17475bd8deadSopenharmony_ciFramebuffer Objects)
17485bd8deadSopenharmony_ci
17495bd8deadSopenharmony_ci    Modifications to Section 9.2, "Binding and Managing Framebuffer Objects"
17505bd8deadSopenharmony_ci
17515bd8deadSopenharmony_ci    (Insert the following, after the description of BindFramebuffer, p. 272)
17525bd8deadSopenharmony_ci
17535bd8deadSopenharmony_ci    Framebuffer objects may also be created with the command
17545bd8deadSopenharmony_ci
17555bd8deadSopenharmony_ci        void CreateFramebuffers(sizei n, uint *framebuffers);
17565bd8deadSopenharmony_ci
17575bd8deadSopenharmony_ci    CreateFramebuffers returns <n> previously unused framebuffer names in
17585bd8deadSopenharmony_ci    <framebuffers>, each representing a new framebuffer object which is a
17595bd8deadSopenharmony_ci    state vector, comprising all the state and with the same initial values
17605bd8deadSopenharmony_ci    listed in table 23.24, as well as one set of the state values listed in
17615bd8deadSopenharmony_ci    table 23.25 for each attachment point of the framebuffer, with the same
17625bd8deadSopenharmony_ci    initial values.
17635bd8deadSopenharmony_ci
17645bd8deadSopenharmony_ci    Errors
17655bd8deadSopenharmony_ci
17665bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by CreateFramebuffers if <n> is
17675bd8deadSopenharmony_ci    negative.
17685bd8deadSopenharmony_ci
17695bd8deadSopenharmony_ci
17705bd8deadSopenharmony_ci    Modifications to Section 9.2.1, "Framebuffer Object Parameters"
17715bd8deadSopenharmony_ci
17725bd8deadSopenharmony_ci    (Modify the introduction of FramebufferParameteri as follows, p. 274)
17735bd8deadSopenharmony_ci
17745bd8deadSopenharmony_ci    Parameters of a framebuffer object are set using the commands
17755bd8deadSopenharmony_ci
17765bd8deadSopenharmony_ci        void FramebufferParameteri(enum target, enum pname, int param);
17775bd8deadSopenharmony_ci        void NamedFramebufferParameteri(uint framebuffer, enum pname, int param);
17785bd8deadSopenharmony_ci
17795bd8deadSopenharmony_ci    For FramebufferParameteri, the framebuffer object is that bound to
17805bd8deadSopenharmony_ci    <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER, or
17815bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
17825bd8deadSopenharmony_ci    NamedFramebufferParameteri, <framebuffer> is the name of the framebuffer
17835bd8deadSopenharmony_ci    object.
17845bd8deadSopenharmony_ci
17855bd8deadSopenharmony_ci    <pname> specifies the parameter of the framebuffer object to set.
17865bd8deadSopenharmony_ci
17875bd8deadSopenharmony_ci    When a framebuffer ...
17885bd8deadSopenharmony_ci
17895bd8deadSopenharmony_ci    Errors
17905bd8deadSopenharmony_ci
17915bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferParameteri if
17925bd8deadSopenharmony_ci    <framebuffer> is not the name of an existing framebuffer object.
17935bd8deadSopenharmony_ci
17945bd8deadSopenharmony_ci
17955bd8deadSopenharmony_ci    Modifications to Section 9.2.3, "Framebuffer Object Queries"
17965bd8deadSopenharmony_ci
17975bd8deadSopenharmony_ci    (Modify the introduction of GetFramebufferParameteriv as follows, p. 277)
17985bd8deadSopenharmony_ci
17995bd8deadSopenharmony_ci    Parameters of a framebuffer object may be queried with the commands
18005bd8deadSopenharmony_ci
18015bd8deadSopenharmony_ci        void GetFramebufferParameteriv(enum target,
18025bd8deadSopenharmony_ci                                       enum pname,
18035bd8deadSopenharmony_ci                                       int *params);
18045bd8deadSopenharmony_ci        void GetNamedFramebufferParameteriv(uint framebuffer,
18055bd8deadSopenharmony_ci                                            enum pname,
18065bd8deadSopenharmony_ci                                            int *params);
18075bd8deadSopenharmony_ci
18085bd8deadSopenharmony_ci    For GetFramebufferParameteriv, the framebuffer object is that bound to
18095bd8deadSopenharmony_ci    <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER, or
18105bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
18115bd8deadSopenharmony_ci    GetNamedFramebufferParameteriv, <framebuffer> may be zero, indicating
18125bd8deadSopenharmony_ci    the default draw framebuffer, or the name of the framebuffer object.
18135bd8deadSopenharmony_ci
18145bd8deadSopenharmony_ci    The value of framebuffer parameter <pname> for the framebuffer object is
18155bd8deadSopenharmony_ci    returned in <params>.
18165bd8deadSopenharmony_ci
18175bd8deadSopenharmony_ci    Errors
18185bd8deadSopenharmony_ci
18195bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by
18205bd8deadSopenharmony_ci    GetNamedFramebufferParameteriv if <framebuffer> is not zero or the name
18215bd8deadSopenharmony_ci    of an existing framebuffer object.
18225bd8deadSopenharmony_ci
18235bd8deadSopenharmony_ci
18245bd8deadSopenharmony_ci    (Modify the introduction of GetFramebufferAttachmentParameter as
18255bd8deadSopenharmony_ci    follows, p. 277)
18265bd8deadSopenharmony_ci
18275bd8deadSopenharmony_ci    Attachments of a framebuffer object or buffers of a default framebuffer
18285bd8deadSopenharmony_ci    may be queried with the commands
18295bd8deadSopenharmony_ci
18305bd8deadSopenharmony_ci        void GetFramebufferAttachmentParameteriv(enum target,
18315bd8deadSopenharmony_ci                                                 enum attachment,
18325bd8deadSopenharmony_ci                                                 enum pname,
18335bd8deadSopenharmony_ci                                                 int *params);
18345bd8deadSopenharmony_ci        void GetNamedFramebufferAttachmentParameteriv(uint framebuffer,
18355bd8deadSopenharmony_ci                                                      enum attachment,
18365bd8deadSopenharmony_ci                                                      enum pname,
18375bd8deadSopenharmony_ci                                                      int *params);
18385bd8deadSopenharmony_ci
18395bd8deadSopenharmony_ci    For GetFramebufferAttachmentParameteriv, the framebuffer object is that
18405bd8deadSopenharmony_ci    bound to <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER, or
18415bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
18425bd8deadSopenharmony_ci    GetNamedFramebufferAttachmentParameteriv, <framebuffer> is zero or the
18435bd8deadSopenharmony_ci    name of the framebuffer object. If <framebuffer> is zero, then the
18445bd8deadSopenharmony_ci    default draw framebuffer is queried.
18455bd8deadSopenharmony_ci
18465bd8deadSopenharmony_ci    If a default framebuffer is queried, then <attachment> must be one of
18475bd8deadSopenharmony_ci    FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, or BACK_RIGHT, identifying a color
18485bd8deadSopenharmony_ci    buffer; DEPTH, identifying the depth buffer; or STENCIL, identifying the
18495bd8deadSopenharmony_ci    stencil buffer.
18505bd8deadSopenharmony_ci
18515bd8deadSopenharmony_ci    Otherwise, <attachment> must be one of the framebuffer object attachment
18525bd8deadSopenharmony_ci    points listed in table 9.1
18535bd8deadSopenharmony_ci
18545bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace the reference to
18555bd8deadSopenharmony_ci    "GetFramebufferAttachmentParameteriv" with
18565bd8deadSopenharmony_ci    "GetNamedFramebufferAttachmentParameteriv or
18575bd8deadSopenharmony_ci    GetFramebuffferAttachmentParameteriv", p. 278)
18585bd8deadSopenharmony_ci
18595bd8deadSopenharmony_ci    Errors
18605bd8deadSopenharmony_ci
18615bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by
18625bd8deadSopenharmony_ci    GetNamedFramebufferAttachmentParameteriv if <framebuffer> is not zero or
18635bd8deadSopenharmony_ci    the name of an existing framebuffer object.
18645bd8deadSopenharmony_ci
18655bd8deadSopenharmony_ci
18665bd8deadSopenharmony_ci    Modifications to Section 9.2.4, "Renderbuffer Objects"
18675bd8deadSopenharmony_ci
18685bd8deadSopenharmony_ci    (Insert the following after the description of BindRenderbuffer, p. 280)
18695bd8deadSopenharmony_ci
18705bd8deadSopenharmony_ci    New renderbuffers may also be created with the command
18715bd8deadSopenharmony_ci
18725bd8deadSopenharmony_ci        void CreateRenderbuffers(sizei n, uint *renderbuffers);
18735bd8deadSopenharmony_ci
18745bd8deadSopenharmony_ci    CreateRenderbuffers returns <n> previously unused renderbuffer names in
18755bd8deadSopenharmony_ci    <renderbuffers>, each representing a new renderbuffer object which is a
18765bd8deadSopenharmony_ci    state vector comprising all the state and with the initial values listed
18775bd8deadSopenharmony_ci    in table 23.27. The state of each renderbuffer object is as if a name
18785bd8deadSopenharmony_ci    returned from GenRenderbuffers had been bound to the RENDERBUFFER
18795bd8deadSopenharmony_ci    target, except that any existing binding to RENDERBUFFER is not
18805bd8deadSopenharmony_ci    affected.
18815bd8deadSopenharmony_ci
18825bd8deadSopenharmony_ci    Errors
18835bd8deadSopenharmony_ci
18845bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by CreateRenderbuffers if <n> is
18855bd8deadSopenharmony_ci    negative.
18865bd8deadSopenharmony_ci
18875bd8deadSopenharmony_ci    (Replace the introduction of RenderbufferStorageMultisample with the
18885bd8deadSopenharmony_ci    following, p. 282)
18895bd8deadSopenharmony_ci
18905bd8deadSopenharmony_ci    The data storage, format, dimensions, and number of samples of a
18915bd8deadSopenharmony_ci    renderbuffer object's image are established with the commands
18925bd8deadSopenharmony_ci
18935bd8deadSopenharmony_ci        void RenderbufferStorageMultisample(enum target,
18945bd8deadSopenharmony_ci                                            sizei samples,
18955bd8deadSopenharmony_ci                                            enum internalformat,
18965bd8deadSopenharmony_ci                                            sizei width, sizei height);
18975bd8deadSopenharmony_ci        void NamedRenderbufferStorageMultisample(uint renderbuffer,
18985bd8deadSopenharmony_ci                                                 sizei samples,
18995bd8deadSopenharmony_ci                                                 enum internalformat,
19005bd8deadSopenharmony_ci                                                 sizei width, sizei height);
19015bd8deadSopenharmony_ci
19025bd8deadSopenharmony_ci    For RenderbufferStorageMultisample, the renderbuffer object is that
19035bd8deadSopenharmony_ci    bound to <target>, which must be RENDERBUFFER. For
19045bd8deadSopenharmony_ci    NamedRenderbuferStorageMultisample, <renderbuffer> is the name of the
19055bd8deadSopenharmony_ci    renderbuffer object.
19065bd8deadSopenharmony_ci
19075bd8deadSopenharmony_ci    <internalformat> must be color-renderable, depth-renderable, or
19085bd8deadSopenharmony_ci    stencil-renderable (as defined in section 9.4). <width> and <height> are
19095bd8deadSopenharmony_ci    the dimensions, in pixels, of the renderbuffer.
19105bd8deadSopenharmony_ci
19115bd8deadSopenharmony_ci    (Retain the remainder of the section, but replace further references to
19125bd8deadSopenharmony_ci    "RenderbufferStorageMultisample" with "*RenderbufferStorageMultisample")
19135bd8deadSopenharmony_ci
19145bd8deadSopenharmony_ci    Errors
19155bd8deadSopenharmony_ci
19165bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by
19175bd8deadSopenharmony_ci    NamedRenderbufferStorageMultisample if <renderbuffer> is not the name of
19185bd8deadSopenharmony_ci    an existing renderbuffer object.
19195bd8deadSopenharmony_ci
19205bd8deadSopenharmony_ci
19215bd8deadSopenharmony_ci    (Insert the following at the end of Section 9.2.4, p. 283)
19225bd8deadSopenharmony_ci
19235bd8deadSopenharmony_ci    The command
19245bd8deadSopenharmony_ci
19255bd8deadSopenharmony_ci        void NamedRenderbufferStorage(uint renderbuffer,
19265bd8deadSopenharmony_ci                                      enum internalformat,
19275bd8deadSopenharmony_ci                                      sizei width, sizei height);
19285bd8deadSopenharmony_ci
19295bd8deadSopenharmony_ci    is equivalent to
19305bd8deadSopenharmony_ci
19315bd8deadSopenharmony_ci        NamedRenderbufferStorageMultisample(renderbuffer, 0, internalfomat,
19325bd8deadSopenharmony_ci                                            width, height);
19335bd8deadSopenharmony_ci
19345bd8deadSopenharmony_ci
19355bd8deadSopenharmony_ci    Modifications to Section 9.2.6, "Renderbuffer Object Queries"
19365bd8deadSopenharmony_ci
19375bd8deadSopenharmony_ci    (Replace the introduction of GetRenderbufferParameteriv by the following,
19385bd8deadSopenharmony_ci    p. 283)
19395bd8deadSopenharmony_ci
19405bd8deadSopenharmony_ci    Parameters of a renderbuffer object may be queried with the commands
19415bd8deadSopenharmony_ci
19425bd8deadSopenharmony_ci        void GetRenderbufferParameteriv(enum target,
19435bd8deadSopenharmony_ci                                        enum pname, int *params);
19445bd8deadSopenharmony_ci        void GetNamedRenderbufferParameteriv(uint renderbuffer,
19455bd8deadSopenharmony_ci                                         enum pname, int *params);
19465bd8deadSopenharmony_ci
19475bd8deadSopenharmony_ci    For GetRenderbufferParameteriv, the renderbuffer object is that bound to
19485bd8deadSopenharmony_ci    <target>, which must be RENDERBUFFER. For
19495bd8deadSopenharmony_ci    GetNamedRenderbufferParameteriv, <renderbuffer> is the name of the
19505bd8deadSopenharmony_ci    renderbuffer object.
19515bd8deadSopenharmony_ci
19525bd8deadSopenharmony_ci    The value of renderbuffer parameter <pname> for the renderbuffer object
19535bd8deadSopenharmony_ci    is returned in <params>. <pname> must be one of the symbolic values...
19545bd8deadSopenharmony_ci
19555bd8deadSopenharmony_ci    (Retain the remainder of the section but replace instances of "the
19565bd8deadSopenharmony_ci    renderbuffer currently bound to <target>" with "the renderbuffer
19575bd8deadSopenharmony_ci    object", p. 284)
19585bd8deadSopenharmony_ci
19595bd8deadSopenharmony_ci    Errors
19605bd8deadSopenharmony_ci
19615bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetRenderbufferParameteriv if
19625bd8deadSopenharmony_ci    zero is bound to <target>.
19635bd8deadSopenharmony_ci
19645bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by
19655bd8deadSopenharmony_ci    GetNamedRenderbufferParameteriv if <renderbuffer> is not the name of an
19665bd8deadSopenharmony_ci    existing renderbuffer object.
19675bd8deadSopenharmony_ci
19685bd8deadSopenharmony_ci
19695bd8deadSopenharmony_ci    Modifications to Section 9.2.7, "Attaching Renderbuffer Images to a
19705bd8deadSopenharmony_ci    Framebuffer"
19715bd8deadSopenharmony_ci
19725bd8deadSopenharmony_ci    (Modify the introduction of FramebufferRenderbuffer as follows, p. 284)
19735bd8deadSopenharmony_ci
19745bd8deadSopenharmony_ci    A renderbuffer object can be attached as one of the logical buffers of a
19755bd8deadSopenharmony_ci    framebuffer object with the commands
19765bd8deadSopenharmony_ci
19775bd8deadSopenharmony_ci        void FramebufferRenderbuffer(enum target, enum attachment,
19785bd8deadSopenharmony_ci                                     enum renderbuffertarget,
19795bd8deadSopenharmony_ci                                     uint renderbuffer);
19805bd8deadSopenharmony_ci        void NamedFramebufferRenderbuffer(uint framebuffer,
19815bd8deadSopenharmony_ci                                          enum attachment,
19825bd8deadSopenharmony_ci                                          enum renderbuffertarget,
19835bd8deadSopenharmony_ci                                          uint renderbuffer);
19845bd8deadSopenharmony_ci
19855bd8deadSopenharmony_ci    For FramebufferRenderbuffer the framebuffer object is that bound to
19865bd8deadSopenharmony_ci    <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER or
19875bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
19885bd8deadSopenharmony_ci    NamedFramebufferRenderbuffer, <framebuffer> is the name of the
19895bd8deadSopenharmony_ci    framebuffer object.
19905bd8deadSopenharmony_ci
19915bd8deadSopenharmony_ci    (Retain the remainder of the section but replace instances of
19925bd8deadSopenharmony_ci    "FramebufferRenderbuffer" with "*FramebufferRenderbuffer", and of "the
19935bd8deadSopenharmony_ci    framebuffer bound to <target>" with "the framebuffer object".
19945bd8deadSopenharmony_ci
19955bd8deadSopenharmony_ci    Errors
19965bd8deadSopenharmony_ci
19975bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferRenderbuffer
19985bd8deadSopenharmony_ci    if <framebuffer> is not the name of an existing framebuffer object.
19995bd8deadSopenharmony_ci
20005bd8deadSopenharmony_ci
20015bd8deadSopenharmony_ci    Modifications to Section 9.2.8, "Attaching Texture Images to a
20025bd8deadSopenharmony_ci    Framebuffer"
20035bd8deadSopenharmony_ci
20045bd8deadSopenharmony_ci    (Modify the introduction of FramebufferTexture as follows, p. 286)
20055bd8deadSopenharmony_ci
20065bd8deadSopenharmony_ci    To render directly into a texture image, a specified level of a texture
20075bd8deadSopenharmony_ci    object can be attached as one of the logical buffers of a framebuffer
20085bd8deadSopenharmony_ci    object with the commands
20095bd8deadSopenharmony_ci
20105bd8deadSopenharmony_ci        void FramebufferTexture(enum target, enum attachment,
20115bd8deadSopenharmony_ci                                uint texture, int level);
20125bd8deadSopenharmony_ci        void NamedFramebufferTexture(uint framebuffer, enum attachment,
20135bd8deadSopenharmony_ci                                     uint texture, int level);
20145bd8deadSopenharmony_ci
20155bd8deadSopenharmony_ci    For FramebufferTexture, the framebuffer object is that bound to
20165bd8deadSopenharmony_ci    <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER or
20175bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
20185bd8deadSopenharmony_ci    NamedFramebufferTexture, <framebuffer> is the name of the framebuffer
20195bd8deadSopenharmony_ci    object.
20205bd8deadSopenharmony_ci
20215bd8deadSopenharmony_ci    <attachment> must be one of the attachment points of the framebuffer
20225bd8deadSopenharmony_ci    listed in table 9.1.
20235bd8deadSopenharmony_ci
20245bd8deadSopenharmony_ci    If <texture> is zero, any image or array of images attached to the
20255bd8deadSopenharmony_ci    attachment point named by <attachment> is detached. Any additional
20265bd8deadSopenharmony_ci    parameters (<level>) are ignored when <texture> is zero.
20275bd8deadSopenharmony_ci
20285bd8deadSopenharmony_ci    If <texture> is non-zero, the specified mipmap <level> of the texture
20295bd8deadSopenharmony_ci    object named <texture> is attached to the framebuffer attachment point
20305bd8deadSopenharmony_ci    named by <attachment>.
20315bd8deadSopenharmony_ci
20325bd8deadSopenharmony_ci    If <texture> is the name of a three-dimensional texture, cube map texture,
20335bd8deadSopenharmony_ci    one- or two-dimensional array texture, cube map array texture, or two-
20345bd8deadSopenharmony_ci    dimensional multisample array texture, the texture level attached to the
20355bd8deadSopenharmony_ci    framebuffer attachment point is an array of images, and the framebuffer
20365bd8deadSopenharmony_ci    attachment is considered layered.
20375bd8deadSopenharmony_ci
20385bd8deadSopenharmony_ci    (Retain the remainder of the section.)
20395bd8deadSopenharmony_ci
20405bd8deadSopenharmony_ci    Errors
20415bd8deadSopenharmony_ci
20425bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferTexture if
20435bd8deadSopenharmony_ci    <framebuffer> is not the name of an existing framebuffer object.
20445bd8deadSopenharmony_ci
20455bd8deadSopenharmony_ci
20465bd8deadSopenharmony_ci    (Replace the introduction of FramebufferTextureLayer with the following,
20475bd8deadSopenharmony_ci    p. 288)
20485bd8deadSopenharmony_ci
20495bd8deadSopenharmony_ci    A single layer of a three-dimensional or array texture object can be
20505bd8deadSopenharmony_ci    attached as one of the logical buffers of a framebuffer object with the
20515bd8deadSopenharmony_ci    commands
20525bd8deadSopenharmony_ci
20535bd8deadSopenharmony_ci        void FramebufferTextureLayer(enum target, enum attachment,
20545bd8deadSopenharmony_ci                                     uint texture,
20555bd8deadSopenharmony_ci                                     int level, int layer);
20565bd8deadSopenharmony_ci        void NamedFramebufferTextureLayer(uint framebuffer, enum attachment,
20575bd8deadSopenharmony_ci                                          uint texture,
20585bd8deadSopenharmony_ci                                          int level, int layer);
20595bd8deadSopenharmony_ci
20605bd8deadSopenharmony_ci    These commands operate identically to the equivalent FramebufferTexture
20615bd8deadSopenharmony_ci    and NamedFramebufferTexture commands, respectively, except for the
20625bd8deadSopenharmony_ci    additional <layer> argument which selects a layer of the texture object
20635bd8deadSopenharmony_ci    to attach.
20645bd8deadSopenharmony_ci
20655bd8deadSopenharmony_ci    <layer> specifies the layer of a one- or two-dimensional image within
20665bd8deadSopenharmony_ci    <texture>, except for cube map and cube map array textures. For cube map
20675bd8deadSopenharmony_ci    textures, <layer> is translated into a cube map face as described in
20685bd8deadSopenharmony_ci    table 9.2. For cube map array textures, <layer> is translated into an
20695bd8deadSopenharmony_ci    array layer and a cube map face as described for layer-face numbers in
20705bd8deadSopenharmony_ci    section 8.5.3.
20715bd8deadSopenharmony_ci
20725bd8deadSopenharmony_ci    If <texture> is a three-dimensional texture, then ...
20735bd8deadSopenharmony_ci
20745bd8deadSopenharmony_ci    Errors
20755bd8deadSopenharmony_ci
20765bd8deadSopenharmony_ci    In addition to the corresponding errors for FramebufferTexture and
20775bd8deadSopenharmony_ci    NamedFramebufferTexture when called with the same parameters (other than
20785bd8deadSopenharmony_ci    <layer>):
20795bd8deadSopenharmony_ci
20805bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferTextureLayer
20815bd8deadSopenharmony_ci    if <framebuffer> is not the name of an existing framebuffer object.
20825bd8deadSopenharmony_ci
20835bd8deadSopenharmony_ci    (Remove the final two paragraphs of section 9.2.8, starting "Unlike
20845bd8deadSopenharmony_ci    FramebufferTexture3D...")
20855bd8deadSopenharmony_ci
20865bd8deadSopenharmony_ci
20875bd8deadSopenharmony_ci    Modifications to Section 9.2.8.1, "Effects of Attaching a Texture Image"
20885bd8deadSopenharmony_ci
20895bd8deadSopenharmony_ci    (change all references to FramebufferTexture* to *FramebufferTexture*,
20905bd8deadSopenharmony_ci    to include the NamedFramebufferTexture* variants)
20915bd8deadSopenharmony_ci
20925bd8deadSopenharmony_ci
20935bd8deadSopenharmony_ci    Modifications to Section 9.4.2, "Whole Framebuffer Completeness"
20945bd8deadSopenharmony_ci
20955bd8deadSopenharmony_ci    (Replace the defintion of CheckFramebufferStatus, p. 297)
20965bd8deadSopenharmony_ci
20975bd8deadSopenharmony_ci    The status of a framebuffer object or default framebuffer can be queried
20985bd8deadSopenharmony_ci    with the commands
20995bd8deadSopenharmony_ci
21005bd8deadSopenharmony_ci        enum CheckFramebufferStatus(enum target);
21015bd8deadSopenharmony_ci        enum CheckNamedFramebufferStatus(uint framebuffer, enum target);
21025bd8deadSopenharmony_ci
21035bd8deadSopenharmony_ci    For CheckFramebufferStatus, the framebuffer object is that bound to
21045bd8deadSopenharmony_ci    <target>. For CheckNamedFramebufferStatus, <framebuffer> is zero or the
21055bd8deadSopenharmony_ci    name of the framebuffer object.
21065bd8deadSopenharmony_ci
21075bd8deadSopenharmony_ci    <target> must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER or FRAMEBUFFER.
21085bd8deadSopenharmony_ci    FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER.
21095bd8deadSopenharmony_ci
21105bd8deadSopenharmony_ci    If <framebuffer> is zero, then the status of the default read or draw
21115bd8deadSopenharmony_ci    framebuffer (as determined by <target>) is returned.
21125bd8deadSopenharmony_ci
21135bd8deadSopenharmony_ci    A value is returned that identifies whether or not the framebuffer
21145bd8deadSopenharmony_ci    object or default framebuffer is complete when treated as a read or draw
21155bd8deadSopenharmony_ci    framebuffer (as determined by <target>). If the framebuffer object is
21165bd8deadSopenharmony_ci    complete, then FRAMEBUFFER_COMPLETE is returned. Otherwise, the value
21175bd8deadSopenharmony_ci    returned is one of the error codes defined at the start of section 9.4.2
21185bd8deadSopenharmony_ci    identifying one of the rules of framebuffer completeness that is
21195bd8deadSopenharmony_ci    violated.
21205bd8deadSopenharmony_ci
21215bd8deadSopenharmony_ci    Errors
21225bd8deadSopenharmony_ci
21235bd8deadSopenharmony_ci    If CheckFramebufferStatus generates an error, zero is returned.
21245bd8deadSopenharmony_ci
21255bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by CheckFramebufferStatus and
21265bd8deadSopenharmony_ci    CheckNamedFramebufferStatus if <target> is not DRAW_FRAMEBUFFER,
21275bd8deadSopenharmony_ci    READ_FRAMEBUFFER or FRAMEBUFFER.
21285bd8deadSopenharmony_ci
21295bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by CheckNamedFramebufferStatus
21305bd8deadSopenharmony_ci    if <framebuffer> is not zero or the name of an existing framebuffer
21315bd8deadSopenharmony_ci    object.
21325bd8deadSopenharmony_ci
21335bd8deadSopenharmony_ci
21345bd8deadSopenharmony_ciAdditions to Chapter 10 of the OpenGL 4.4 (core) Specification (Vertex
21355bd8deadSopenharmony_ciSpecification and Drawing Commands)
21365bd8deadSopenharmony_ci
21375bd8deadSopenharmony_ci    Modifications to Section 10.3, "Vertex Arrays"
21385bd8deadSopenharmony_ci
21395bd8deadSopenharmony_ci    (Insert the following after the introduction of vertex arrays, first
21405bd8deadSopenharmony_ci    paragraph of Section 10.3, p. 314)
21415bd8deadSopenharmony_ci
21425bd8deadSopenharmony_ci    All of the state required to represent the vertex arrays is
21435bd8deadSopenharmony_ci    stored in a vertex array object (VAO).
21445bd8deadSopenharmony_ci
21455bd8deadSopenharmony_ci
21465bd8deadSopenharmony_ci    (Insert all of Section 10.4, "Vertex Array Objects" as new section 10.3.1,
21475bd8deadSopenharmony_ci    renumber subsequent sections and delete the original section 10.4, p. 314)
21485bd8deadSopenharmony_ci
21495bd8deadSopenharmony_ci    (Insert the following after the description of BindVertexArray, p. 327)
21505bd8deadSopenharmony_ci
21515bd8deadSopenharmony_ci    Vertex array objects may also be created with the command
21525bd8deadSopenharmony_ci
21535bd8deadSopenharmony_ci        void CreateVertexArrays(sizei n, uint *arrays);
21545bd8deadSopenharmony_ci
21555bd8deadSopenharmony_ci    CreateVertexArrays returns <n> previously unused vertex array object
21565bd8deadSopenharmony_ci    names in <arrays>, each representing a state vector comprising all the
21575bd8deadSopenharmony_ci    state and with the same initial values listed in tables 23.3 and 23.4.
21585bd8deadSopenharmony_ci
21595bd8deadSopenharmony_ci    Errors
21605bd8deadSopenharmony_ci
21615bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by CreateVertexArrays if <n> is
21625bd8deadSopenharmony_ci    negative.
21635bd8deadSopenharmony_ci
21645bd8deadSopenharmony_ci
21655bd8deadSopenharmony_ci    (Insert the following after the description of IsVertexArray, p. 327)
21665bd8deadSopenharmony_ci
21675bd8deadSopenharmony_ci    To bind a buffer object to the element array buffer bind point of a
21685bd8deadSopenharmony_ci    vertex array object, use the command
21695bd8deadSopenharmony_ci
21705bd8deadSopenharmony_ci        void VertexArrayElementBuffer(uint vaobj, uint buffer);
21715bd8deadSopenharmony_ci
21725bd8deadSopenharmony_ci    <vaobj> is
21735bd8deadSopenharmony_ci      [compatibility profile:
21745bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
21755bd8deadSopenharmony_ci    the name of the vertex array object, and <buffer> is zero or the name of
21765bd8deadSopenharmony_ci    the buffer object. If <buffer> is zero, any existing element array
21775bd8deadSopenharmony_ci    buffer binding to <vaobj> is removed.
21785bd8deadSopenharmony_ci
21795bd8deadSopenharmony_ci    Errors
21805bd8deadSopenharmony_ci
21815bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayElementBuffer if
21825bd8deadSopenharmony_ci    <vaobj> is not
21835bd8deadSopenharmony_ci      [compatibility profile: zero or]
21845bd8deadSopenharmony_ci    the name of an existing vertex array object.
21855bd8deadSopenharmony_ci
21865bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <buffer> is not zero or the
21875bd8deadSopenharmony_ci    name of an existing buffer object.
21885bd8deadSopenharmony_ci
21895bd8deadSopenharmony_ci
21905bd8deadSopenharmony_ci    (Modify the introduction of EnableVertexAttribArray and
21915bd8deadSopenharmony_ci    DisableVertexAttribArray with the following, p. 320)
21925bd8deadSopenharmony_ci
21935bd8deadSopenharmony_ci    An individual generic vertex attribute array in a vertex array object
21945bd8deadSopenharmony_ci    is enabled with the commands
21955bd8deadSopenharmony_ci
21965bd8deadSopenharmony_ci        void EnableVertexAttribArray(uint index);
21975bd8deadSopenharmony_ci        void EnableVertexArrayAttrib(uint vaobj, uint index);
21985bd8deadSopenharmony_ci
21995bd8deadSopenharmony_ci    and is disabled with the commands
22005bd8deadSopenharmony_ci
22015bd8deadSopenharmony_ci        void DisableVertexAttribArray(uint index);
22025bd8deadSopenharmony_ci        void DisableVertexArrayAttrib(uint vaobj, uint index);
22035bd8deadSopenharmony_ci
22045bd8deadSopenharmony_ci    <index> is the generic vertex attribute array to enable or disable. For
22055bd8deadSopenharmony_ci    EnableVertexAttribArray and DisableVertexAttribArray, the vertex array
22065bd8deadSopenharmony_ci    object is the currently bound vertex array object. For
22075bd8deadSopenharmony_ci    EnableVertexArrayAttrib and DisableVertexArrayAttrib, <vaobj> is
22085bd8deadSopenharmony_ci      [compatibility profile:
22095bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
22105bd8deadSopenharmony_ci    the name of the vertex array object.
22115bd8deadSopenharmony_ci
22125bd8deadSopenharmony_ci    Errors
22135bd8deadSopenharmony_ci
22145bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by EnableVertexAttribArray and
22155bd8deadSopenharmony_ci    DisableVertexAttribArray if no vertex array object is bound.
22165bd8deadSopenharmony_ci
22175bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by EnableVertexArrayAttrib and
22185bd8deadSopenharmony_ci    DisableVertexArrayAttrib if <vaobj> is not
22195bd8deadSopenharmony_ci      [compatibility profile: zero or]
22205bd8deadSopenharmony_ci    the name of an existing vertex array object.
22215bd8deadSopenharmony_ci
22225bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <index> is greater than or equal
22235bd8deadSopenharmony_ci    to the value of MAX_VERTEX_ATTRIBS.
22245bd8deadSopenharmony_ci
22255bd8deadSopenharmony_ci
22265bd8deadSopenharmony_ci    Modifications to Subsection 10.3.2 (which was previously 10.3.1),
22275bd8deadSopenharmony_ci    "Specifying Arrays for Generic Vertex Attributes"
22285bd8deadSopenharmony_ci
22295bd8deadSopenharmony_ci    (Replace the introduction of the subsection with the following, p. 314)
22305bd8deadSopenharmony_ci
22315bd8deadSopenharmony_ci    To specify the organization of arrays storing generic vertex attributes
22325bd8deadSopenharmony_ci    of a vertex array object, use the commands
22335bd8deadSopenharmony_ci
22345bd8deadSopenharmony_ci        void VertexAttribFormat(uint attribindex, int size,
22355bd8deadSopenharmony_ci                                enum type, boolean normalized,
22365bd8deadSopenharmony_ci                                uint relativeoffset);
22375bd8deadSopenharmony_ci        void VertexAttribIFormat(uint attribindex, int size,
22385bd8deadSopenharmony_ci                                 enum type, uint relativeoffset);
22395bd8deadSopenharmony_ci        void VertexAttribLFormat(uint attribindex, int size,
22405bd8deadSopenharmony_ci                                 enum type, uint relativeoffset);
22415bd8deadSopenharmony_ci        void VertexArrayAttribFormat(uint vaobj, uint attribindex, int size,
22425bd8deadSopenharmony_ci                                     enum type, boolean normalized,
22435bd8deadSopenharmony_ci                                     uint relativeoffset);
22445bd8deadSopenharmony_ci        void VertexArrayAttribIFormat(uint vaobj, uint attribindex, int size,
22455bd8deadSopenharmony_ci                                      enum type, uint relativeoffset);
22465bd8deadSopenharmony_ci        void VertexArrayAttribLFormat(uint vaobj, uint attribindex, int size,
22475bd8deadSopenharmony_ci                                      enum type, uint relativeoffset);
22485bd8deadSopenharmony_ci
22495bd8deadSopenharmony_ci    For VertexAttrib*Format, the vertex array object is that bound to
22505bd8deadSopenharmony_ci    VERTEX_ARRAY_BINDING. For VertexArrayAttrib*Format, <vaobj> is
22515bd8deadSopenharmony_ci      [compatibility profile:
22525bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
22535bd8deadSopenharmony_ci    the name of the vertex array object.
22545bd8deadSopenharmony_ci
22555bd8deadSopenharmony_ci    (Retain remainder of language.)
22565bd8deadSopenharmony_ci
22575bd8deadSopenharmony_ci    Errors
22585bd8deadSopenharmony_ci
22595bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayAttrib*Format if
22605bd8deadSopenharmony_ci    <vaobj> is not
22615bd8deadSopenharmony_ci      [compatibility profile: zero or]
22625bd8deadSopenharmony_ci    the name of an existing vertex array object.
22635bd8deadSopenharmony_ci
22645bd8deadSopenharmony_ci
22655bd8deadSopenharmony_ci    (Modify the introduction of BindVertexBuffer with the following, p. 317)
22665bd8deadSopenharmony_ci
22675bd8deadSopenharmony_ci    The source of data for a generic vertex attribute may be determined by
22685bd8deadSopenharmony_ci    attaching a buffer object to a vertex array object with the commands
22695bd8deadSopenharmony_ci
22705bd8deadSopenharmony_ci        void BindVertexBuffer(uint bindingindex, uint buffer,
22715bd8deadSopenharmony_ci                              intptr offset, sizei stride);
22725bd8deadSopenharmony_ci        void VertexArrayVertexBuffer(uint vaobj, uint bindingindex,
22735bd8deadSopenharmony_ci                                     uint buffer, intptr offset,
22745bd8deadSopenharmony_ci                                     sizei stride);
22755bd8deadSopenharmony_ci
22765bd8deadSopenharmony_ci    For BindVertexBuffer, the vertex array object is the currently bound
22775bd8deadSopenharmony_ci    vertex array object. For VertexArrayVertexBuffer, <vaobj> is
22785bd8deadSopenharmony_ci      [compatibility profile:
22795bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
22805bd8deadSopenharmony_ci    the name of the vertex array object.
22815bd8deadSopenharmony_ci
22825bd8deadSopenharmony_ci    <buffer> is either zero or
22835bd8deadSopenharmony_ci      [compatibility profile: an unused name.
22845bd8deadSopenharmony_ci       core profile: a name returned by GenBuffers or CreateBuffers.]
22855bd8deadSopenharmony_ci
22865bd8deadSopenharmony_ci    If <buffer> is zero, any buffer object attached to <bindingindex> is
22875bd8deadSopenharmony_ci    detached.
22885bd8deadSopenharmony_ci
22895bd8deadSopenharmony_ci    If <buffer> is not the name of an existing buffer object, the GL first
22905bd8deadSopenharmony_ci    creates a new state vector, initialized with a zero-sized memory buffer
22915bd8deadSopenharmony_ci    and comprising all the state and with the same initial values listed in
22925bd8deadSopenharmony_ci    table 6.2, just as for BindBuffer. <buffer> is then attached to the
22935bd8deadSopenharmony_ci    specified <bindingindex> of the vertex array object.
22945bd8deadSopenharmony_ci
22955bd8deadSopenharmony_ci    When sourcing vertex data from the buffer object, <offset> specifies the
22965bd8deadSopenharmony_ci    offset in basic machine units of the first element in the vertex buffer.
22975bd8deadSopenharmony_ci    Pointers to the <i>th and <i+1>st elements of the array differ by
22985bd8deadSopenharmony_ci    <stride> basic machine units, the pointer to the <i+1>st element being
22995bd8deadSopenharmony_ci    greater.
23005bd8deadSopenharmony_ci
23015bd8deadSopenharmony_ci    If the operation is successful no change is made to the state of the
23025bd8deadSopenharmony_ci    buffer object, and any previous attachment to <bindingindex> is broken.
23035bd8deadSopenharmony_ci
23045bd8deadSopenharmony_ci    Errors
23055bd8deadSopenharmony_ci
23065bd8deadSopenharmony_ci      [core profile only:
23075bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by BindVertexBuffer if no vertex
23085bd8deadSopenharmony_ci    array object is bound.
23095bd8deadSopenharmony_ci
23105bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <buffer> is not zero or a
23115bd8deadSopenharmony_ci    name returned from a previous call to GenBuffers or CreateBuffers, or if
23125bd8deadSopenharmony_ci    such a name has since been deleted with DeleteBuffers.
23135bd8deadSopenharmony_ci      ]
23145bd8deadSopenharmony_ci
23155bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayVertexBuffer if
23165bd8deadSopenharmony_ci    <vaobj> is not
23175bd8deadSopenharmony_ci      [compatibility profile: zero or]
23185bd8deadSopenharmony_ci    the name of an existing vertex array object.
23195bd8deadSopenharmony_ci
23205bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <bindingindex> is greater than or
23215bd8deadSopenharmony_ci    equal to the value of MAX_VERTEX_ATTRIB_BINDINGS.
23225bd8deadSopenharmony_ci
23235bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <stride> or <offset> is negative,
23245bd8deadSopenharmony_ci    or if <stride> is greater than the value of MAX_VERTEX_ATTRIB_STRIDE.
23255bd8deadSopenharmony_ci
23265bd8deadSopenharmony_ci
23275bd8deadSopenharmony_ci    The source of data for multiple vertex attributes may be determined by
23285bd8deadSopenharmony_ci    attaching multiple existing buffer objects to a vertex array object with
23295bd8deadSopenharmony_ci    the commands
23305bd8deadSopenharmony_ci
23315bd8deadSopenharmony_ci        void BindVertexBuffers(uint first, sizei count,
23325bd8deadSopenharmony_ci                               const uint *buffers,
23335bd8deadSopenharmony_ci                               const intptr *offsets,
23345bd8deadSopenharmony_ci                               const sizei *strides);
23355bd8deadSopenharmony_ci        void VertexArrayVertexBuffers(uint vaobj, uint first, sizei count,
23365bd8deadSopenharmony_ci                                      const uint *buffers,
23375bd8deadSopenharmony_ci                                      const intptr *offsets,
23385bd8deadSopenharmony_ci                                      const sizei *strides);
23395bd8deadSopenharmony_ci
23405bd8deadSopenharmony_ci    For BindVertexBuffers, the vertex array object is the currently bound
23415bd8deadSopenharmony_ci    vertex array object. For VertexArrayVertexBuffers, <vaobj> is
23425bd8deadSopenharmony_ci      [compatibility profile:
23435bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
23445bd8deadSopenharmony_ci    the name of the vertex array object.
23455bd8deadSopenharmony_ci
23465bd8deadSopenharmony_ci    <count> existing buffer objects are attached to vertex buffer binding
23475bd8deadSopenharmony_ci    points numbered <first> through <first> + <count> - 1. ...
23485bd8deadSopenharmony_ci
23495bd8deadSopenharmony_ci    BindVertexBuffers is equivalent (assuming no errors are generated) to
23505bd8deadSopenharmony_ci
23515bd8deadSopenharmony_ci    (Retain pseudocode example)
23525bd8deadSopenharmony_ci
23535bd8deadSopenharmony_ci    except the buffers  will not be created if they do not exist.
23545bd8deadSopenharmony_ci
23555bd8deadSopenharmony_ci    VertexArrayVertexBuffers is equivalent to the pseudocode above, but
23565bd8deadSopenharmony_ci    replacing BindVertexBuffer(args) with VertexArrayVertexBuffers(vaobj,
23575bd8deadSopenharmony_ci    args).
23585bd8deadSopenharmony_ci
23595bd8deadSopenharmony_ci    The values specified ...
23605bd8deadSopenharmony_ci
23615bd8deadSopenharmony_ci    Errors
23625bd8deadSopenharmony_ci
23635bd8deadSopenharmony_ci      [core profile only:
23645bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by BindVertexBuffers if no
23655bd8deadSopenharmony_ci    vertex array object is bound.
23665bd8deadSopenharmony_ci      ]
23675bd8deadSopenharmony_ci
23685bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayVertexBuffer if
23695bd8deadSopenharmony_ci    <vaobj> is not
23705bd8deadSopenharmony_ci      [compatibility profile: zero or]
23715bd8deadSopenharmony_ci    the name of an existing vertex array object.
23725bd8deadSopenharmony_ci
23735bd8deadSopenharmony_ci    (Retain existing list of errors)
23745bd8deadSopenharmony_ci
23755bd8deadSopenharmony_ci
23765bd8deadSopenharmony_ci    (Modify the introduction of VertexAttribBinding with the following, p. 340)
23775bd8deadSopenharmony_ci
23785bd8deadSopenharmony_ci    The association between a vertex attribute and the vertex buffer binding
23795bd8deadSopenharmony_ci    used by that attribute is set by the commands
23805bd8deadSopenharmony_ci
23815bd8deadSopenharmony_ci        void VertexAttribBinding(uint attribindex, uint bindingindex);
23825bd8deadSopenharmony_ci        void VertexArrayAttribBinding(uint vaobj, uint attribindex,
23835bd8deadSopenharmony_ci                                      uint bindingindex);
23845bd8deadSopenharmony_ci
23855bd8deadSopenharmony_ci    For VertexAttribBinding, the vertex array object is the currently bound
23865bd8deadSopenharmony_ci    vertex array object. For VertexArrayAttribBinding, <vaobj> is
23875bd8deadSopenharmony_ci      [compatibility profile:
23885bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
23895bd8deadSopenharmony_ci    the name of the vertex array object.
23905bd8deadSopenharmony_ci
23915bd8deadSopenharmony_ci    Errors
23925bd8deadSopenharmony_ci
23935bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayAttribBinding if
23945bd8deadSopenharmony_ci    <vaobj> is not
23955bd8deadSopenharmony_ci      [compatibility profile: zero or]
23965bd8deadSopenharmony_ci    the name of an existing vertex array object.
23975bd8deadSopenharmony_ci
23985bd8deadSopenharmony_ci
23995bd8deadSopenharmony_ci    Modifications to Subsection 10.3.3, "Vertex Attribute Divisors"
24005bd8deadSopenharmony_ci
24015bd8deadSopenharmony_ci    (Replace the description of VertexBindingDivisor, p. 320)
24025bd8deadSopenharmony_ci
24035bd8deadSopenharmony_ci    The divisor value for attributes taken from a target vertex array object
24045bd8deadSopenharmony_ci    is set with the commands
24055bd8deadSopenharmony_ci
24065bd8deadSopenharmony_ci        void VertexBindingDivisor(uint bindingindex, uint divisor);
24075bd8deadSopenharmony_ci        void VertexArrayBindingDivisor(uint vaobj, uint bindingindex,
24085bd8deadSopenharmony_ci                                       uint divisor);
24095bd8deadSopenharmony_ci
24105bd8deadSopenharmony_ci    For VertexBindingDivisor, the vertex array object is the currently bound
24115bd8deadSopenharmony_ci    vertex array object. For VertexArrayBindingDivisor, <vaobj> is
24125bd8deadSopenharmony_ci      [compatibility profile:
24135bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
24145bd8deadSopenharmony_ci    the name of the vertex array object. These commands set the divisor for
24155bd8deadSopenharmony_ci    the buffer bound to the specified <bindingindex> of the vertex array
24165bd8deadSopenharmony_ci    object to <divisor>.
24175bd8deadSopenharmony_ci
24185bd8deadSopenharmony_ci    Errors
24195bd8deadSopenharmony_ci
24205bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by VertexArrayBindingDivisor if
24215bd8deadSopenharmony_ci    <vaobj> is not
24225bd8deadSopenharmony_ci      [compatibility profile: zero or]
24235bd8deadSopenharmony_ci    the name of an existing vertex array object.
24245bd8deadSopenharmony_ci
24255bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <bindingindex> is greater than or
24265bd8deadSopenharmony_ci    equal to the value of MAX_VERTEX_ATTRIB_BINDINGS.
24275bd8deadSopenharmony_ci
24285bd8deadSopenharmony_ci
24295bd8deadSopenharmony_ci    Modifications to Section 10.4, "Vertex Array Objects"
24305bd8deadSopenharmony_ci
24315bd8deadSopenharmony_ci    (Move this section to subsection 10.3.1 and delete Section 10.4,
24325bd8deadSopenharmony_ci    renumber subsequent section, p. 325)
24335bd8deadSopenharmony_ci
24345bd8deadSopenharmony_ci    Modifications to Section 10.5 (was 10.6), "Vertex Array and Vertex Array
24355bd8deadSopenharmony_ci    Object Queries"
24365bd8deadSopenharmony_ci
24375bd8deadSopenharmony_ci    (Insert the following at the start of the section, p. 338)
24385bd8deadSopenharmony_ci
24395bd8deadSopenharmony_ci    To query parameters of a vertex array object, use the command
24405bd8deadSopenharmony_ci
24415bd8deadSopenharmony_ci        void GetVertexArrayiv(uint vaobj, enum pname, int *param);
24425bd8deadSopenharmony_ci
24435bd8deadSopenharmony_ci    <vaobj> is
24445bd8deadSopenharmony_ci      [compatibility profile:
24455bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
24465bd8deadSopenharmony_ci    the name of the vertex array object. The value of parameter <pname> for
24475bd8deadSopenharmony_ci    attribute <index> of <vaobj> is returned in <param>. <pname> must be
24485bd8deadSopenharmony_ci    ELEMENT_ARRAY_BUFFER_BINDING.
24495bd8deadSopenharmony_ci
24505bd8deadSopenharmony_ci    Errors
24515bd8deadSopenharmony_ci
24525bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <vaobj> is not
24535bd8deadSopenharmony_ci      [compatibility profile: zero or]
24545bd8deadSopenharmony_ci    the name of an existing vertex array object.
24555bd8deadSopenharmony_ci
24565bd8deadSopenharmony_ci    An INVALID_ENUM error is generated if <pname> is not
24575bd8deadSopenharmony_ci    ELEMENT_ARRAY_BUFFER_BINDING.
24585bd8deadSopenharmony_ci
24595bd8deadSopenharmony_ci
24605bd8deadSopenharmony_ci    To query parameters of an attribute of a vertex array object, use
24615bd8deadSopenharmony_ci    the commands
24625bd8deadSopenharmony_ci
24635bd8deadSopenharmony_ci        void GetVertexArrayIndexediv(uint vaobj,
24645bd8deadSopenharmony_ci                                     uint index,
24655bd8deadSopenharmony_ci                                     enum pname,
24665bd8deadSopenharmony_ci                                     int *param);
24675bd8deadSopenharmony_ci        void GetVertexArrayIndexed64iv(uint vaobj,
24685bd8deadSopenharmony_ci                                       uint index,
24695bd8deadSopenharmony_ci                                       enum pname,
24705bd8deadSopenharmony_ci                                       int64 *param);
24715bd8deadSopenharmony_ci
24725bd8deadSopenharmony_ci    <vaobj> is
24735bd8deadSopenharmony_ci      [compatibility profile:
24745bd8deadSopenharmony_ci       zero, indicating the default vertex array object, or]
24755bd8deadSopenharmony_ci    the name of the vertex array object. The value of parameter <pname> for
24765bd8deadSopenharmony_ci    attribute <index> of <vaobj> is returned in <param>.
24775bd8deadSopenharmony_ci
24785bd8deadSopenharmony_ci    For GetVertexArrayIndexediv, <pname> must be one of
24795bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_ENABLED, VERTEX_ATTRIB_ARRAY_SIZE,
24805bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_STRIDE, VERTEX_ATTRIB_ARRAY_TYPE,
24815bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_NORMALIZED, VERTEX_ATTRIB_ARRAY_INTEGER,
24825bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_LONG, VERTEX_ATTRIB_ARRAY_DIVISOR, or
24835bd8deadSopenharmony_ci    VERTEX_ATTRIB_RELATIVE_OFFSET. For GetVertexArrayIndexed64iv, <pname>
24845bd8deadSopenharmony_ci    must be VERTEX_BINDING_OFFSET.
24855bd8deadSopenharmony_ci
24865bd8deadSopenharmony_ci    Errors
24875bd8deadSopenharmony_ci
24885bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <vaobj> is not
24895bd8deadSopenharmony_ci      [compatibility profile: zero or]
24905bd8deadSopenharmony_ci    the name of an existing vertex array object.
24915bd8deadSopenharmony_ci
24925bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <index> is greater than or equal
24935bd8deadSopenharmony_ci    to the value of MAX_VERTEX_ATTRIBS.
24945bd8deadSopenharmony_ci
24955bd8deadSopenharmony_ci    An INVALID_ENUM error is generated if <pname> is not one of the valid
24965bd8deadSopenharmony_ci    values listed above for the corresponding command.
24975bd8deadSopenharmony_ci
24985bd8deadSopenharmony_ci
24995bd8deadSopenharmony_ciAdditions to Chapter 13 of the OpenGL 4.4 (core) Specification (Fixed-Function
25005bd8deadSopenharmony_ciVertex Post-Processing)
25015bd8deadSopenharmony_ci
25025bd8deadSopenharmony_ci    Modifications to Section 13.2.2, "Transform Feedback Primitive Capture"
25035bd8deadSopenharmony_ci
25045bd8deadSopenharmony_ci    (Insert the following after the description of BindTransformFeedback, p.
25055bd8deadSopenharmony_ci    398)
25065bd8deadSopenharmony_ci
25075bd8deadSopenharmony_ci    New transform feedback objects may also be created with the command
25085bd8deadSopenharmony_ci
25095bd8deadSopenharmony_ci        void CreateTransformFeedbacks(sizei n, uint *ids);
25105bd8deadSopenharmony_ci
25115bd8deadSopenharmony_ci    CreateTransformFeedbacks returns <n> previously unused transform
25125bd8deadSopenharmony_ci    feedback object names in <ids>, each representing a new state vector,
25135bd8deadSopenharmony_ci    comprising the state and with all the same initial values listed in
25145bd8deadSopenharmony_ci    table 23.48.
25155bd8deadSopenharmony_ci
25165bd8deadSopenharmony_ci    Errors
25175bd8deadSopenharmony_ci
25185bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by CreateTransformFeedbacks if <n>
25195bd8deadSopenharmony_ci    is negative.
25205bd8deadSopenharmony_ci
25215bd8deadSopenharmony_ci
25225bd8deadSopenharmony_ci    (Replace the paragraph beginning with "Regions of buffer objects are
25235bd8deadSopenharmony_ci    bound as ..." after the description of ResumeTransformFeedback, p. 400)
25245bd8deadSopenharmony_ci
25255bd8deadSopenharmony_ci    Regions of buffer objects are bound as targets of the currently bound
25265bd8deadSopenharmony_ci    transform feedback object by calling one of the BindBuffer* commands
25275bd8deadSopenharmony_ci    (see sections 6.1 and 6.2) with <target> set to
25285bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER. Alternatively, regions of buffer objects may
25295bd8deadSopenharmony_ci    be bound directly to a transform feedback object with the commands
25305bd8deadSopenharmony_ci
25315bd8deadSopenharmony_ci        void TransformFeedbackBufferRange(uint xfb, uint index,
25325bd8deadSopenharmony_ci                                          uint buffer, intptr offset,
25335bd8deadSopenharmony_ci                                          sizeiptr size);
25345bd8deadSopenharmony_ci        void TransformFeedbackBufferBase(uint xfb, uint index, uint buffer);
25355bd8deadSopenharmony_ci
25365bd8deadSopenharmony_ci    <xfb> must be zero or the name of an existing transform feedback object,
25375bd8deadSopenharmony_ci    and <buffer> must be the name of an existing buffer object.
25385bd8deadSopenharmony_ci    TransformFeedbackBufferRange and TransformFeedbackBufferBase behave
25395bd8deadSopenharmony_ci    similarly to BindBufferRange and BindBufferBase, respectively, except
25405bd8deadSopenharmony_ci    that the target of the operation is <xfb>, and they do not affect any
25415bd8deadSopenharmony_ci    binding to the generic TRANSFORM_FEEDBACK_BUFFER target.
25425bd8deadSopenharmony_ci
25435bd8deadSopenharmony_ci    Errors
25445bd8deadSopenharmony_ci
25455bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if <xfb> is not zero or the name
25465bd8deadSopenharmony_ci    of an existing transform feedback object.
25475bd8deadSopenharmony_ci
25485bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <buffer> is not zero or the name
25495bd8deadSopenharmony_ci    of an existing buffer object.
25505bd8deadSopenharmony_ci
25515bd8deadSopenharmony_ci    An INVALID_VALUE error is generated if <index> is greater than or equal
25525bd8deadSopenharmony_ci    to the number of binding points for transform feedback, as described in
25535bd8deadSopenharmony_ci    section 6.7.1.
25545bd8deadSopenharmony_ci
25555bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by TransformFeedbackBufferRange if
25565bd8deadSopenharmony_ci    <offset> is negative.
25575bd8deadSopenharmony_ci
25585bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by TransformFeedbackBufferRange if
25595bd8deadSopenharmony_ci    <size> is less than or equal to zero.
25605bd8deadSopenharmony_ci
25615bd8deadSopenharmony_ci    An INVALID_VALUE error is generated by TransformFeedbackBufferRange if
25625bd8deadSopenharmony_ci    <offset> or <size> do not satisfy the constraints described for those
25635bd8deadSopenharmony_ci    parameters for transform feedback array bindings, as described in
25645bd8deadSopenharmony_ci    section 6.7.1.
25655bd8deadSopenharmony_ci
25665bd8deadSopenharmony_ci
25675bd8deadSopenharmony_ciAdditions to Chapter 17 of the OpenGL 4.4 (core) Specification (Writing
25685bd8deadSopenharmony_ciFragments and Samples to the Framebuffer)
25695bd8deadSopenharmony_ci
25705bd8deadSopenharmony_ci    Modifications to Section 17.4.1, "Selecting Buffers for Writing"
25715bd8deadSopenharmony_ci
25725bd8deadSopenharmony_ci    (Modify the introduction and description of DrawBuffer with the following,
25735bd8deadSopenharmony_ci    p. 467)
25745bd8deadSopenharmony_ci
25755bd8deadSopenharmony_ci    The first such operation is controlling the color buffers into which each
25765bd8deadSopenharmony_ci    of the fragment color values is written. This is accomplished with one of
25775bd8deadSopenharmony_ci    DrawBuffer, NamedFramebufferDrawBuffer, DrawBuffers or
25785bd8deadSopenharmony_ci    NamedFramebufferDrawBuffers.
25795bd8deadSopenharmony_ci
25805bd8deadSopenharmony_ci    The set of buffers of a framebuffer object to which fragment color zero
25815bd8deadSopenharmony_ci    is written is controlled with the commands
25825bd8deadSopenharmony_ci
25835bd8deadSopenharmony_ci        void DrawBuffer(enum buf);
25845bd8deadSopenharmony_ci        void NamedFramebufferDrawBuffer(uint framebuffer, enum buf);
25855bd8deadSopenharmony_ci
25865bd8deadSopenharmony_ci    For DrawBuffer, the framebuffer object is that bound to the
25875bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER binding. For NamedFramebufferDrawBuffer, <framebuffer>
25885bd8deadSopenharmony_ci    is zero or the name of a framebuffer object. If <framebuffer> is zero,
25895bd8deadSopenharmony_ci    then the default framebuffer is affected.
25905bd8deadSopenharmony_ci
25915bd8deadSopenharmony_ci    Errors
25925bd8deadSopenharmony_ci
25935bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferDrawBuffer if
25945bd8deadSopenharmony_ci    <framebuffer> is not zero or the name of an existing framebuffer object.
25955bd8deadSopenharmony_ci
25965bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the default framebuffer is
25975bd8deadSopenharmony_ci    affected and <buf> is a value (other than NONE) that does not indicate
25985bd8deadSopenharmony_ci    one of the color buffers allocated to the default framebuffer.
25995bd8deadSopenharmony_ci
26005bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if a framebuffer object is
26015bd8deadSopenharmony_ci    affected and <buf> is one of the constants from table 17.4 (other than
26025bd8deadSopenharmony_ci    NONE), or COLOR_ATTACHMENT<m> and <m> is greater than or equal to the
26035bd8deadSopenharmony_ci    value of MAX_COLOR_ATTACHMENTS.
26045bd8deadSopenharmony_ci
26055bd8deadSopenharmony_ci
26065bd8deadSopenharmony_ci    (Modify the introduction and description of DrawBuffers with the following,
26075bd8deadSopenharmony_ci    p. 469)
26085bd8deadSopenharmony_ci
26095bd8deadSopenharmony_ci    The set of buffers of a framebuffer object to which all fragment colors
26105bd8deadSopenharmony_ci    are written is controlled with the commands
26115bd8deadSopenharmony_ci
26125bd8deadSopenharmony_ci        void DrawBuffers(sizei n, const enum *bufs);
26135bd8deadSopenharmony_ci        void NamedFramebufferDrawBuffers(uint framebuffer, sizei n,
26145bd8deadSopenharmony_ci                                    const enum *bufs);
26155bd8deadSopenharmony_ci
26165bd8deadSopenharmony_ci    For DrawBuffer, the framebuffer object is that bound to the
26175bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER binding. For NamedFramebufferDrawBuffer, <framebuffer>
26185bd8deadSopenharmony_ci    is zero or the name of a framebuffer object. If <framebuffer> is zero,
26195bd8deadSopenharmony_ci    then the default framebuffer is affected.
26205bd8deadSopenharmony_ci
26215bd8deadSopenharmony_ci    (Modify the language in the following paragraphs referring to
26225bd8deadSopenharmony_ci    "DRAW_FRAMEBUFFER_BINDING" to read "DRAW_FRAMEBUFFER_BINDING or
26235bd8deadSopenharmony_ci    <framebuffer>", p. 469)
26245bd8deadSopenharmony_ci
26255bd8deadSopenharmony_ci    (Modify the sentences beginning with "If the GL is bound to" to read "If
26265bd8deadSopenharmony_ci    the referenced framebuffer is", p. 469)
26275bd8deadSopenharmony_ci
26285bd8deadSopenharmony_ci    Errors
26295bd8deadSopenharmony_ci
26305bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferDrawBuffers
26315bd8deadSopenharmony_ci    if <framebuffer> is not zero or the name of an existing framebuffer
26325bd8deadSopenharmony_ci    object.
26335bd8deadSopenharmony_ci
26345bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the default framebuffer is
26355bd8deadSopenharmony_ci    affected and any value in <bufs> is a constant (other than NONE or BACK)
26365bd8deadSopenharmony_ci    that does not indicate one of the color buffers allocated to the default
26375bd8deadSopenharmony_ci    framebuffer.
26385bd8deadSopenharmony_ci
26395bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if a framebuffer object is
26405bd8deadSopenharmony_ci    affected and any value in <bufs> is a constant from table 17.6, or
26415bd8deadSopenharmony_ci    COLOR_ATTACHMENT<m> and <m> is greater than or equal to the value of
26425bd8deadSopenharmony_ci    MAX_COLOR_ATTACHMENTS.
26435bd8deadSopenharmony_ci
26445bd8deadSopenharmony_ci
26455bd8deadSopenharmony_ci    Modifications in Section 17.4.3.1, "Clearing Individual Buffers".
26465bd8deadSopenharmony_ci
26475bd8deadSopenharmony_ci    (Modify the introduction of ClearBuffer{if ui}v with the following, p. 474)
26485bd8deadSopenharmony_ci
26495bd8deadSopenharmony_ci    Individual buffers of a framebuffer object may be cleared with the
26505bd8deadSopenharmony_ci    commands
26515bd8deadSopenharmony_ci
26525bd8deadSopenharmony_ci        void ClearBuffer{if ui}v(enum buffer, int drawbuffer, const T* value);
26535bd8deadSopenharmony_ci        void ClearNamedFramebuffer{if ui}v(uint framebuffer, enum buffer,
26545bd8deadSopenharmony_ci                                           int drawbuffer, const T* value);
26555bd8deadSopenharmony_ci
26565bd8deadSopenharmony_ci    For ClearBuffer*, the framebuffer object is that bound to the
26575bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER binding. For ClearNamedFramebuffer*, <framebuffer> is
26585bd8deadSopenharmony_ci    zero or the name of a framebuffer object. If <framebuffer> is zero, then
26595bd8deadSopenharmony_ci    the default framebuffer is affected.
26605bd8deadSopenharmony_ci
26615bd8deadSopenharmony_ci    <buffer> and <drawbuffer> identify a buffer to clear, and <value>
26625bd8deadSopenharmony_ci    specifies the values to clear it to. The *fv, *iv, and *uiv forms of
26635bd8deadSopenharmony_ci    these commands should be used to clear fixed- and floating-point, signed
26645bd8deadSopenharmony_ci    integer, and unsigned integer color buffers respectively.
26655bd8deadSopenharmony_ci
26665bd8deadSopenharmony_ci    (Retain remainder of section, but insert references to ClearFramebuffer*
26675bd8deadSopenharmony_ci    wherever there are additional references to ClearBuffer*, p. 474-475)
26685bd8deadSopenharmony_ci
26695bd8deadSopenharmony_ci    (Modify the introduction of ClearBufferfi with the following, p. 475)
26705bd8deadSopenharmony_ci
26715bd8deadSopenharmony_ci    Both depth and stencil buffers of a framebuffer object may be cleared
26725bd8deadSopenharmony_ci    with the commands
26735bd8deadSopenharmony_ci
26745bd8deadSopenharmony_ci        void ClearBufferfi(enum buffer, int drawbuffer, float depth, int stencil);
26755bd8deadSopenharmony_ci        void ClearNamedFramebufferfi(uint framebuffer, enum buffer, int drawbuffer,
26765bd8deadSopenharmony_ci                                     float depth, int stencil);
26775bd8deadSopenharmony_ci
26785bd8deadSopenharmony_ci    For ClearBufferfi, the framebuffer object is that bound to the
26795bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER binding. For ClearNamedFramebufferfi, <framebuffer> is
26805bd8deadSopenharmony_ci    zero or the name of a framebuffer object. If <framebuffer> is zero, then
26815bd8deadSopenharmony_ci    the default framebuffer is affected.
26825bd8deadSopenharmony_ci
26835bd8deadSopenharmony_ci    <buffer> must be DEPTH_STENCIL ...
26845bd8deadSopenharmony_ci
26855bd8deadSopenharmony_ci    Errors
26865bd8deadSopenharmony_ci
26875bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by ClearNamedFramebuffer* if
26885bd8deadSopenharmony_ci    <framebuffer> is not zero or the name of an existing framebuffer object.
26895bd8deadSopenharmony_ci
26905bd8deadSopenharmony_ci
26915bd8deadSopenharmony_ci    Modifications in Section 17.4.4, "Invalidating Framebuffer Contents"
26925bd8deadSopenharmony_ci
26935bd8deadSopenharmony_ci    (Modify the introduction of InvalidateSubFramebuffer as following, p. 476)
26945bd8deadSopenharmony_ci
26955bd8deadSopenharmony_ci    To signal that the GL need not preserve all contents of a framebuffer
26965bd8deadSopenharmony_ci    object (invalidating portions of every pixel or a subregion of pixels),
26975bd8deadSopenharmony_ci    use the commands
26985bd8deadSopenharmony_ci
26995bd8deadSopenharmony_ci        void InvalidateSubFramebuffer(enum target, sizei numAttachments,
27005bd8deadSopenharmony_ci                                      const enum *attachments, inx x,
27015bd8deadSopenharmony_ci                                      int y, sizei width, sizei height);
27025bd8deadSopenharmony_ci        void InvalidateNamedFramebufferSubData(uint framebuffer,
27035bd8deadSopenharmony_ci                                               sizei numAttachments,
27045bd8deadSopenharmony_ci                                               const enum *attachments,
27055bd8deadSopenharmony_ci                                               int x, int y,
27065bd8deadSopenharmony_ci                                               sizei width, sizei height);
27075bd8deadSopenharmony_ci
27085bd8deadSopenharmony_ci    For InvalidateSubFramebuffer, the framebuffer object is that bound to
27095bd8deadSopenharmony_ci    <target>, which must be DRAW_FRAMEBUFFER, READ_FRAMEBUFFER or
27105bd8deadSopenharmony_ci    FRAMEBUFFER. FRAMEBUFFER is equivalent to DRAW_FRAMEBUFFER. For
27115bd8deadSopenharmony_ci    InvalidateNamedFramebufferSubData, <framebuffer> is the name of the
27125bd8deadSopenharmony_ci    framebuffer object. If <framebuffer> is zero, the default draw
27135bd8deadSopenharmony_ci    framebuffer is affected.
27145bd8deadSopenharmony_ci
27155bd8deadSopenharmony_ci    (Retain the remainder of the language)
27165bd8deadSopenharmony_ci
27175bd8deadSopenharmony_ci    Errors
27185bd8deadSopenharmony_ci
27195bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by
27205bd8deadSopenharmony_ci    InvalidateNamedFramebufferSubData if <framebuffer> is not zero or the
27215bd8deadSopenharmony_ci    name of an existing framebuffer object.
27225bd8deadSopenharmony_ci
27235bd8deadSopenharmony_ci
27245bd8deadSopenharmony_ci    (Modify the introduction of InvalidateFramebuffer with the following,
27255bd8deadSopenharmony_ci    p. 477)
27265bd8deadSopenharmony_ci
27275bd8deadSopenharmony_ci    The commands
27285bd8deadSopenharmony_ci
27295bd8deadSopenharmony_ci        void InvalidateFramebuffer(enum target, sizei numAttachments,
27305bd8deadSopenharmony_ci                                   const enum *attachments);
27315bd8deadSopenharmony_ci        void InvalidateNamedFramebufferData(uint framebuffer,
27325bd8deadSopenharmony_ci                                            sizei numAttachments,
27335bd8deadSopenharmony_ci                                            const enum *attachments);
27345bd8deadSopenharmony_ci
27355bd8deadSopenharmony_ci    are equivalent to
27365bd8deadSopenharmony_ci
27375bd8deadSopenharmony_ci        InvalidateSubFramebuffer(target, numAttachments, attachments,
27385bd8deadSopenharmony_ci                                 0, 0, vw, vh);
27395bd8deadSopenharmony_ci
27405bd8deadSopenharmony_ci    and
27415bd8deadSopenharmony_ci
27425bd8deadSopenharmony_ci        InvalidateNamedFramebufferSubData(framebuffer, numAttachments,
27435bd8deadSopenharmony_ci                                          attachments, 0, 0, vw, vh);
27445bd8deadSopenharmony_ci
27455bd8deadSopenharmony_ci    respectively, where <vw> and <vh> are equal to the maximum viewport width
27465bd8deadSopenharmony_ci    and height, respectively, obtained by querying MAX_VIEWPORT_DIMS.
27475bd8deadSopenharmony_ci
27485bd8deadSopenharmony_ciAdditions to Chapter 18 of the OpenGL 4.4 (core) Specification (Reading and
27495bd8deadSopenharmony_ciCopying Pixels)
27505bd8deadSopenharmony_ci
27515bd8deadSopenharmony_ci    Modifications in Section 18.2.1 "Selecting Buffers for Reading"
27525bd8deadSopenharmony_ci
27535bd8deadSopenharmony_ci    (Modify the introduction of ReadBuffer with the following, p. 478)
27545bd8deadSopenharmony_ci
27555bd8deadSopenharmony_ci    When reading pixels from a color buffer of a framebuffer object, the
27565bd8deadSopenharmony_ci    buffer selected for reading is termed the <read buffer>, and is
27575bd8deadSopenharmony_ci    controlled with the commands
27585bd8deadSopenharmony_ci
27595bd8deadSopenharmony_ci        void ReadBuffer(enum src);
27605bd8deadSopenharmony_ci        void NamedFramebufferReadBuffer(uint framebuffer, enum src);
27615bd8deadSopenharmony_ci
27625bd8deadSopenharmony_ci    For ReadBuffer, the framebuffer object is that bound to
27635bd8deadSopenharmony_ci    READ_FRAMEBUFFER. For NamedFramebufferReadBuffer, <framebuffer> is zero
27645bd8deadSopenharmony_ci    or the name of the framebuffer object. If <framebuffer> is zero, the
27655bd8deadSopenharmony_ci    default read framebuffer is affected.
27665bd8deadSopenharmony_ci
27675bd8deadSopenharmony_ci    If the default framebuffer is affected (see chapter 9), <src> must be
27685bd8deadSopenharmony_ci    one of the values listed in table 17.4 ...
27695bd8deadSopenharmony_ci
27705bd8deadSopenharmony_ci    If a framebuffer object is affected, <src> must be one of the values
27715bd8deadSopenharmony_ci    listed in table 17.5 ...
27725bd8deadSopenharmony_ci
27735bd8deadSopenharmony_ci    (Retain the remainder of this section)
27745bd8deadSopenharmony_ci
27755bd8deadSopenharmony_ci    Errors
27765bd8deadSopenharmony_ci
27775bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by NamedFramebufferReadBuffer if
27785bd8deadSopenharmony_ci    <framebuffer> is not zero or the name of an existing framebuffer object.
27795bd8deadSopenharmony_ci
27805bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the default framebuffer is
27815bd8deadSopenharmony_ci    affected, and <src> is a value (other than NONE) that does not indicate
27825bd8deadSopenharmony_ci    any of the color buffers allocated to the default framebuffer.
27835bd8deadSopenharmony_ci
27845bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if a framebuffer object is
27855bd8deadSopenharmony_ci    affected, <src> is one of the constants from table 17.4 (other than
27865bd8deadSopenharmony_ci    NONE, or COLOR_ATTACHMENTm where m is greater than or equal to the value
27875bd8deadSopenharmony_ci    of MAX_COLOR_ATTACHMENTS.
27885bd8deadSopenharmony_ci
27895bd8deadSopenharmony_ci
27905bd8deadSopenharmony_ci
27915bd8deadSopenharmony_ci    Modifications in Section 18.3.1 "Blitting Pixel Rectangles"
27925bd8deadSopenharmony_ci
27935bd8deadSopenharmony_ci    (Modify the introduction of BlitFramebuffer with the following, p. 487)
27945bd8deadSopenharmony_ci
27955bd8deadSopenharmony_ci    To transfer a rectangle of pixel values from one region of a source
27965bd8deadSopenharmony_ci    framebuffer to another region of a destination framebuffer, use the
27975bd8deadSopenharmony_ci    commands The commands
27985bd8deadSopenharmony_ci
27995bd8deadSopenharmony_ci        void BlitFramebuffer(int srcX0, int srcY0,
28005bd8deadSopenharmony_ci                             int srcX1, int srcY1,
28015bd8deadSopenharmony_ci                             int dstX0, int dstY0,
28025bd8deadSopenharmony_ci                             int dstX1, int dstY1,
28035bd8deadSopenharmony_ci                             bitfield mask, enum filter);
28045bd8deadSopenharmony_ci        void BlitNamedFramebuffer(uint readFramebuffer, uint drawFramebuffer,
28055bd8deadSopenharmony_ci                                  int srcX0, int srcY0,
28065bd8deadSopenharmony_ci                                  int srcX1, int srcY1,
28075bd8deadSopenharmony_ci                                  int dstX0, int dstY0,
28085bd8deadSopenharmony_ci                                  int dstX1, int dstY1,
28095bd8deadSopenharmony_ci                                  bitfield mask, enum filter);
28105bd8deadSopenharmony_ci
28115bd8deadSopenharmony_ci    For BlitFramebuffer, the source and destination framebuffers are those
28125bd8deadSopenharmony_ci    bound to READ_FRAMEBUFFER and DRAW_FRAMEBUFFER respectively. For
28135bd8deadSopenharmony_ci    BlitNamedFramebuffer, <readFramebuffer> and <drawFramebuffer> are the
28145bd8deadSopenharmony_ci    names of the source and destination framebuffers respectively.
28155bd8deadSopenharmony_ci
28165bd8deadSopenharmony_ci    If no framebuffer is bound to READ_FRAMEBUFFER or DRAW_FRAMEBUFFER (for
28175bd8deadSopenharmony_ci    BlitFramebuffer), or if <readFramebuffer> or <drawFramebuffer> is zero
28185bd8deadSopenharmony_ci    (for BlitNamedFramebuffer), then the default read or draw framebuffer is
28195bd8deadSopenharmony_ci    used as the corresponding source or destination framebuffer,
28205bd8deadSopenharmony_ci    respectively.
28215bd8deadSopenharmony_ci
28225bd8deadSopenharmony_ci    <mask> is zero or the bitwise OR ...
28235bd8deadSopenharmony_ci
28245bd8deadSopenharmony_ci    (Retain the remainder of this section)
28255bd8deadSopenharmony_ci
28265bd8deadSopenharmony_ci    Errors
28275bd8deadSopenharmony_ci
28285bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by BlitNamedFramebuffer if
28295bd8deadSopenharmony_ci    <readFramebuffer> or <drawFramebuffer> is not zero or the name of an
28305bd8deadSopenharmony_ci    existing framebuffer object.
28315bd8deadSopenharmony_ci
28325bd8deadSopenharmony_ci
28335bd8deadSopenharmony_ciAdditions to Chapter 22 of the OpenGL 4.4 (core) specification, "Context State
28345bd8deadSopenharmony_ciQueries"
28355bd8deadSopenharmony_ci
28365bd8deadSopenharmony_ci    (Add Subsection 22.4, "Transform Feedback State Queries", p. 527)
28375bd8deadSopenharmony_ci
28385bd8deadSopenharmony_ci    State of the currently bound transform feedback object may be queried by
28395bd8deadSopenharmony_ci    calling GetIntegerv, GetIntegeri_v, GetInteger64i_v, GetBooleanv, or
28405bd8deadSopenharmony_ci    other simple query functions with <pname> set to one of the tokens
28415bd8deadSopenharmony_ci    listed in table 23.48.
28425bd8deadSopenharmony_ci
28435bd8deadSopenharmony_ci    Alternatively, the state of a transform feedback object may be queried
28445bd8deadSopenharmony_ci    with the commands
28455bd8deadSopenharmony_ci
28465bd8deadSopenharmony_ci        void GetTransformFeedbackiv(uint xfb, enum pname, int *param);
28475bd8deadSopenharmony_ci
28485bd8deadSopenharmony_ci        void GetTransformFeedbacki_v(uint xfb, enum pname, uint index,
28495bd8deadSopenharmony_ci                                     int *param);
28505bd8deadSopenharmony_ci
28515bd8deadSopenharmony_ci        void GetTransformFeedbacki64_v(uint xfb, enum pname, uint index,
28525bd8deadSopenharmony_ci                                       int64 *param);
28535bd8deadSopenharmony_ci
28545bd8deadSopenharmony_ci    <xfb> must be zero, indicating the default transform feedback object, or
28555bd8deadSopenharmony_ci    the name of an existing transform feedback object. <pname> must be one
28565bd8deadSopenharmony_ci    of the tokens listed in table 23.48, depending on the command name as
28575bd8deadSopenharmony_ci    shown in the errors section below. For indexed state, <index> is the
28585bd8deadSopenharmony_ci    index of the transform feedback stream. <param> is the address of a
28595bd8deadSopenharmony_ci    variable to receive the result of the query.
28605bd8deadSopenharmony_ci
28615bd8deadSopenharmony_ci    Errors
28625bd8deadSopenharmony_ci
28635bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated by GetTransformFeedbackiv,
28645bd8deadSopenharmony_ci    GetTransformFeedbacki_v and GetTransformFeedbacki64_v if <xfb> is not
28655bd8deadSopenharmony_ci    zero or the name of an existing transform feedback object.
28665bd8deadSopenharmony_ci
28675bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by GetTransformFeedbackiv if <pname>
28685bd8deadSopenharmony_ci    is not TRANSFORM_FEEDBACK_PAUSED or TRANSFORM_FEEDBACK_ACTIVE.
28695bd8deadSopenharmony_ci
28705bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by GetTransformFeedbacki_v if <pname>
28715bd8deadSopenharmony_ci    is not TRANSFORM_FEEDBACK_BUFFER_BINDING.
28725bd8deadSopenharmony_ci
28735bd8deadSopenharmony_ci    An INVALID_ENUM error is generated by GetTransformFeedbacki64_v if
28745bd8deadSopenharmony_ci    <pname> is not TRANSFORM_FEEDBACK_BUFFER_START or
28755bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER_SIZE.
28765bd8deadSopenharmony_ci
28775bd8deadSopenharmony_ci    An INVALID_VALID error is generated by GetTransformFeedbacki_v and
28785bd8deadSopenharmony_ci    GetTransformFeedbacki64_v if <index> is greater than or equal to the
28795bd8deadSopenharmony_ci    number of binding points for transform feedback, as described in section
28805bd8deadSopenharmony_ci    6.7.1.
28815bd8deadSopenharmony_ci
28825bd8deadSopenharmony_ci
28835bd8deadSopenharmony_ci    (Add Subsection 22.5, "Indexed Binding State Queries", p. 527)
28845bd8deadSopenharmony_ci
28855bd8deadSopenharmony_ci    The name of the texture object bound to the active texture unit may be
28865bd8deadSopenharmony_ci    queried by calling GetIntegerv with <pname> TEXTURE_BINDING_1D,
28875bd8deadSopenharmony_ci    TEXTURE_BINDING_1D_ARRAY, TEXTURE_BINDING_2D, TEXTURE_BINDING_2D_ARRAY,
28885bd8deadSopenharmony_ci    TEXTURE_BINDING_2D_MULTISAMPLE, TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY,
28895bd8deadSopenharmony_ci    TEXTURE_BINDING_3D, TEXTURE_BINDING_BUFFER, TEXTURE_BINDING_CUBE_MAP,
28905bd8deadSopenharmony_ci    TEXTURE_BINDING_CUBE_MAP_ARRAY, or TEXTURE_BINDING_RECTANGLE.
28915bd8deadSopenharmony_ci    Likewise, the current sampler bound to the active
28925bd8deadSopenharmony_ci    texture unit may be queried by calling GetIntegerv with <pname>
28935bd8deadSopenharmony_ci    SAMPLER_BINDING.
28945bd8deadSopenharmony_ci
28955bd8deadSopenharmony_ci    To query the bound texture or sampler object bound to a specific texture
28965bd8deadSopenharmony_ci    unit without changing the active texture selector, call GetIntegeri_v
28975bd8deadSopenharmony_ci    with one of the valid <pname>s listed above, and with <index> set to the
28985bd8deadSopenharmony_ci    zero-based texture unit index to be queried.
28995bd8deadSopenharmony_ci
29005bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
29015bd8deadSopenharmony_ci
29025bd8deadSopenharmony_ci    TBD.
29035bd8deadSopenharmony_ci
29045bd8deadSopenharmony_ciGLX Protocol
29055bd8deadSopenharmony_ci
29065bd8deadSopenharmony_ci    TBD.
29075bd8deadSopenharmony_ci
29085bd8deadSopenharmony_ciNew State
29095bd8deadSopenharmony_ci
29105bd8deadSopenharmony_ci    Append to Table 23.15, "Textures (state per texture object)"
29115bd8deadSopenharmony_ci
29125bd8deadSopenharmony_ci    +-----------------------------------+-------+------------------------+---------------------+------------------------------------+---------+
29135bd8deadSopenharmony_ci    | Get Value                         | Type  | Get Command            | Initial Value       | Description                        | Sec.    |
29145bd8deadSopenharmony_ci    +-----------------------------------+-------+------------------------+---------------------+------------------------------------+---------+
29155bd8deadSopenharmony_ci    | TEXTURE_TARGET                    | E     | GetTexParameteriv      | NONE                | Target of texture object           | 8.11    |
29165bd8deadSopenharmony_ci    |                                   |       | GetTextureParameteriv  |                     |                                    |         |
29175bd8deadSopenharmony_ci    +-----------------------------------+-------+------------------------+---------------------+------------------------------------+---------+
29185bd8deadSopenharmony_ci
29195bd8deadSopenharmony_ci
29205bd8deadSopenharmony_ci    Append to Table 23.44, "Query Object State"
29215bd8deadSopenharmony_ci
29225bd8deadSopenharmony_ci    +-----------------------------------+-------+--------------------+--------------------------------+------------------------------------+---------+
29235bd8deadSopenharmony_ci    | Get Value                         | Type  | Get Command        | Initial Value                  | Description                        | Sec.    |
29245bd8deadSopenharmony_ci    +-----------------------------------+-------+--------------------+--------------------------------+------------------------------------+---------+
29255bd8deadSopenharmony_ci    | QUERY_TARGET                      | E     | GetQueryObjectiv   | NONE                           | Target of query object             | 4.2     |
29265bd8deadSopenharmony_ci    +-----------------------------------+-------+--------------------+--------------------------------+------------------------------------+---------+
29275bd8deadSopenharmony_ci
29285bd8deadSopenharmony_ci
29295bd8deadSopenharmony_ciModified state tables
29305bd8deadSopenharmony_ci
29315bd8deadSopenharmony_ci    Modify Table 23.3, "Vertex Array Object State"
29325bd8deadSopenharmony_ci
29335bd8deadSopenharmony_ci    Add GetVertexArrayAttribiv in 'Get Command' for
29345bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_ENABLED,
29355bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_SIZE,
29365bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_STRIDE,
29375bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_TYPE,
29385bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_NORMALIZED,
29395bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_INTEGER,
29405bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_LONG,
29415bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_DIVISOR, and
29425bd8deadSopenharmony_ci    VERTEX_ATTRIB_RELATIVE_OFFSET states
29435bd8deadSopenharmony_ci
29445bd8deadSopenharmony_ci
29455bd8deadSopenharmony_ci    Modify Table 23.4, "Vertex Array Object State"
29465bd8deadSopenharmony_ci
29475bd8deadSopenharmony_ci    Add GetVertexArrayiv in 'Get Command' for
29485bd8deadSopenharmony_ci    ELEMENT_ARRAY_BUFFER_BINDING state
29495bd8deadSopenharmony_ci
29505bd8deadSopenharmony_ci    Add GetVertexArrayIndexediv in 'Get Command' for
29515bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
29525bd8deadSopenharmony_ci    VERTEX_ATTRIB_BINDING,
29535bd8deadSopenharmony_ci    VERTEX_ATTRIB_RELATIVE_OFFSET,
29545bd8deadSopenharmony_ci    VERTEX_BINDING_OFFSET, and
29555bd8deadSopenharmony_ci    VERTEX_BINDING_STRIDE states
29565bd8deadSopenharmony_ci
29575bd8deadSopenharmony_ci    Add GetVertexArrayIndexed64iv in 'Get Command' for
29585bd8deadSopenharmony_ci    VERTEX_BINDING_OFFSET state
29595bd8deadSopenharmony_ci
29605bd8deadSopenharmony_ci
29615bd8deadSopenharmony_ci    Modify Table 23.6, "Buffer Object State"
29625bd8deadSopenharmony_ci
29635bd8deadSopenharmony_ci    Add GetNamedBufferSubData in 'Get Command' for
29645bd8deadSopenharmony_ci    the entry described as "Buffer data".
29655bd8deadSopenharmony_ci
29665bd8deadSopenharmony_ci    Add GetNamedBufferParameteri64v in 'Get Command' for
29675bd8deadSopenharmony_ci    BUFFER_USAGE,
29685bd8deadSopenharmony_ci    BUFFER_ACCESS,
29695bd8deadSopenharmony_ci    BUFFER_ACCESS_FLAGS, and
29705bd8deadSopenharmony_ci    BUFFER_MAP_LENGTH states
29715bd8deadSopenharmony_ci
29725bd8deadSopenharmony_ci    Add GetNamedBufferParameteriv in 'Get Command' for
29735bd8deadSopenharmony_ci    BUFFER_SIZE,
29745bd8deadSopenharmony_ci    BUFFER_MAP_OFFSET,
29755bd8deadSopenharmony_ci    BUFFER_MAP_LENGTH,
29765bd8deadSopenharmony_ci    BUFFER_IMMUTABLE_STORAGE,
29775bd8deadSopenharmony_ci    BUFFER_STORAGE_FLAGS, and
29785bd8deadSopenharmony_ci    BUFFER_MAPPED states
29795bd8deadSopenharmony_ci
29805bd8deadSopenharmony_ci    Add GetNamedBufferPointerv in 'Get Command' for
29815bd8deadSopenharmony_ci    BUFFER_MAP_POINTER state
29825bd8deadSopenharmony_ci
29835bd8deadSopenharmony_ci
29845bd8deadSopenharmony_ci    Modify Table 23.12, "Textures (state per texture unit)"
29855bd8deadSopenharmony_ci
29865bd8deadSopenharmony_ci    Add GetIntegeri_v in 'Get Command' for
29875bd8deadSopenharmony_ci    TEXTURE_BINDING_1D,
29885bd8deadSopenharmony_ci    TEXTURE_BINDING_1D_ARRAY,
29895bd8deadSopenharmony_ci    TEXTURE_BINDING_2D,
29905bd8deadSopenharmony_ci    TEXTURE_BINDING_2D_ARRAY,
29915bd8deadSopenharmony_ci    TEXTURE_BINDING_2D_MULTISAMPLE,
29925bd8deadSopenharmony_ci    TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY
29935bd8deadSopenharmony_ci    TEXTURE_BINDING_3D,
29945bd8deadSopenharmony_ci    TEXTURE_BINDING_BUFFER,
29955bd8deadSopenharmony_ci    TEXTURE_BINDING_CUBE_MAP,
29965bd8deadSopenharmony_ci    TEXTURE_BINDING_CUBE_MAP_ARRAY, and
29975bd8deadSopenharmony_ci    TEXTURE_BINDING_RECTANGLE states
29985bd8deadSopenharmony_ci
29995bd8deadSopenharmony_ci
30005bd8deadSopenharmony_ci    Modify Table 23.14, "Textures (state per texture object)"
30015bd8deadSopenharmony_ci
30025bd8deadSopenharmony_ci    Add GetTextureParameteriv in 'Get Command' for
30035bd8deadSopenharmony_ci    TEXTURE_SWIZZLE_R,
30045bd8deadSopenharmony_ci    TEXTURE_SWIZZLE_G,
30055bd8deadSopenharmony_ci    TEXTURE_SWIZZLE_B,
30065bd8deadSopenharmony_ci    TEXTURE_SWIZZLE_A,
30075bd8deadSopenharmony_ci    TEXTURE_MIN_FILTER,
30085bd8deadSopenharmony_ci    TEXTURE_MAG_FILTER,
30095bd8deadSopenharmony_ci    TEXTURE_WRAP_S,
30105bd8deadSopenharmony_ci    TEXTURE_WRAP_T,
30115bd8deadSopenharmony_ci    TEXTURE_WRAP_R,
30125bd8deadSopenharmony_ci    DEPTH_STENCIL_TEXTURE_MODE,
30135bd8deadSopenharmony_ci    TEXTURE_COMPARE_MODE,
30145bd8deadSopenharmony_ci    TEXTURE_COMPARE_FUNC,
30155bd8deadSopenharmony_ci    IMAGE_FORMAT_COMPATIBILITY_TYPE,
30165bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_FORMAT,
30175bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_LEVELS,
30185bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LEVEL,
30195bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LEVELS,
30205bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LAYER and
30215bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS states
30225bd8deadSopenharmony_ci
30235bd8deadSopenharmony_ci    Add GetTextureParameterfv in 'Get Command' for
30245bd8deadSopenharmony_ci    TEXTURE_BORDER_COLOR,
30255bd8deadSopenharmony_ci    TEXTURE_MIN_LOD,
30265bd8deadSopenharmony_ci    TEXTURE_MAX_LOD,
30275bd8deadSopenharmony_ci    TEXTURE_BASE_LEVEL,
30285bd8deadSopenharmony_ci    TEXTURE_MAX_LEVEL and
30295bd8deadSopenharmony_ci    TEXTURE_LOD_BIAS states.
30305bd8deadSopenharmony_ci
30315bd8deadSopenharmony_ci
30325bd8deadSopenharmony_ci    Modify Table 23.16 and 2317, "Textures (state per texture image)"
30335bd8deadSopenharmony_ci
30345bd8deadSopenharmony_ci    Add GetTextureLevelParameterv in 'Get Command' for each state of
30355bd8deadSopenharmony_ci    the table.
30365bd8deadSopenharmony_ci
30375bd8deadSopenharmony_ci
30385bd8deadSopenharmony_ci    Modify Table 23.25. "Framebuffer (state per attachment point)"
30395bd8deadSopenharmony_ci
30405bd8deadSopenharmony_ci    Add GetNamedFramebufferAttachmentParameteriv in 'Get Command'
30415bd8deadSopenharmony_ci    for each state of the table.
30425bd8deadSopenharmony_ci
30435bd8deadSopenharmony_ci
30445bd8deadSopenharmony_ci    Modify Table 23.27. "Renderbuffer (state per renderbuffer object)"
30455bd8deadSopenharmony_ci
30465bd8deadSopenharmony_ci    Add GetNamedRenderbufferParameteriv in 'Get Command' for
30475bd8deadSopenharmony_ci    RENDERBUFFER_WIDTH,
30485bd8deadSopenharmony_ci    RENDERBUFFER_HEIGHT,
30495bd8deadSopenharmony_ci    RENDERBUFFER_INTERNAL_FORMAT,
30505bd8deadSopenharmony_ci    RENDERBUFFER_RED_SIZE,
30515bd8deadSopenharmony_ci    RENDERBUFFER_GREEN_SIZE,
30525bd8deadSopenharmony_ci    RENDERBUFFER_BLUE_SIZE,
30535bd8deadSopenharmony_ci    RENDERBUFFER_ALPHA_SIZE,
30545bd8deadSopenharmony_ci    RENDERBUFFER_DEPTH_SIZE,
30555bd8deadSopenharmony_ci    RENDERBUFFER_STENCIL_SIZE, and
30565bd8deadSopenharmony_ci    RENDERBUFFER_SAMPLES states
30575bd8deadSopenharmony_ci
30585bd8deadSopenharmony_ci
30595bd8deadSopenharmony_ci    Modify Table 23.48, "Transform Feedback State"
30605bd8deadSopenharmony_ci
30615bd8deadSopenharmony_ci    Add GetTransformFeedbackiv in 'Get Command' for
30625bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER_BINDING,
30635bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_PAUSED and
30645bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_ACTIVE states
30655bd8deadSopenharmony_ci
30665bd8deadSopenharmony_ci    Add GetTransformFeedbacki64_v in 'Get Command' for
30675bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER_START and
30685bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER_SIZE states
30695bd8deadSopenharmony_ci
30705bd8deadSopenharmony_ci    Add GetTransformFeedbacki_v in 'Get Command' for
30715bd8deadSopenharmony_ci    TRANSFORM_FEEDBACK_BUFFER_BINDING state
30725bd8deadSopenharmony_ci
30735bd8deadSopenharmony_ci
30745bd8deadSopenharmony_ciNew Implementation Dependent State
30755bd8deadSopenharmony_ci
30765bd8deadSopenharmony_ci    None.
30775bd8deadSopenharmony_ci
30785bd8deadSopenharmony_ciUsage Examples
30795bd8deadSopenharmony_ci
30805bd8deadSopenharmony_ci    Example 1:
30815bd8deadSopenharmony_ci        // Bind to Edit
30825bd8deadSopenharmony_ci        void streamChunks(const Chunks & chunks)
30835bd8deadSopenharmony_ci        {
30845bd8deadSopenharmony_ci            GLuint restore = 0;
30855bd8deadSopenharmony_ci            glGetIntegerv(GL_ARRAY_BUFFER_BINDING, restore)
30865bd8deadSopenharmony_ci            glBindBuffer(GL_ARRAY_BUFFER, chunks.buffer());
30875bd8deadSopenharmony_ci
30885bd8deadSopenharmony_ci            uint8* pointer = reinterpret_cast<uint8*>(glMapBufferRange(
30895bd8deadSopenharmony_ci              GL_ARRAY_BUFFER, 0, chunks.size(), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT));
30905bd8deadSopenharmony_ci
30915bd8deadSopenharmony_ci            for(std::size_t i = 0; i < chunks.count(); ++i)
30925bd8deadSopenharmony_ci            {
30935bd8deadSopenharmony_ci                // Do something
30945bd8deadSopenharmony_ci                glFlushMappedBufferRange(GL_ARRAY_BUFFER, chunks.offset(), chunks.length());
30955bd8deadSopenharmony_ci            }
30965bd8deadSopenharmony_ci
30975bd8deadSopenharmony_ci            glUnmapNamedBuffer(GL_ARRAY_BUFFER);
30985bd8deadSopenharmony_ci            glBindBuffer(GL_ARRAY_BUFFER, restore);
30995bd8deadSopenharmony_ci        }
31005bd8deadSopenharmony_ci
31015bd8deadSopenharmony_ci        // Direct State Access, stream while rendering, no rendering state polution
31025bd8deadSopenharmony_ci        void streamChunks(const Chunks & chunks)
31035bd8deadSopenharmony_ci        {
31045bd8deadSopenharmony_ci            uint8* pointer = reinterpret_cast<uint8*>(glMapNamedBufferRange(
31055bd8deadSopenharmony_ci              chunks.buffer(), 0, chunks.size(), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT));
31065bd8deadSopenharmony_ci
31075bd8deadSopenharmony_ci            for(int i = 0; i < chunks.count(); ++i)
31085bd8deadSopenharmony_ci            {
31095bd8deadSopenharmony_ci                // Do something
31105bd8deadSopenharmony_ci                glFlushMappedNamedBufferRange(chunks.buffer(), chunks.offset(), chunks.length());
31115bd8deadSopenharmony_ci            }
31125bd8deadSopenharmony_ci
31135bd8deadSopenharmony_ci            glUnmapNamedBuffer(chunks.buffer());
31145bd8deadSopenharmony_ci        }
31155bd8deadSopenharmony_ci
31165bd8deadSopenharmony_ci    Example 2: Creating a buffer object without polluting the OpenGL states
31175bd8deadSopenharmony_ci
31185bd8deadSopenharmony_ci        // Bind to Create
31195bd8deadSopenharmony_ci        GLuint CreateBuffer()
31205bd8deadSopenharmony_ci        {
31215bd8deadSopenharmony_ci          // Save the previous bound buffer
31225bd8deadSopenharmony_ci          GLuint restoreBuffer = 0;
31235bd8deadSopenharmony_ci          glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &restoreBuffer);
31245bd8deadSopenharmony_ci
31255bd8deadSopenharmony_ci          // Reserve the buffer name and create the buffer object
31265bd8deadSopenharmony_ci          uint buffer = 0;
31275bd8deadSopenharmony_ci          glGenBuffers(1, &buffer);
31285bd8deadSopenharmony_ci          glBindBuffer(GL_ARRAY_BUFFER, buffer);
31295bd8deadSopenharmony_ci
31305bd8deadSopenharmony_ci          // Restaure the previous bound buffer to avoid polluting
31315bd8deadSopenharmony_ci          // the rendering states
31325bd8deadSopenharmony_ci          glBindBuffer(GL_ARRAY_BUFFER, restoreBuffer);
31335bd8deadSopenharmony_ci
31345bd8deadSopenharmony_ci          return buffer;
31355bd8deadSopenharmony_ci        }
31365bd8deadSopenharmony_ci
31375bd8deadSopenharmony_ci        // Direct State Access
31385bd8deadSopenharmony_ci        GLuint CreateBuffer()
31395bd8deadSopenharmony_ci        {
31405bd8deadSopenharmony_ci          GLuint buffer = 0;
31415bd8deadSopenharmony_ci          glCreateBuffer(1, &buffer);
31425bd8deadSopenharmony_ci
31435bd8deadSopenharmony_ci          return buffer;
31445bd8deadSopenharmony_ci        }
31455bd8deadSopenharmony_ci
31465bd8deadSopenharmony_ci    Example 3: Creating a vertex array object without polluting the OpenGL states
31475bd8deadSopenharmony_ci
31485bd8deadSopenharmony_ci        // OpenGL 3.0 Bind to Create for vertex array object
31495bd8deadSopenharmony_ci        GLuint CreateVertexArray(GLuint BufferName[])
31505bd8deadSopenharmony_ci        {
31515bd8deadSopenharmony_ci          // Save the previous bound vertex array and array buffer
31525bd8deadSopenharmony_ci          GLuint restoreVertexArray = 0;
31535bd8deadSopenharmony_ci          glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &restoreVertexArray);
31545bd8deadSopenharmony_ci          GLuint restoreBuffer = 0;
31555bd8deadSopenharmony_ci          glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &restoreBuffer);
31565bd8deadSopenharmony_ci
31575bd8deadSopenharmony_ci          glGenVertexArrays(1, &VertexArrayName);
31585bd8deadSopenharmony_ci          glBindVertexArray(VertexArrayName);
31595bd8deadSopenharmony_ci            glEnableVertexAttribArray(semantic::attr::POSITION);
31605bd8deadSopenharmony_ci            glEnableVertexAttribArray(semantic::attr::TEXCOORD);
31615bd8deadSopenharmony_ci
31625bd8deadSopenharmony_ci            glBindBuffer(GL_ARRAY_BUFFER, BufferName[buffer::VERTEX]);
31635bd8deadSopenharmony_ci            glVertexAttribPointer(semantic::attr::POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(glf::vertex_v2fv2f), BUFFER_OFFSET(0));
31645bd8deadSopenharmony_ci            glVertexAttribPointer(semantic::attr::TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(glf::vertex_v2fv2f), BUFFER_OFFSET(sizeof(glm::vec2)));
31655bd8deadSopenharmony_ci
31665bd8deadSopenharmony_ci            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[buffer::ELEMENT]);
31675bd8deadSopenharmony_ci
31685bd8deadSopenharmony_ci          // The GL_ARRAY_BUFFER_BINDING is a context state, not a vertex array state.
31695bd8deadSopenharmony_ci          glBindBuffer(GL_ARRAY_BUFFER, restoreBuffer);
31705bd8deadSopenharmony_ci          glBindVertexArray(restoreVertexArray);
31715bd8deadSopenharmony_ci
31725bd8deadSopenharmony_ci          return vertexArrayName;
31735bd8deadSopenharmony_ci        }
31745bd8deadSopenharmony_ci
31755bd8deadSopenharmony_ci        // OpenGL 4.3 Bind to Create for vertex array object
31765bd8deadSopenharmony_ci        GLuint CreateVertexArray(GLuint BufferName[])
31775bd8deadSopenharmony_ci        {
31785bd8deadSopenharmony_ci          // Save the previous bound vertex array
31795bd8deadSopenharmony_ci          GLuint restoreVertexArray = 0;
31805bd8deadSopenharmony_ci          glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &restoreVertexArray);
31815bd8deadSopenharmony_ci
31825bd8deadSopenharmony_ci          GLuint vertexArrayName = 0;
31835bd8deadSopenharmony_ci          glGenVertexArrays(1, &vertexArrayName);
31845bd8deadSopenharmony_ci          glBindVertexArray(VertexArrayName);
31855bd8deadSopenharmony_ci            glEnableVertexAttribArray(semantic::attr::POSITION);
31865bd8deadSopenharmony_ci            glEnableVertexAttribArray(semantic::attr::TEXCOORD);
31875bd8deadSopenharmony_ci
31885bd8deadSopenharmony_ci            glVertexAttribBinding(semantic::attr::POSITION, 0);
31895bd8deadSopenharmony_ci            glVertexAttribFormat(semantic::attr::POSITION, 2, GL_FLOAT, GL_FALSE, 0);
31905bd8deadSopenharmony_ci
31915bd8deadSopenharmony_ci            glVertexAttribBinding(semantic::attr::TEXCOORD, 0);
31925bd8deadSopenharmony_ci            glVertexAttribFormat(semantic::attr::TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2);
31935bd8deadSopenharmony_ci
31945bd8deadSopenharmony_ci            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[buffer::ELEMENT]);
31955bd8deadSopenharmony_ci            glBindVertexBuffer(0, BufferName[buffer::VERTEX], 0, 0);
31965bd8deadSopenharmony_ci          glBindVertexArray(restoreVertexArray);
31975bd8deadSopenharmony_ci
31985bd8deadSopenharmony_ci          return vertexArrayName;
31995bd8deadSopenharmony_ci        }
32005bd8deadSopenharmony_ci
32015bd8deadSopenharmony_ci        // Direct State Access
32025bd8deadSopenharmony_ci        GLuint CreateVertexArray(GLuint BufferName[])
32035bd8deadSopenharmony_ci        {
32045bd8deadSopenharmony_ci          GLuint vertexArrayName = 0;
32055bd8deadSopenharmony_ci          glCreateVertexArrays(1, &vertexArrayName);
32065bd8deadSopenharmony_ci
32075bd8deadSopenharmony_ci          glEnableVertexArrayAttrib(VertexArrayName, semantic::attr::POSITION);
32085bd8deadSopenharmony_ci          glEnableVertexArrayAttrib(VertexArrayName, semantic::attr::TEXCOORD);
32095bd8deadSopenharmony_ci
32105bd8deadSopenharmony_ci          glVertexArrayAttribBinding(VertexArrayName, semantic::attr::POSITION, 0);
32115bd8deadSopenharmony_ci          glVertexArrayAttribFormat(VertexArrayName, semantic::attr::POSITION, 2, GL_FLOAT, GL_FALSE, 0);
32125bd8deadSopenharmony_ci
32135bd8deadSopenharmony_ci          glVertexArrayAttribBinding(VertexArrayName, semantic::attr::TEXCOORD, 0);
32145bd8deadSopenharmony_ci          glVertexArrayAttribFormat(VertexArrayName, semantic::attr::TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2);
32155bd8deadSopenharmony_ci
32165bd8deadSopenharmony_ci          glVertexArrayElementBuffer(VertexArrayName, BufferName[buffer::ELEMENT]);
32175bd8deadSopenharmony_ci          glVertexArrayVertexBuffer(VertexArrayName, 0, BufferName[buffer::VERTEX], 0, 0);
32185bd8deadSopenharmony_ci
32195bd8deadSopenharmony_ci          return vertexArrayName;
32205bd8deadSopenharmony_ci        }
32215bd8deadSopenharmony_ci
32225bd8deadSopenharmony_ci    Example 4: Querying the bound texture to a texture image unit for debugging
32235bd8deadSopenharmony_ci
32245bd8deadSopenharmony_ci        // Select to query
32255bd8deadSopenharmony_ci        // We need the <target> or we need to loop over all the possible targets
32265bd8deadSopenharmony_ci        GLuint GetBoundTexture(GLenum target, GLuint unit)
32275bd8deadSopenharmony_ci        {
32285bd8deadSopenharmony_ci          GLuint restore = 0;
32295bd8deadSopenharmony_ci          glGetIntegerv(GL_ACTIVE_TEXTURE, &restore);
32305bd8deadSopenharmony_ci
32315bd8deadSopenharmony_ci          glActiveTexture(unit);
32325bd8deadSopenharmony_ci
32335bd8deadSopenharmony_ci          GLuint name = 0;
32345bd8deadSopenharmony_ci          glGetIntegerv(target, &name);
32355bd8deadSopenharmony_ci
32365bd8deadSopenharmony_ci          glActiveTexture(restore);
32375bd8deadSopenharmony_ci        }
32385bd8deadSopenharmony_ci
32395bd8deadSopenharmony_ci        // Direct State Access
32405bd8deadSopenharmony_ci        // target_binding is e.g. GL_TEXTURE_BINDING_2D for the 2D texture
32415bd8deadSopenharmony_ci        GLuint GetBoundTexture(GLenum target_binding, GLuint unit)
32425bd8deadSopenharmony_ci        {
32435bd8deadSopenharmony_ci          GLuint name = 0;
32445bd8deadSopenharmony_ci          glGetIntegeri_v(target_binding, unit, &name);
32455bd8deadSopenharmony_ci          return name;
32465bd8deadSopenharmony_ci        }
32475bd8deadSopenharmony_ci
32485bd8deadSopenharmony_ciTransistioning guide to ARB_direct_state_access
32495bd8deadSopenharmony_ci
32505bd8deadSopenharmony_ci    This section is only for the purpose of transistioning an application to
32515bd8deadSopenharmony_ci    the modern direct state access approach. It is not part of the specification
32525bd8deadSopenharmony_ci    as such.
32535bd8deadSopenharmony_ci
32545bd8deadSopenharmony_ci    TBD.
32555bd8deadSopenharmony_ci
32565bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or ARB_framebuffer_object
32575bd8deadSopenharmony_ci
32585bd8deadSopenharmony_ci    If neither OpenGL 3.0 nor ARB_framebuffer_object are supported,
32595bd8deadSopenharmony_ci    ignore the support for GenerateTextureMipmap, NamedFramebufferRenderbuffer,
32605bd8deadSopenharmony_ci    NamedFramebufferTexture, NamedFramebufferTextureLayer,
32615bd8deadSopenharmony_ci    NamedFramebufferDrawBuffer, NamedFramebufferDrawBuffers,
32625bd8deadSopenharmony_ci    NamedFramebufferReadBuffer, ClearNamedFramebufferiv,
32635bd8deadSopenharmony_ci    ClearNamedFramebufferuiv, ClearNamedFramebufferfv, ClearNamedFramebufferfi,
32645bd8deadSopenharmony_ci    BlitNamedFramebuffer, GetNamedFramebufferAttachmentParameteriv,
32655bd8deadSopenharmony_ci    CheckNamedFramebufferStatus, CreateRenderbuffers, NamedRenderbufferStorage,
32665bd8deadSopenharmony_ci    NamedRenderbufferStorageMultisample and GetNamedRenderbufferParameteriv.
32675bd8deadSopenharmony_ci
32685bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or ARB_map_buffer_range
32695bd8deadSopenharmony_ci
32705bd8deadSopenharmony_ci    If neither OpenGL 3.0 nor ARB_map_buffer_range are supported,
32715bd8deadSopenharmony_ci    ignore the support for MapNamedBufferRange and FlushMappedNamedBufferRange
32725bd8deadSopenharmony_ci
32735bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or ARB_vertex_array_object
32745bd8deadSopenharmony_ci
32755bd8deadSopenharmony_ci    If neither OpenGL 3.0 nor ARB_vertex_array_object are supported,
32765bd8deadSopenharmony_ci    ignore the support for CreateVertexArrays, DisableVertexArrayAttrib,
32775bd8deadSopenharmony_ci    EnableVertexArrayAttrib, VertexArrayElementBuffer, GetVertexArrayiv,
32785bd8deadSopenharmony_ci    and GetVertexArrayIndexediv.
32795bd8deadSopenharmony_ci
32805bd8deadSopenharmony_ciInteractions with OpenGL 3.1 or ARB_copy_buffer
32815bd8deadSopenharmony_ci
32825bd8deadSopenharmony_ci    If neither OpenGL 3.1 nor ARB_copy_buffer are supported,
32835bd8deadSopenharmony_ci    ignore the support for CopyNamedBufferSubData.
32845bd8deadSopenharmony_ci
32855bd8deadSopenharmony_ciInteractions with OpenGL 3.3 or ARB_instanced_arrays
32865bd8deadSopenharmony_ci
32875bd8deadSopenharmony_ci    If neither OpenGL 3.3 nor ARB_instanced_arrays are supported,
32885bd8deadSopenharmony_ci    ignore the support for VertexArrayAttribDivisor and
32895bd8deadSopenharmony_ci    VertexArrayBindingDivisor.
32905bd8deadSopenharmony_ci
32915bd8deadSopenharmony_ciInteractions with OpenGL 3.3 or ARB_sampler_objects
32925bd8deadSopenharmony_ci
32935bd8deadSopenharmony_ci    If neither OpenGL 4.1 nor ARB_separate_shader_objects are supported,
32945bd8deadSopenharmony_ci    ignore the support for CreateSamplers.
32955bd8deadSopenharmony_ci
32965bd8deadSopenharmony_ciInteractions with OpenGL 4.0 or ARB_transform_feedback2
32975bd8deadSopenharmony_ci
32985bd8deadSopenharmony_ci    If neither OpenGL 4.0 nor ARB_transform_feedback2 are supported,
32995bd8deadSopenharmony_ci    ignore the support for CreateTransformFeedbacks, GetTransformFeedbackiv,
33005bd8deadSopenharmony_ci    GetTransformFeedbacki_v, GetTransformFeedbacki64_v, and TextureBuffer.
33015bd8deadSopenharmony_ci
33025bd8deadSopenharmony_ciInteractions with OpenGL 4.1 or ARB_vertex_attrib_64bit
33035bd8deadSopenharmony_ci
33045bd8deadSopenharmony_ci    If neither OpenGL 4.1 nor ARB_vertex_attrib_64bit are supported,
33055bd8deadSopenharmony_ci    ignore the support for VertexArrayAttribLFormat.
33065bd8deadSopenharmony_ci
33075bd8deadSopenharmony_ciInteractions with OpenGL 4.1 or ARB_separate_shader_objects
33085bd8deadSopenharmony_ci
33095bd8deadSopenharmony_ci    If neither OpenGL 4.1 nor ARB_separate_shader_objects are supported,
33105bd8deadSopenharmony_ci    ignore the support for CreateProgramPipelines.
33115bd8deadSopenharmony_ci
33125bd8deadSopenharmony_ciInteractions with OpenGL 4.2 or ARB_texture_storage
33135bd8deadSopenharmony_ci
33145bd8deadSopenharmony_ci    If neither OpenGL 4.2 nor ARB_texture_storage are supported,
33155bd8deadSopenharmony_ci    ignore the support for TextureStorage1D, TextureStorage2D and
33165bd8deadSopenharmony_ci    TextureStorage3D.
33175bd8deadSopenharmony_ci
33185bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_texture_storage_multisample
33195bd8deadSopenharmony_ci
33205bd8deadSopenharmony_ci    If neither OpenGL 4.2 nor ARB_texture_storage are supported,
33215bd8deadSopenharmony_ci    ignore the support for TextureStorage2DMultisample and
33225bd8deadSopenharmony_ci    TextureStorage3DMultisample.
33235bd8deadSopenharmony_ci
33245bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_vertex_attrib_binding
33255bd8deadSopenharmony_ci
33265bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_vertex_attrib_binding are supported,
33275bd8deadSopenharmony_ci    ignore the support for VertexArrayVertexBuffer, VertexArrayAttribFormat,
33285bd8deadSopenharmony_ci    VertexArrayAttribIFormat, VertexArrayAttribLFormat,
33295bd8deadSopenharmony_ci    VertexArrayAttribBinding, VertexArrayBindingDivisor.
33305bd8deadSopenharmony_ci
33315bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_invalidate_subdata
33325bd8deadSopenharmony_ci
33335bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_invalidate_subdata are supported,
33345bd8deadSopenharmony_ci    ignore the support for InvalidateNamedFramebufferData and
33355bd8deadSopenharmony_ci    InvalidateNamedFramebufferSubData.
33365bd8deadSopenharmony_ci
33375bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_texture_buffer_range
33385bd8deadSopenharmony_ci
33395bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_texture_buffer_range are supported,
33405bd8deadSopenharmony_ci    ignore the support for TextureBufferRange.
33415bd8deadSopenharmony_ci
33425bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_clear_buffer_object
33435bd8deadSopenharmony_ci
33445bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_clear_buffer_object are supported,
33455bd8deadSopenharmony_ci    ignore the support for ClearNamedBufferData and ClearNamedBufferSubData.
33465bd8deadSopenharmony_ci
33475bd8deadSopenharmony_ciInteractions with OpenGL 4.3 or ARB_framebuffer_no_attachments
33485bd8deadSopenharmony_ci
33495bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_framebuffer_no_attachments are supported,
33505bd8deadSopenharmony_ci    ignore the support for NamedFramebufferParameteri and GetNamedFramebufferParameteriv.
33515bd8deadSopenharmony_ci
33525bd8deadSopenharmony_ciInteractions with OpenGL 4.4 or ARB_buffer_storage
33535bd8deadSopenharmony_ci
33545bd8deadSopenharmony_ci    If neither OpenGL 4.3 nor ARB_buffer_storage are supported,
33555bd8deadSopenharmony_ci    ignore the support for NamedBufferStorage.
33565bd8deadSopenharmony_ci
33575bd8deadSopenharmony_ciInteractions with OpenGL 4.4 or ARB_clear_texture
33585bd8deadSopenharmony_ci
33595bd8deadSopenharmony_ci    If neither OpenGL 4.4 nor ARB_clear_texture are supported,
33605bd8deadSopenharmony_ci    ignore the support for ClearNamedBufferData and ClearNamedBufferSubData.
33615bd8deadSopenharmony_ci
33625bd8deadSopenharmony_ciInteractions with OpenGL 4.4 or ARB_multi_bind
33635bd8deadSopenharmony_ci
33645bd8deadSopenharmony_ci    If neither OpenGL 4.4 nor ARB_multi_bind are supported,
33655bd8deadSopenharmony_ci    ignore the support for VertexArrayVertexBuffers.
33665bd8deadSopenharmony_ci
33675bd8deadSopenharmony_ciInteractions with OpenGL 4.4 or ARB_query_buffer_object
33685bd8deadSopenharmony_ci
33695bd8deadSopenharmony_ci     If neither OpenGL 4.4 nor ARB_query_buffer_object are supported, ignore
33705bd8deadSopenharmony_ci     the support for GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
33715bd8deadSopenharmony_ci     GetQueryBufferObjecti64v and GetQueryBufferObjectui64v.
33725bd8deadSopenharmony_ci
33735bd8deadSopenharmony_ciTODO
33745bd8deadSopenharmony_ci
33755bd8deadSopenharmony_ci    Document more errors. Currently, only the errors that check the new
33765bd8deadSopenharmony_ci    parameters are documented. Errors for parameters equivalent to the non-DSA
33775bd8deadSopenharmony_ci    versions of functions are not documented.
33785bd8deadSopenharmony_ci
33795bd8deadSopenharmony_ci    Add Usage Examples
33805bd8deadSopenharmony_ci    Add Transitioning guide to ARB_direct_state_access
33815bd8deadSopenharmony_ci    Add language for 9.2.3 Framebuffer Object Queries
33825bd8deadSopenharmony_ci    Describe bufSize
33835bd8deadSopenharmony_ci
33845bd8deadSopenharmony_ci    Issues left: 0
33855bd8deadSopenharmony_ci
33865bd8deadSopenharmony_ci    What vendors extensions, vendor needs to resolve interaction with ARB_direct_state_access
33875bd8deadSopenharmony_ci
33885bd8deadSopenharmony_ciIssues
33895bd8deadSopenharmony_ci
33905bd8deadSopenharmony_ci    0) What are the difference between ARB_direct_state_access and
33915bd8deadSopenharmony_ci       EXT_direct_state_access?
33925bd8deadSopenharmony_ci
33935bd8deadSopenharmony_ci       <TBD>
33945bd8deadSopenharmony_ci
33955bd8deadSopenharmony_ci    1) Should MultiBind be the only way to bind functions in DSA?
33965bd8deadSopenharmony_ci
33975bd8deadSopenharmony_ci       Do we need BindTextureUnit to replace the couple ActiveTexture and
33985bd8deadSopenharmony_ci       BindTexture? Do we need both VertexArrayVertexBuffer and
33995bd8deadSopenharmony_ci       VertexArrayVertexBuffers?
34005bd8deadSopenharmony_ci
34015bd8deadSopenharmony_ci       RESOLVED: No, both approaches are arguably valuable, add
34025bd8deadSopenharmony_ci       BindTextureUnit, VertexArrayVertexBuffer and
34035bd8deadSopenharmony_ci       VertexArrayVertexBuffers.
34045bd8deadSopenharmony_ci
34055bd8deadSopenharmony_ci    2) NamedBufferData (and the corresponding function from the original EXT)
34065bd8deadSopenharmony_ci       do not include the <target> parameter. Does implementations may make
34075bd8deadSopenharmony_ci       initial assumptions about the usage of a data store based on this
34085bd8deadSopenharmony_ci       parameter. Where did it go? Should we bring it back?
34095bd8deadSopenharmony_ci
34105bd8deadSopenharmony_ci       RESOLVED: No need for a target parameter for buffer. Implemetations
34115bd8deadSopenharmony_ci       don't make usage assumption based on the <target> parameter. Only one
34125bd8deadSopenharmony_ci       vendor extension do so AMD_pinned_memory. A for consistent approach
34135bd8deadSopenharmony_ci       to specify a buffer usage would be to add a new flag for that <flags>
34145bd8deadSopenharmony_ci       parameter of BufferStorage.
34155bd8deadSopenharmony_ci
34165bd8deadSopenharmony_ci    3) Do we need <target> parameters to all the APIs? There are several APIs
34175bd8deadSopenharmony_ci       that either only allow one value, or for which the <target> parameter
34185bd8deadSopenharmony_ci       is of debatable worth.
34195bd8deadSopenharmony_ci
34205bd8deadSopenharmony_ci       RESOLVED: Only keep the target parameter when it is functional.
34215bd8deadSopenharmony_ci
34225bd8deadSopenharmony_ci    4) Do we need a <target> for query object creation?
34235bd8deadSopenharmony_ci
34245bd8deadSopenharmony_ci       RESOLVED: Yes. You can immediately query a result, and the number of
34255bd8deadSopenharmony_ci       bytes written depends on the target.
34265bd8deadSopenharmony_ci
34275bd8deadSopenharmony_ci    5) This extension omits TextureImageND (mutable texture definitions), but
34285bd8deadSopenharmony_ci       includes CompressedTextureImageND (mutable, compressed texture). Why?
34295bd8deadSopenharmony_ci       Can't we have immutable compressed textures?
34305bd8deadSopenharmony_ci
34315bd8deadSopenharmony_ci       RESOLVED: The core specification does not include
34325bd8deadSopenharmony_ci       CompressedTexStorageND, only CompressedTexImageND because immutable
34335bd8deadSopenharmony_ci       textures created with TextureStorageND can be both compressed and
34345bd8deadSopenharmony_ci       uncompressed.
34355bd8deadSopenharmony_ci
34365bd8deadSopenharmony_ci    6) Do TransformFeedbackBufferBase and TransformFeedbackBufferRange need
34375bd8deadSopenharmony_ci       a <target> parameter, as the only acceptable value should be
34385bd8deadSopenharmony_ci       TRANSFORM_FEEDBACK_BUFFER?
34395bd8deadSopenharmony_ci
34405bd8deadSopenharmony_ci       RESOLVED: No.
34415bd8deadSopenharmony_ci
34425bd8deadSopenharmony_ci    7) Do TransformFeedbackBufferBase and TransformFeedbackBufferRange also
34435bd8deadSopenharmony_ci       bind the buffer to the generic TRANSFORM_FEEDBACK_BUFFER target as
34445bd8deadSopenharmony_ci       well as the indexed one as BindBuffer{Base/Range} would?
34455bd8deadSopenharmony_ci
34465bd8deadSopenharmony_ci       RESOLVED: No.
34475bd8deadSopenharmony_ci
34485bd8deadSopenharmony_ci    8) Do we need the support for query conversions for DSA queries?
34495bd8deadSopenharmony_ci
34505bd8deadSopenharmony_ci       For example, with the default transform feedback we can retrive the
34515bd8deadSopenharmony_ci       state values for TRANSFORM_FEEDBACK_BUFFER_START and
34525bd8deadSopenharmony_ci       TRANSFORM_FEEDBACK_BUFFER_SIZE using GetDoublev.
34535bd8deadSopenharmony_ci
34545bd8deadSopenharmony_ci       RESOLVED: No.
34555bd8deadSopenharmony_ci
34565bd8deadSopenharmony_ci    9) The language for VertexArrayVertexBuffer is inserted in subsection
34575bd8deadSopenharmony_ci       10.3.1 after BindVertexBuffer, but vertex array objects are not
34585bd8deadSopenharmony_ci       introduced until 10.4 - after all the state that they encapsulate.
34595bd8deadSopenharmony_ci       This is backwards. We should probably give a brief overview of what
34605bd8deadSopenharmony_ci       vertex arrays are (first paragraph or so of 10.3), followed by
34615bd8deadSopenharmony_ci       introducing the VAO itself ("All the state required to represent
34625bd8deadSopenharmony_ci       vertex arrays is stored in a VAO. Blah blah."), followed by most of
34635bd8deadSopenharmony_ci       section 10.4, followed by all the state that's in the VAO (what is
34645bd8deadSopenharmony_ci       currently section 10.3). This allows the clean introduction of all
34655bd8deadSopenharmony_ci       vertex array state in both DSA and direct-to-context form. Should we
34665bd8deadSopenharmony_ci       make this change?
34675bd8deadSopenharmony_ci
34685bd8deadSopenharmony_ci       RESOLVED: YES. This draft moves section 10.4 to a new subsection at
34695bd8deadSopenharmony_ci       the start of section 10.3 and deletes the original 10.4. This allows
34705bd8deadSopenharmony_ci       the remainder of section 10.3 to refer back to VAOs.
34715bd8deadSopenharmony_ci
34725bd8deadSopenharmony_ci    10) What should be called GetVertexArrayIntegeri_v?
34735bd8deadSopenharmony_ci
34745bd8deadSopenharmony_ci        This name is inconsistent with OpenGL convensions and there are
34755bd8deadSopenharmony_ci        already two precedent in the specification
34765bd8deadSopenharmony_ci
34775bd8deadSopenharmony_ci        A/ In the core specification and alternative to "i" for indexed is to
34785bd8deadSopenharmony_ci        use "Indexed", but there is no precedent for the
34795bd8deadSopenharmony_ci        GetVertexArrayIntegeri_v construct.
34805bd8deadSopenharmony_ci
34815bd8deadSopenharmony_ci        glDepthRangeIndexed
34825bd8deadSopenharmony_ci        glEndQueryIndexed
34835bd8deadSopenharmony_ci        glGetQueryIndexediv
34845bd8deadSopenharmony_ci        glScissorIndexedv
34855bd8deadSopenharmony_ci        glViewportIndexedfv
34865bd8deadSopenharmony_ci
34875bd8deadSopenharmony_ci        Following this precedent for GetVertexArrayIntegeri_v and rename it
34885bd8deadSopenharmony_ci        GetVertexArrayIndexediv.
34895bd8deadSopenharmony_ci
34905bd8deadSopenharmony_ci        B/ Another precedent is:
34915bd8deadSopenharmony_ci
34925bd8deadSopenharmony_ci        void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
34935bd8deadSopenharmony_ci
34945bd8deadSopenharmony_ci        "Iiv" is not very explicit out of context.
34955bd8deadSopenharmony_ci
34965bd8deadSopenharmony_ci        RESOLVED: GetVertexArrayIndexediv
34975bd8deadSopenharmony_ci
34985bd8deadSopenharmony_ci    11) Do we need GetVertexArrayAttribPointerv?
34995bd8deadSopenharmony_ci
35005bd8deadSopenharmony_ci        RESOLVED: No. Following the line of the resolution of issue 31, if we
35015bd8deadSopenharmony_ci        don't provide a DSA API for VertexAttrib*Pointer, there is no client
35025bd8deadSopenharmony_ci        vertex array support and pointer to query, hence this function as no
35035bd8deadSopenharmony_ci        purpose.
35045bd8deadSopenharmony_ci
35055bd8deadSopenharmony_ci    12) What's the purpose of the new Create* API?
35065bd8deadSopenharmony_ci
35075bd8deadSopenharmony_ci        With the Gen* API, objects are not created, only an object name is
35085bd8deadSopenharmony_ci        reserved. The actual operation creating the object happen after and
35095bd8deadSopenharmony_ci        may require additional informations: texture and query object requires
35105bd8deadSopenharmony_ci        a target to create the approciate data store.
35115bd8deadSopenharmony_ci
35125bd8deadSopenharmony_ci        The following function can create actually object:
35135bd8deadSopenharmony_ci        BindTexture
35145bd8deadSopenharmony_ci        BindBuffer
35155bd8deadSopenharmony_ci        BindFramebuffer
35165bd8deadSopenharmony_ci        BindVertexArray
35175bd8deadSopenharmony_ci        BindProgramPipeline
35185bd8deadSopenharmony_ci        BindRenderbuffer
35195bd8deadSopenharmony_ci        FenceSync
35205bd8deadSopenharmony_ci        BeginQuery*
35215bd8deadSopenharmony_ci        QueryCounter
35225bd8deadSopenharmony_ci        SamplerParameter*
35235bd8deadSopenharmony_ci        UseProgramStages
35245bd8deadSopenharmony_ci
35255bd8deadSopenharmony_ci        The Create* API is an alternative to the Gen* + Call approach to
35265bd8deadSopenharmony_ci        create an object where the object is created when its name is
35275bd8deadSopenharmony_ci        reserved.
35285bd8deadSopenharmony_ci
35295bd8deadSopenharmony_ci    13) What should GetTransformFeedbackBooleanv be called?
35305bd8deadSopenharmony_ci
35315bd8deadSopenharmony_ci        RESOLVED: We don't need it! The OpenGL specification doesn't have
35325bd8deadSopenharmony_ci        precedent for GetTransformFeedbackBooleanv but there are boolean
35335bd8deadSopenharmony_ci        states. For example VERTEX_ATTRIB_ARRAY_ENABLED is queried with
35345bd8deadSopenharmony_ci        GetVertexAttribiv of GetVertexArrayiv
35355bd8deadSopenharmony_ci
35365bd8deadSopenharmony_ci    14) Does InvalidateNamedFramebufferData and
35375bd8deadSopenharmony_ci        InvalidateNamedFramebufferSubData need a <target> parameter?
35385bd8deadSopenharmony_ci
35395bd8deadSopenharmony_ci        RESOLVED: No. For Invalidate{Sub,}Framebuffer the <target> parameter is
35405bd8deadSopenharmony_ci        only used to select between the framebuffer at the read binding point
35415bd8deadSopenharmony_ci        and the one at the draw binding point. Since the framebuffer being
35425bd8deadSopenharmony_ci        invalidated is identified directly by the <framebuffer> parameter, no
35435bd8deadSopenharmony_ci        <target> is necessary.
35445bd8deadSopenharmony_ci
35455bd8deadSopenharmony_ci    15) What should we do with the PixelStore?
35465bd8deadSopenharmony_ci
35475bd8deadSopenharmony_ci        They have that B2E flavor except that instead of binding an object
35485bd8deadSopenharmony_ci        to edit it, we need to query/set states to edit some objects like
35495bd8deadSopenharmony_ci        selectors. Just like B2E, there are generating side effects in
35505bd8deadSopenharmony_ci        applications. Hence, it is worth to investigate how we could DSA
35515bd8deadSopenharmony_ci        PixelStore.
35525bd8deadSopenharmony_ci
35535bd8deadSopenharmony_ci        PixelStore interacts with TextureSubImage*, CompressedTextureSubImage*
35545bd8deadSopenharmony_ci        functions that we are adding in this extension, and ReadPixels.
35555bd8deadSopenharmony_ci
35565bd8deadSopenharmony_ci        Possible solutions for this issue:
35575bd8deadSopenharmony_ci        a) Add a pointer parameter to the functions concerned taking a
35585bd8deadSopenharmony_ci           structure. with all the pixel store states. If null is passed,
35595bd8deadSopenharmony_ci           use the default pixel store states.
35605bd8deadSopenharmony_ci
35615bd8deadSopenharmony_ci        b) A pixel store object. (hard to imagine, different from other APIs,
35625bd8deadSopenharmony_ci           where to store those in an engine?)
35635bd8deadSopenharmony_ci
35645bd8deadSopenharmony_ci        c) Adding pixel store states to the texture object.
35655bd8deadSopenharmony_ci
35665bd8deadSopenharmony_ci        An alternative would be allowing the user to submit a structure with
35675bd8deadSopenharmony_ci        all the pixel store parameters.
35685bd8deadSopenharmony_ci
35695bd8deadSopenharmony_ci        The interactions with sparse textures make it PixelStore particularly
35705bd8deadSopenharmony_ci        interesting.
35715bd8deadSopenharmony_ci
35725bd8deadSopenharmony_ci        RESOLVED: The primary motivation for this extension is getting rid of
35735bd8deadSopenharmony_ci        selectors. Pixel store parameters are just global state. Fixing that
35745bd8deadSopenharmony_ci        is beyond the scope of this extension (and there is a lot of other
35755bd8deadSopenharmony_ci        state too!).
35765bd8deadSopenharmony_ci
35775bd8deadSopenharmony_ci    16) Do we need DSA for UniformSubroutinesuiv?
35785bd8deadSopenharmony_ci
35795bd8deadSopenharmony_ci        RESOLVED: Deferred. Do subroutines have a future?
35805bd8deadSopenharmony_ci
35815bd8deadSopenharmony_ci    17) How do we resolve the inconsistency between Create* and Gen* APIs?
35825bd8deadSopenharmony_ci
35835bd8deadSopenharmony_ci        The Create API is typically equivalent to the Gen API and Binding
35845bd8deadSopenharmony_ci        the object.
35855bd8deadSopenharmony_ci
35865bd8deadSopenharmony_ci        For example:
35875bd8deadSopenharmony_ci        // Direct State Access
35885bd8deadSopenharmony_ci        uint buffer;
35895bd8deadSopenharmony_ci        CreateBuffer(1, &buffer);
35905bd8deadSopenharmony_ci
35915bd8deadSopenharmony_ci        Is the logical equivalent to:
35925bd8deadSopenharmony_ci
35935bd8deadSopenharmony_ci        // Bind to Edit
35945bd8deadSopenharmony_ci        uint restoreBuffer;
35955bd8deadSopenharmony_ci        GetIntegerv(ARRAY_BUFFER_BINDING, &restoreBuffer);
35965bd8deadSopenharmony_ci        uint buffer;
35975bd8deadSopenharmony_ci        GenBuffers(1, &buffer);
35985bd8deadSopenharmony_ci        BindBuffer(ARRAY_BUFFER, buffer);
35995bd8deadSopenharmony_ci        BindBuffer(ARRAY_BUFFER, restoreBuffer);
36005bd8deadSopenharmony_ci
36015bd8deadSopenharmony_ci        Typically with DSA objects are created with [Create] while [Gen+Bind]
36025bd8deadSopenharmony_ci        is used to create the objects with B2E. Unfortunately, [Gen+Bind]
36035bd8deadSopenharmony_ci        is not systematic:
36045bd8deadSopenharmony_ci
36055bd8deadSopenharmony_ci        In OpenGL 4.4, here is the functions that create objects:
36065bd8deadSopenharmony_ci        - BindTexture
36075bd8deadSopenharmony_ci        - BindBuffer
36085bd8deadSopenharmony_ci        - BindProgramPipeline
36095bd8deadSopenharmony_ci        - BindRenderbuffer
36105bd8deadSopenharmony_ci        - BindSampler
36115bd8deadSopenharmony_ci        - UseProgramStages
36125bd8deadSopenharmony_ci        - SamplerParameter*
36135bd8deadSopenharmony_ci        - GetSamplerParameter*
36145bd8deadSopenharmony_ci        - IsSampler
36155bd8deadSopenharmony_ci        - BeginQuery
36165bd8deadSopenharmony_ci        - BeginQueryIndexed
36175bd8deadSopenharmony_ci        - QueryCounter
36185bd8deadSopenharmony_ci
36195bd8deadSopenharmony_ci        Effectively, the sampler object behaves as if it was created at Gen*.
36205bd8deadSopenharmony_ci
36215bd8deadSopenharmony_ci        The query API is resolved with CreateQueries that effectively
36225bd8deadSopenharmony_ci        creates the query object with a target that can also be TIMESTAMP
36235bd8deadSopenharmony_ci        which is used with QueryCounter with the Gen* method.
36245bd8deadSopenharmony_ci
36255bd8deadSopenharmony_ci        An approach to make the B2E API more consistent without breaking
36265bd8deadSopenharmony_ci        compatibility would be allowing any program pipeline function to
36275bd8deadSopenharmony_ci        create the program pipeline object so that effectively
36285bd8deadSopenharmony_ci        GenProgramPipelines would behave like CreateProgramPipelines.
36295bd8deadSopenharmony_ci
36305bd8deadSopenharmony_ci        RESOLVED: Only the Create* API provide a consistent behaviour.
36315bd8deadSopenharmony_ci
36325bd8deadSopenharmony_ci        We can't really fix the Gen* consistency but all the DSA functions
36335bd8deadSopenharmony_ci        behave identically if we use the Create* API. That is:
36345bd8deadSopenharmony_ci
36355bd8deadSopenharmony_ci        1/ The object is effectively created by Create*
36365bd8deadSopenharmony_ci        2/ A DSA function modifying an object, won't generated an invalid
36375bd8deadSopenharmony_ci           operation error if that object was created with the corresponding
36385bd8deadSopenharmony_ci           Create* function and if that object was deleted by the
36395bd8deadSopenharmony_ci           corresponding Delete* function.
36405bd8deadSopenharmony_ci
36415bd8deadSopenharmony_ci    18) Should we take the DSA effort further to improve API consistency
36425bd8deadSopenharmony_ci        further so that we could have a clear message so say "this is the
36435bd8deadSopenharmony_ci        DSA API"?
36445bd8deadSopenharmony_ci
36455bd8deadSopenharmony_ci        All the DSA functions could have the prefix "DSA" so that if we want
36465bd8deadSopenharmony_ci        an understandable message for the community would be:
36475bd8deadSopenharmony_ci
36485bd8deadSopenharmony_ci        "All the DSA functions starts by glDSA".
36495bd8deadSopenharmony_ci
36505bd8deadSopenharmony_ci        Considering the request for clarity by the OpenGL community, it seems
36515bd8deadSopenharmony_ci        valuable to consider this idea.
36525bd8deadSopenharmony_ci
36535bd8deadSopenharmony_ci        However, a lot of the DSA API is already in the core specification.
36545bd8deadSopenharmony_ci        To provide this API consistency, we would need to create aliases for
36555bd8deadSopenharmony_ci        existing functions.
36565bd8deadSopenharmony_ci
36575bd8deadSopenharmony_ci        Propose changes:
36585bd8deadSopenharmony_ci        1/ Rename all functions introduced by this extension removing
36595bd8deadSopenharmony_ci           "Named" and adding the prefix "DSA"
36605bd8deadSopenharmony_ci        2/ Add aliases to the following DSA functions already in core:
36615bd8deadSopenharmony_ci
36625bd8deadSopenharmony_ci        ClearTexImage -> DSAClearTexImage
36635bd8deadSopenharmony_ci        ClearTexSubImage -> DSAClearTexSubImage
36645bd8deadSopenharmony_ci        InvalidateTexSubImage -> DSAInvalidateTexSubImage
36655bd8deadSopenharmony_ci        InvalidateTexImage -> DSAInvalidateTexImage
36665bd8deadSopenharmony_ci        InvalidateBufferSubData -> DSAInvalidateBufferSubData
36675bd8deadSopenharmony_ci        InvalidateBufferData -> DSAInvalidateBufferData
36685bd8deadSopenharmony_ci        CompileShader -> DSACompileShader
36695bd8deadSopenharmony_ci        TextureView -> DSATexView
36705bd8deadSopenharmony_ci        CopyImageSubData -> DSACopyImageSubData
36715bd8deadSopenharmony_ci        UseProgramStages -> DSAProgramPipelineStages
36725bd8deadSopenharmony_ci        ProgramParameteri -> DSAProgramParameteri
36735bd8deadSopenharmony_ci        ProgramUniform* -> DSAProgramUniform*
36745bd8deadSopenharmony_ci        ProgramBinary -> DSAProgramBinary
36755bd8deadSopenharmony_ci        LinkProgram -> DSALinkProgram
36765bd8deadSopenharmony_ci        GetProgramBinary -> DSAGetProgramBinary
36775bd8deadSopenharmony_ci        GetProgramInfoLog -> DSAGetProgramInfoLog
36785bd8deadSopenharmony_ci        CreateShaderProgram -> DSACreateShaderProgram
36795bd8deadSopenharmony_ci        SamplerParameter* -> DSASamplerParameter*
36805bd8deadSopenharmony_ci        GetSamplerParameter* -> DSAGetSamplerParameter*
36815bd8deadSopenharmony_ci        ValidateProgramPipeline -> DSAValidateProgramPipeline
36825bd8deadSopenharmony_ci        UseProgramStages -> DSAProgramPipelineStages
36835bd8deadSopenharmony_ci        GetProgramPipelineInfoLog -> DSAGetProgramPipelineInfoLog
36845bd8deadSopenharmony_ci        GetProgramInterfaceiv -> DSAGetProgramInterfaceiv
36855bd8deadSopenharmony_ci        GetProgramResourceIndex -> DSAGetProgramResourceIndex
36865bd8deadSopenharmony_ci        GetProgramResourceName -> DSAGetProgramResourceName
36875bd8deadSopenharmony_ci        GetProgramResourceiv -> DSAGetProgramResourceiv
36885bd8deadSopenharmony_ci        GetProgramResourceLocation -> DSAGetProgramResourceLocation
36895bd8deadSopenharmony_ci        GetProgramResourceLocationIndex -> DSAGetProgramResourceLocationIndex
36905bd8deadSopenharmony_ci        GetAttachedShaders -> DSAGetAttachedShaders
36915bd8deadSopenharmony_ci        GetShaderiv -> DSAGetShaderiv
36925bd8deadSopenharmony_ci        GetShaderSource -> DSAGetShaderSource
36935bd8deadSopenharmony_ci        GetShaderPrecisionFormat -> DSAGetShaderPrecisionFormat
36945bd8deadSopenharmony_ci        GetProgramInfoLog -> DSAGetProgramInfoLog
36955bd8deadSopenharmony_ci        GetUniformfv -> DSAGetUniformfv
36965bd8deadSopenharmony_ci        GetUniformiv -> DSAGetUniformiv
36975bd8deadSopenharmony_ci        GetUniformuiv -> DSAGetUniformuiv
36985bd8deadSopenharmony_ci        GetUniformdv -> DSAGetUniformdv
36995bd8deadSopenharmony_ci        GetProgramStageiv -> DSAGetProgramStageiv
37005bd8deadSopenharmony_ci
37015bd8deadSopenharmony_ci        CreateShader -> DSACreateShaders
37025bd8deadSopenharmony_ci        CreateProgram -> DSACreatePrograms
37035bd8deadSopenharmony_ci
37045bd8deadSopenharmony_ci        GetSynciv -> DSAGetSynciv
37055bd8deadSopenharmony_ci        FenceSync -> DSAFenceSync
37065bd8deadSopenharmony_ci        WaitSync -> DSAWaitSync
37075bd8deadSopenharmony_ci        ClientWaitSync -> DSAClientWaitSync
37085bd8deadSopenharmony_ci
37095bd8deadSopenharmony_ci        Do we want to add delete functions?
37105bd8deadSopenharmony_ci
37115bd8deadSopenharmony_ci        RESOLVED: No. Some people liked this, some didn't. Some liked the
37125bd8deadSopenharmony_ci        prefix idea, but not the letters "DSA" (who wants to explain that in
37135bd8deadSopenharmony_ci        5 years?). Some people liked the idea of aliasing existing commands
37145bd8deadSopenharmony_ci        and some didn't. Some had other ideas for naming conventions. In the
37155bd8deadSopenharmony_ci        end we opted for "get 'er done!" and as a result we will have GL 4.5
37165bd8deadSopenharmony_ci        with DSA in it.
37175bd8deadSopenharmony_ci
37185bd8deadSopenharmony_ci        For those who really want the prefixed API, this can easily be done
37195bd8deadSopenharmony_ci        by renaming the commands when they are dynamically loaded.
37205bd8deadSopenharmony_ci        Additionally, with DSA, a C++ interface for GL can easily be written
37215bd8deadSopenharmony_ci        which will hide all the ugly details off things like C function names.
37225bd8deadSopenharmony_ci
37235bd8deadSopenharmony_ci    19) Can we use DSA functions on default objects? Default framebuffer,
37245bd8deadSopenharmony_ci        transform feedback, program pipeline, texture, vertex array?
37255bd8deadSopenharmony_ci
37265bd8deadSopenharmony_ci        RESOLVED:
37275bd8deadSopenharmony_ci
37285bd8deadSopenharmony_ci          - Default textures: NO. There are too many texture objects named
37295bd8deadSopenharmony_ci            zero, the default textures are rarely used, and adding selectors
37305bd8deadSopenharmony_ci            to all the commands is too much work for a corner case.
37315bd8deadSopenharmony_ci          - Default vertex array objects: YES, but only in the compatibility
37325bd8deadSopenharmony_ci            profile, where they exist (see issue 40).
37335bd8deadSopenharmony_ci          - Default transform feedback and program pipeline objects; YES.
37345bd8deadSopenharmony_ci          - Default framebuffer objects: YES, with certain exceptions as
37355bd8deadSopenharmony_ci            described in issue 34.
37365bd8deadSopenharmony_ci
37375bd8deadSopenharmony_ci    20) Should we introduce glCreate* function capable to create multiple
37385bd8deadSopenharmony_ci        program and shader objects? Same for glDelete*.
37395bd8deadSopenharmony_ci
37405bd8deadSopenharmony_ci        RESOLVED: There is very little value to add these functions. Unless we
37415bd8deadSopenharmony_ci        figure out a way to add more value to it, from the resolution of issue
37425bd8deadSopenharmony_ci        18 for example, no need to add them.
37435bd8deadSopenharmony_ci
37445bd8deadSopenharmony_ci    21) Why do we have TransformFeedbackBufferBase/Range but nothing for
37455bd8deadSopenharmony_ci        atomic counters, SSBOs, or UBOs?
37465bd8deadSopenharmony_ci
37475bd8deadSopenharmony_ci        RESOLVED: TransformFeedbackBufferBase/Range are the DSA version of
37485bd8deadSopenharmony_ci        BindBufferBase and BindBufferRange on transform feedback object with
37495bd8deadSopenharmony_ci        the Bind To Edit API. Atomic counters, SSBOs and UBOs binding are
37505bd8deadSopenharmony_ci        exclusively context states. There is no object to attach them to.
37515bd8deadSopenharmony_ci
37525bd8deadSopenharmony_ci    22) How should we query the bound textures with the DSA API?
37535bd8deadSopenharmony_ci
37545bd8deadSopenharmony_ci        With the current specification we need to use bind to edit:
37555bd8deadSopenharmony_ci
37565bd8deadSopenharmony_ci        GLuint GetTextureName(GLuint unit, GLenum target)
37575bd8deadSopenharmony_ci        {
37585bd8deadSopenharmony_ci          GLuint restore = 0;
37595bd8deadSopenharmony_ci          glGetIntegerv(GL_ACTIVE_TEXTURE, &restore);
37605bd8deadSopenharmony_ci
37615bd8deadSopenharmony_ci          glActiveTexture(unit);
37625bd8deadSopenharmony_ci
37635bd8deadSopenharmony_ci          GLuint name;
37645bd8deadSopenharmony_ci          glGetIntegerv(target, &name);
37655bd8deadSopenharmony_ci
37665bd8deadSopenharmony_ci          glActiveTexture(restore);
37675bd8deadSopenharmony_ci
37685bd8deadSopenharmony_ci          return name;
37695bd8deadSopenharmony_ci        }
37705bd8deadSopenharmony_ci
37715bd8deadSopenharmony_ci        Furthermore, with this extension <target> is a texture object state,
37725bd8deadSopenharmony_ci        not an input.
37735bd8deadSopenharmony_ci
37745bd8deadSopenharmony_ci        An approach to resolve this issue is using glGetIntegeri_v for
37755bd8deadSopenharmony_ci        textures:
37765bd8deadSopenharmony_ci
37775bd8deadSopenharmony_ci        void glGetIntegeri_v(GLenum target_binding,
37785bd8deadSopenharmony_ci          GLuint index,
37795bd8deadSopenharmony_ci          GLint * data);
37805bd8deadSopenharmony_ci
37815bd8deadSopenharmony_ci        <target_binding> is e.g. GL_TEXTURE_BINDING_2D for the
37825bd8deadSopenharmony_ci        two-dimensional texture binding.
37835bd8deadSopenharmony_ci
37845bd8deadSopenharmony_ci        Instead of using GL_TEXTURE0, an integer <index> identifies a
37855bd8deadSopenharmony_ci        texture unit.
37865bd8deadSopenharmony_ci
37875bd8deadSopenharmony_ci        NOTE: In the initially released version of this extension,
37885bd8deadSopenharmony_ci        queries of form
37895bd8deadSopenharmony_ci
37905bd8deadSopenharmony_ci            glGetIntegeri_v(GL_TEXTURE_BINDING, index, &texname);
37915bd8deadSopenharmony_ci
37925bd8deadSopenharmony_ci        were supported. This was a mistake and was not implementable,
37935bd8deadSopenharmony_ci        because there can always be multiple different bindings to a
37945bd8deadSopenharmony_ci        texture unit for different targets. This token and the
37955bd8deadSopenharmony_ci        corresponding state has been removed from this extension and
37965bd8deadSopenharmony_ci        from the OpenGL 4.5 API Specification. The glGetIntegeri_v query
37975bd8deadSopenharmony_ci        is still supported, but the target-specific binding tokens must
37985bd8deadSopenharmony_ci        be passed.
37995bd8deadSopenharmony_ci
38005bd8deadSopenharmony_ci    23) Do state tables chapter 23 needs to be updated to contain DSA queries too?
38015bd8deadSopenharmony_ci
38025bd8deadSopenharmony_ci        RESOLVED: Yes.
38035bd8deadSopenharmony_ci
38045bd8deadSopenharmony_ci    24) Do we need DSA functions for mutable textures?
38055bd8deadSopenharmony_ci
38065bd8deadSopenharmony_ci        RESOLVED: No. Immutable texture is a more robust approach to handle
38075bd8deadSopenharmony_ci        textures
38085bd8deadSopenharmony_ci
38095bd8deadSopenharmony_ci    25) Should the DSA API collapse Texture*ND functions into a single
38105bd8deadSopenharmony_ci        function per functionality?
38115bd8deadSopenharmony_ci
38125bd8deadSopenharmony_ci        - New extensions ARB_geometry_shader4, ARB_clear_texture,
38135bd8deadSopenharmony_ci          ARB_sparse_texture, ARB_copy_image have move away from separate ND
38145bd8deadSopenharmony_ci          functions
38155bd8deadSopenharmony_ci        - The TEXTURE_TARGET state allows IHVs baking the <target> parameter
38165bd8deadSopenharmony_ci          into the texture object. ISVs would like to do the same but can't
38175bd8deadSopenharmony_ci          because the target is required to select the correct texture
38185bd8deadSopenharmony_ci          function. Typically, if we fill a GL_TEXTURE_2D or a
38195bd8deadSopenharmony_ci          GL_TEXTURE_2D_ARRAY we need to call respectively TexSubImage2D or
38205bd8deadSopenharmony_ci          TexSubImage3D. A collapse glTexSubImage using three coordinates
38215bd8deadSopenharmony_ci          would resolve this issue.
38225bd8deadSopenharmony_ci
38235bd8deadSopenharmony_ci        What the set of texture functions do we want?
38245bd8deadSopenharmony_ci
38255bd8deadSopenharmony_ci        a) All ND functions:
38265bd8deadSopenharmony_ci
38275bd8deadSopenharmony_ci            void TextureStorage1D(uint texture, sizei levels, enum internalformat,
38285bd8deadSopenharmony_ci                                  sizei width);
38295bd8deadSopenharmony_ci
38305bd8deadSopenharmony_ci            void TextureStorage2D(uint texture, sizei levels, enum internalformat,
38315bd8deadSopenharmony_ci                                  sizei width, sizei height);
38325bd8deadSopenharmony_ci
38335bd8deadSopenharmony_ci            void TextureStorage3D(uint texture, sizei levels, enum internalformat,
38345bd8deadSopenharmony_ci                                  sizei width, sizei height, sizei depth);
38355bd8deadSopenharmony_ci
38365bd8deadSopenharmony_ci            void TextureStorage2DMultisample(uint texture, sizei samples, enum internalformat,
38375bd8deadSopenharmony_ci                                             sizei width, sizei height,
38385bd8deadSopenharmony_ci                                             boolean fixedsamplelocations);
38395bd8deadSopenharmony_ci
38405bd8deadSopenharmony_ci            void TextureStorage3DMultisample(uint texture, sizei samples, enum internalformat,
38415bd8deadSopenharmony_ci                                             sizei width, sizei height, sizei depth,
38425bd8deadSopenharmony_ci                                             boolean fixedsamplelocations);
38435bd8deadSopenharmony_ci
38445bd8deadSopenharmony_ci            void TextureSubImage1D(uint texture, int level,
38455bd8deadSopenharmony_ci                                   int xoffset, sizei width,
38465bd8deadSopenharmony_ci                                   enum format, enum type, const void *pixels);
38475bd8deadSopenharmony_ci
38485bd8deadSopenharmony_ci            void TextureSubImage2D(uint texture, int level,
38495bd8deadSopenharmony_ci                                   int xoffset, int yoffset,
38505bd8deadSopenharmony_ci                                   sizei width, sizei height,
38515bd8deadSopenharmony_ci                                   enum format, enum type, const void *pixels);
38525bd8deadSopenharmony_ci
38535bd8deadSopenharmony_ci            void TextureSubImage3D(uint texture, int level,
38545bd8deadSopenharmony_ci                                   int xoffset, int yoffset, int zoffset,
38555bd8deadSopenharmony_ci                                   sizei width, sizei height, sizei depth,
38565bd8deadSopenharmony_ci                                   enum format, enum type, const void *pixels);
38575bd8deadSopenharmony_ci
38585bd8deadSopenharmony_ci            void CompressedTextureSubImage1D(uint texture, int level,
38595bd8deadSopenharmony_ci                                             int xoffset, sizei width,
38605bd8deadSopenharmony_ci                                             enum format, sizei imageSize, const void *data);
38615bd8deadSopenharmony_ci
38625bd8deadSopenharmony_ci            void CompressedTextureSubImage2D(uint texture, int level,
38635bd8deadSopenharmony_ci                                             int xoffset, int yoffset,
38645bd8deadSopenharmony_ci                                             sizei width, sizei height,
38655bd8deadSopenharmony_ci                                             enum format, sizei imageSize, const void *data);
38665bd8deadSopenharmony_ci
38675bd8deadSopenharmony_ci            void CompressedTextureSubImage3D(uint texture, int level,
38685bd8deadSopenharmony_ci                                             int xoffset, int yoffset, int zoffset,
38695bd8deadSopenharmony_ci                                             sizei width, sizei height, sizei depth,
38705bd8deadSopenharmony_ci                                             enum format, sizei imageSize, const void *data);
38715bd8deadSopenharmony_ci
38725bd8deadSopenharmony_ci            void CopyTextureSubImage1D(uint texture, int level,
38735bd8deadSopenharmony_ci                                       int xoffset,
38745bd8deadSopenharmony_ci                                       int x, int y,
38755bd8deadSopenharmony_ci                                       sizei width);
38765bd8deadSopenharmony_ci
38775bd8deadSopenharmony_ci            void CopyTextureSubImage2D(uint texture, int level,
38785bd8deadSopenharmony_ci                                       int xoffset, int yoffset,
38795bd8deadSopenharmony_ci                                       int x, int y,
38805bd8deadSopenharmony_ci                                       sizei width, sizei height);
38815bd8deadSopenharmony_ci
38825bd8deadSopenharmony_ci            void CopyTextureSubImage3D(uint texture, int level,
38835bd8deadSopenharmony_ci                                       int xoffset, int yoffset, int zoffset,
38845bd8deadSopenharmony_ci                                       int x, int y,
38855bd8deadSopenharmony_ci                                       sizei width, sizei height);
38865bd8deadSopenharmony_ci
38875bd8deadSopenharmony_ci        b) Collapsed ND functions (all addressed with 3D coordinates):
38885bd8deadSopenharmony_ci
38895bd8deadSopenharmony_ci            void TextureStorage(uint texture, sizei levels, enum internalformat,
38905bd8deadSopenharmony_ci                                sizei width, sizei height, sizei depth);
38915bd8deadSopenharmony_ci
38925bd8deadSopenharmony_ci            void TextureStorageMultisample(uint texture, sizei samples, enum internalformat,
38935bd8deadSopenharmony_ci                                           sizei width, sizei height, sizei depth,
38945bd8deadSopenharmony_ci                                           boolean fixedsamplelocations);
38955bd8deadSopenharmony_ci
38965bd8deadSopenharmony_ci            void TextureSubImage(uint texture, int level,
38975bd8deadSopenharmony_ci                                 int xoffset, int yoffset, int zoffset,
38985bd8deadSopenharmony_ci                                 sizei width, sizei height, sizei depth,
38995bd8deadSopenharmony_ci                                 enum format, enum type, const void *pixels);
39005bd8deadSopenharmony_ci
39015bd8deadSopenharmony_ci            void CompressedTextureSubImage(uint texture, int level,
39025bd8deadSopenharmony_ci                                           int xoffset, int yoffset, int zoffset,
39035bd8deadSopenharmony_ci                                           sizei width, sizei height, sizei depth,
39045bd8deadSopenharmony_ci                                           enum format, sizei imageSize, const void *data);
39055bd8deadSopenharmony_ci
39065bd8deadSopenharmony_ci            void CopyTextureSubImage(uint texture, int level,
39075bd8deadSopenharmony_ci                                     int xoffset, int yoffset, int zoffset,
39085bd8deadSopenharmony_ci                                     int x, int y,
39095bd8deadSopenharmony_ci                                     sizei width, sizei height);
39105bd8deadSopenharmony_ci
39115bd8deadSopenharmony_ci        c) Both a) and b)
39125bd8deadSopenharmony_ci
39135bd8deadSopenharmony_ci        RESOLVED: a) All the ND versions only. This is what matches the OpenGL
39145bd8deadSopenharmony_ci        4.4 set of functionality.
39155bd8deadSopenharmony_ci
39165bd8deadSopenharmony_ci    26) DSA functions for VertexAttrib are missing, do we want them?
39175bd8deadSopenharmony_ci
39185bd8deadSopenharmony_ci        The list of the functions concerned is:
39195bd8deadSopenharmony_ci
39205bd8deadSopenharmony_ci        void VertexAttrib{1234}{sfd}( uint index, T values );
39215bd8deadSopenharmony_ci        void VertexAttrib{123}{sfd}v( uint index, const T *values );
39225bd8deadSopenharmony_ci        void VertexAttrib4{bsifd ub us ui}v( uint index, const T *values );
39235bd8deadSopenharmony_ci        void VertexAttrib4Nub( uint index, ubyte x, ubyte y, ubyte z, ubyte w );
39245bd8deadSopenharmony_ci        void VertexAttrib4N{bsi ub us ui}v( uint index, const T *values );
39255bd8deadSopenharmony_ci        void VertexAttribI{1234}{i ui}( uint index, T values );
39265bd8deadSopenharmony_ci        void VertexAttribI{1234}{i ui}v( uint index, const T *values );
39275bd8deadSopenharmony_ci        void VertexAttribI4{b s ub us}v( uint index, const T *values );
39285bd8deadSopenharmony_ci        void VertexAttribL{1234}d( uint index, const T values );
39295bd8deadSopenharmony_ci        void VertexAttribL{1234}dv( uint index, const T *values );
39305bd8deadSopenharmony_ci        void VertexAttribP{1234}ui(uint index,enum type,boolean normalized,uint value);
39315bd8deadSopenharmony_ci        void VertexAttribP{1234}uiv(uint index,enum type,boolean normalized,const uint *value);
39325bd8deadSopenharmony_ci
39335bd8deadSopenharmony_ci        RESOLVED: The default vertex attribute value is not a VAO state. No
39345bd8deadSopenharmony_ci        need to add any function. We can still use the existing functions on a
39355bd8deadSopenharmony_ci        software design based on DSA.
39365bd8deadSopenharmony_ci
39375bd8deadSopenharmony_ci    27) Should we add multi bind versions of TransformFeedbackBufferBase and
39385bd8deadSopenharmony_ci        TransformFeedbackBufferRange?
39395bd8deadSopenharmony_ci
39405bd8deadSopenharmony_ci        RESOLVED: No. On the contrary to the vertex array object, the
39415bd8deadSopenharmony_ci        transform feedback object doesn't contain a lot of state and actually
39425bd8deadSopenharmony_ci        most of the states are relatived to the bound buffers.
39435bd8deadSopenharmony_ci
39445bd8deadSopenharmony_ci        The purpose of BindVertexBuffers for the VAOs it to quickly switch
39455bd8deadSopenharmony_ci        buffers while remaining the same set of buffers in the rendering loop.
39465bd8deadSopenharmony_ci
39475bd8deadSopenharmony_ci        With the transform buffer object, we essentially only have buffers. If
39485bd8deadSopenharmony_ci        the OpenGL programmer want to quickly switch transform feedback
39495bd8deadSopenharmony_ci        buffers, he can create multiple transform feedback objects.
39505bd8deadSopenharmony_ci
39515bd8deadSopenharmony_ci    28) What ARB only extensions have interactions with
39525bd8deadSopenharmony_ci        ARB_direct_state_access?
39535bd8deadSopenharmony_ci
39545bd8deadSopenharmony_ci        RESOLVED: GL_ARB_sparse_texture and GL_ARB_sparse_buffer
39555bd8deadSopenharmony_ci
39565bd8deadSopenharmony_ci    29) Are we missing CreateSync?
39575bd8deadSopenharmony_ci
39585bd8deadSopenharmony_ci        RESOLVED: No. Sync object are created with FenceSync which behave
39595bd8deadSopenharmony_ci        similarly to the new Create* API expect that it returns a handle. The
39605bd8deadSopenharmony_ci        sync object is perfectly compatible with the DSA programming paradigm.
39615bd8deadSopenharmony_ci
39625bd8deadSopenharmony_ci    30) Do we need NamedFramebufferTextureND?
39635bd8deadSopenharmony_ci
39645bd8deadSopenharmony_ci        RESOLVED: No. In unextended OpenGL 4.4 there is at least one case that
39655bd8deadSopenharmony_ci        NamedFramebufferTexture and NamedFramebufferTextureLayer can't handle:
39665bd8deadSopenharmony_ci        non layered rendering to a cube map. In this extension, we extend
39675bd8deadSopenharmony_ci        FramebufferTextureLayer (and NamedFramebufferTextureLayer) to allow
39685bd8deadSopenharmony_ci        non-layered rendering to cube map faces. See also Issue 36.
39695bd8deadSopenharmony_ci
39705bd8deadSopenharmony_ci    31) Do we need VertexArray*Offset? These are present in
39715bd8deadSopenharmony_ci        EXT_direct_state_access.
39725bd8deadSopenharmony_ci
39735bd8deadSopenharmony_ci        RESOLVED: No. GL 4.4 intoduced ARB_vertex_attrib_binding which allows
39745bd8deadSopenharmony_ci        separately changing the buffer (via BindVertexBuffer) and setting the
39755bd8deadSopenharmony_ci        format (via VertexAttribFormat). In this version we provide DSA routines
39765bd8deadSopenharmony_ci        to match these: VertexArrayVertexBuffer and VertexArrayAttribFormat.
39775bd8deadSopenharmony_ci
39785bd8deadSopenharmony_ci        Futhermore, no need to add VertexArrayAttribBinding, we can use
39795bd8deadSopenharmony_ci        VertexArrayBindingDivisor which is based on ARB_vertex_attrib_binding
39805bd8deadSopenharmony_ci        too.
39815bd8deadSopenharmony_ci
39825bd8deadSopenharmony_ci        UNRESOLVED: If there's no VertexArrayAttribBinding, the example
39835bd8deadSopenharmony_ci        code needs to be rewritten accordingly.
39845bd8deadSopenharmony_ci
39855bd8deadSopenharmony_ci    32) Do we need DSA for renderbuffer?
39865bd8deadSopenharmony_ci
39875bd8deadSopenharmony_ci        RESOLVED: Keep renderbuffers. We don't need them as texture objects
39885bd8deadSopenharmony_ci        are a superset of renderbuffer objects but the group decided to keep
39895bd8deadSopenharmony_ci        them.
39905bd8deadSopenharmony_ci
39915bd8deadSopenharmony_ci    33) Atomic buffers only have a shader binding qualifier but no API.
39925bd8deadSopenharmony_ci        Should we add ProgramAtomicBufferBinding?
39935bd8deadSopenharmony_ci
39945bd8deadSopenharmony_ci        RESOLVED: Deferred.
39955bd8deadSopenharmony_ci
39965bd8deadSopenharmony_ci    34) Can the default framebuffer be targeted? If so, how?
39975bd8deadSopenharmony_ci
39985bd8deadSopenharmony_ci        RESOLVED: YES, with certain exceptions. Most commands accepting a
39995bd8deadSopenharmony_ci        <framebuffer> name accept zero and explicitly target the default
40005bd8deadSopenharmony_ci        read or draw framebuffer in this case, matching behavior of the
40015bd8deadSopenharmony_ci        non-Named versions. CheckFramebufferStatus adds a <target> selector.
40025bd8deadSopenharmony_ci        There is a minor loss of functionality for
40035bd8deadSopenharmony_ci        GetNamedFramebufferParameteriv,
40045bd8deadSopenharmony_ci        GetNamedFramebufferAttachmentParameteriv,
40055bd8deadSopenharmony_ci        InvalidateNamedFramebufferSubData, and
40065bd8deadSopenharmony_ci        InvalidateNamedFramebufferData. These commands accept <framebuffer>
40075bd8deadSopenharmony_ci        zero and target the default draw framebuffer. They cannot be used to
40085bd8deadSopenharmony_ci        target the default read framebuffer without adding an explicit
40095bd8deadSopenharmony_ci        selector, which we felt was too much work for a corner case.
40105bd8deadSopenharmony_ci
40115bd8deadSopenharmony_ci        DISCUSSION: Christophe suggested using CreateFramebuffers to create
40125bd8deadSopenharmony_ci        non-zero names for the read and draw framebuffer objects. We decided
40135bd8deadSopenharmony_ci        not to do this as it's quite complex to work out all the details.
40145bd8deadSopenharmony_ci
40155bd8deadSopenharmony_ci    35) Does the CheckNamedFramebufferStatus need a <target> parameter to
40165bd8deadSopenharmony_ci        specify what type of completeness should be checked for?
40175bd8deadSopenharmony_ci
40185bd8deadSopenharmony_ci        RESOLVED: Yes.
40195bd8deadSopenharmony_ci
40205bd8deadSopenharmony_ci        DISCUSSION: CheckFramebufferStatus checks framebuffer completeness
40215bd8deadSopenharmony_ci        independently for the "read framebuffer" and the "draw framebuffer"
40225bd8deadSopenharmony_ci        cases and it's not because one is complete that the other is
40235bd8deadSopenharmony_ci        complete as well.
40245bd8deadSopenharmony_ci
40255bd8deadSopenharmony_ci        Three approaches to resolve this issue:
40265bd8deadSopenharmony_ci
40275bd8deadSopenharmony_ci        a) Add a <target> to CheckNamedFramebufferStatus. The
40285bd8deadSopenharmony_ci           EXT_framebuffer_object way with clearer language.
40295bd8deadSopenharmony_ci
40305bd8deadSopenharmony_ci        b) Add a <target> to the framebuffer object just like we did for
40315bd8deadSopenharmony_ci           the texture object and the query object.
40325bd8deadSopenharmony_ci
40335bd8deadSopenharmony_ci        c) Always check for both. The application can use ReadBuffer(NONE)
40345bd8deadSopenharmony_ci           or DrawBuffer(NONE) if it is really concerned by respectively
40355bd8deadSopenharmony_ci           only the "read framebuffer" or "draw framebuffer" case.
40365bd8deadSopenharmony_ci
40375bd8deadSopenharmony_ci    36) Can we fix FramebufferTexture?
40385bd8deadSopenharmony_ci
40395bd8deadSopenharmony_ci        OpenGL 4.4 has 5 different functions to attach textures to a
40405bd8deadSopenharmony_ci        framebuffer where each function has specific behaviors, that either
40415bd8deadSopenharmony_ci        attached a texture image, enable layered or both according to the
40425bd8deadSopenharmony_ci        target. Specific functions like FramebufferTexture1D and
40435bd8deadSopenharmony_ci        FramebufferTexture3D apply only on the target 1D and target 3D
40445bd8deadSopenharmony_ci        respectively. Finally, we can only attach cube map faces using
40455bd8deadSopenharmony_ci        FramebufferTexture2D while there is no specific functional
40465bd8deadSopenharmony_ci        limitation to be able to do it with FramebufferTextureLayer. This
40475bd8deadSopenharmony_ci        inconsistency is largely due to legacy.
40485bd8deadSopenharmony_ci
40495bd8deadSopenharmony_ci        FramebufferTexture, single layer:
40505bd8deadSopenharmony_ci        - one-or two-dimensional texture
40515bd8deadSopenharmony_ci        - rectangle texture
40525bd8deadSopenharmony_ci        - two-dimensional multisample texture
40535bd8deadSopenharmony_ci
40545bd8deadSopenharmony_ci         FramebufferTexture, Layered:
40555bd8deadSopenharmony_ci        - three-dimensional texture
40565bd8deadSopenharmony_ci        - cube map texture
40575bd8deadSopenharmony_ci        - one-or two-dimensional array texture
40585bd8deadSopenharmony_ci        - two-dimensional multisample array texture
40595bd8deadSopenharmony_ci        - cube map array texture (intended - Bug 12336)
40605bd8deadSopenharmony_ci
40615bd8deadSopenharmony_ci        FramebufferTextureLayer, single layer:
40625bd8deadSopenharmony_ci        - three-dimensional texture
40635bd8deadSopenharmony_ci        - cube map array texture
40645bd8deadSopenharmony_ci        - one-or two-dimensional array texture
40655bd8deadSopenharmony_ci        - two-dimensional multisample array texture
40665bd8deadSopenharmony_ci        [*missing* cube map face]
40675bd8deadSopenharmony_ci
40685bd8deadSopenharmony_ci        FramebufferTexture1D, single layer:
40695bd8deadSopenharmony_ci        - one-dimensional texture
40705bd8deadSopenharmony_ci
40715bd8deadSopenharmony_ci        FramebufferTexture2D, single layer:
40725bd8deadSopenharmony_ci        - cube map face
40735bd8deadSopenharmony_ci        - rectangle texture
40745bd8deadSopenharmony_ci        - two-dimensional texture
40755bd8deadSopenharmony_ci        - two-dimensional multisample texture
40765bd8deadSopenharmony_ci
40775bd8deadSopenharmony_ci        FramebufferTexture3D, single layer:
40785bd8deadSopenharmony_ci        - three-dimensional texture
40795bd8deadSopenharmony_ci
40805bd8deadSopenharmony_ci        DSA is an opportunity for some clean up.
40815bd8deadSopenharmony_ci
40825bd8deadSopenharmony_ci        RESOLVED.  We will add NamedFramebufferTexture and
40835bd8deadSopenharmony_ci        NamedFramebufferTextureLayer, but not NamedFramebufferTexture1D/2D/3D.
40845bd8deadSopenharmony_ci        We'll augment FramebufferTextureLayer and NamedFramebufferTextureLayer
40855bd8deadSopenharmony_ci        with support for cube map textures, so that these methods are
40865bd8deadSopenharmony_ci        complete replacements for the (now legacy) FramebufferTextureND functions.
40875bd8deadSopenharmony_ci
40885bd8deadSopenharmony_ci    37) How to handle UNPACK_SKIP_IMAGES pixel store state if we
40895bd8deadSopenharmony_ci        resolve issue 25 by collapsing Texture*ND functions?
40905bd8deadSopenharmony_ci
40915bd8deadSopenharmony_ci        DISCUSSION:
40925bd8deadSopenharmony_ci
40935bd8deadSopenharmony_ci        The OpenGL 4.4 core specification specify a specific behavior for
40945bd8deadSopenharmony_ci        TexImage2D where UNPACK_SKIP_IMAGES is ignored using the following
40955bd8deadSopenharmony_ci        language:
40965bd8deadSopenharmony_ci
40975bd8deadSopenharmony_ci        "For the purposes of decoding the texture image, TexImage2D is
40985bd8deadSopenharmony_ci        equivalent to calling TexImage3D with corresponding arguments and
40995bd8deadSopenharmony_ci        depth of 1, except that UNPACK_SKIP_IMAGES is ignored"
41005bd8deadSopenharmony_ci
41015bd8deadSopenharmony_ci        However, the specification doesn't clarify anything for regarding
41025bd8deadSopenharmony_ci        the equivalent issue UNPACK_SKIP_ROWS with TexImage1D which seems to
41035bd8deadSopenharmony_ci        imply that UNPACK_SKIP_IMAGES and UNPACK_SKIP_ROWS have inconsistent
41045bd8deadSopenharmony_ci        behaviours.
41055bd8deadSopenharmony_ci
41065bd8deadSopenharmony_ci        A threaded producer and consumer OpenGL implementation might perform
41075bd8deadSopenharmony_ci        the unparking on the application thread in which case it may have no
41085bd8deadSopenharmony_ci        information about the texture object states, hence no access to the
41095bd8deadSopenharmony_ci        implied texture target that could have been used to select whether
41105bd8deadSopenharmony_ci        UNPACK_SKIP_IMAGES should be ignore or not.
41115bd8deadSopenharmony_ci
41125bd8deadSopenharmony_ci        In practice, even if UNPACK_SKIP_IMAGES was active for TexImage2D,
41135bd8deadSopenharmony_ci        it would have an effect only if the default value (zero) is replaced
41145bd8deadSopenharmony_ci        by a positive value.
41155bd8deadSopenharmony_ci
41165bd8deadSopenharmony_ci        The theory behind collapsing Tex*ND functions is that any set of
41175bd8deadSopenharmony_ci        coordinates is a generalization of any set of coordinates with N or
41185bd8deadSopenharmony_ci        less coordinates. There is no reason to forbid UNPACK_SKIP_IMAGES or
41195bd8deadSopenharmony_ci        UNPACK_SKIP_ROWS for collapsed any Tex* functions.
41205bd8deadSopenharmony_ci
41215bd8deadSopenharmony_ci        We can't simply relax UNPACK_SKIP_IMAGES on TexImage2D because an
41225bd8deadSopenharmony_ci        application may rely on the side effects of this behavior which
41235bd8deadSopenharmony_ci        would result in a backward compatibility break.
41245bd8deadSopenharmony_ci
41255bd8deadSopenharmony_ci        RESOLVED: Not applicable. We didn't include these commands.
41265bd8deadSopenharmony_ci
41275bd8deadSopenharmony_ci    38) Do we need the CopyTextureImageSubData command?
41285bd8deadSopenharmony_ci
41295bd8deadSopenharmony_ci        RESOLVED. No. It is already a DSA command. It would allow us to get
41305bd8deadSopenharmony_ci        rid of the (mostly meaningless) <target> parameter, but that is not a
41315bd8deadSopenharmony_ci        selector and it wouldn't be full replacement as it can't support
41325bd8deadSopenharmony_ci        renderbuffers.
41335bd8deadSopenharmony_ci
41345bd8deadSopenharmony_ci    39) Do we need BeginNamedQuery / EndNamedQuery / QueryNamedCounter?
41355bd8deadSopenharmony_ci
41365bd8deadSopenharmony_ci        RESOLVED. No. CreateQueries adds a <target>, so strictly speaking the
41375bd8deadSopenharmony_ci        <target> command isn't needed for BeginQuery/EndQuery, but in the end,
41385bd8deadSopenharmony_ci        this also isn't a selector, so we decided not to change it.
41395bd8deadSopenharmony_ci
41405bd8deadSopenharmony_ci    40) Should commands accepting a vertex array object name allow it to be
41415bd8deadSopenharmony_ci        zero in the compatibility profile?
41425bd8deadSopenharmony_ci
41435bd8deadSopenharmony_ci        RESOLVED: Yes. All commands accepting <vaobj> names accept zero,
41445bd8deadSopenharmony_ci        indicating the default VAO, in the compatibility profile only.
41455bd8deadSopenharmony_ci
41465bd8deadSopenharmony_ci        DISCUSSION: this case may have been overlooked because the extension
41475bd8deadSopenharmony_ci        was written against the core profile specification. EXT_dsa doesn't
41485bd8deadSopenharmony_ci        appear to allow it, although the error discussion there doesn't
41495bd8deadSopenharmony_ci        exclude it, either (with the odd result that it may imply that a VAO
41505bd8deadSopenharmony_ci        named zero will be created if it doesn't exist).
41515bd8deadSopenharmony_ci
41525bd8deadSopenharmony_ci        The introduction says that "this extension only expands
41535bd8deadSopenharmony_ci        functionality that still exists in core profile OpenGL." However,
41545bd8deadSopenharmony_ci        this is in tension with the desire to not have loss of functionality
41555bd8deadSopenharmony_ci        with the non-DSA functions in this case, and the resolution of issue
41565bd8deadSopenharmony_ci        19 is that DSA functions *can* be used on default objects.
41575bd8deadSopenharmony_ci
41585bd8deadSopenharmony_ci    41) Can READ_BUFFER and DRAW_BUFFERi state be queried with
41595bd8deadSopenharmony_ci        GetNamedFramebufferParameteriv?
41605bd8deadSopenharmony_ci
41615bd8deadSopenharmony_ci        RESOLVED: No. The non-DSA query does not support these
41625bd8deadSopenharmony_ci        tokens so neither does the DSA query.
41635bd8deadSopenharmony_ci
41645bd8deadSopenharmony_ci        Previous versions of the extension contained the following state
41655bd8deadSopenharmony_ci        table additions:
41665bd8deadSopenharmony_ci
41675bd8deadSopenharmony_ci           "Modify Table 23.24, "Framebuffer (state per framebuffer object)"
41685bd8deadSopenharmony_ci
41695bd8deadSopenharmony_ci            Add GetNamedFramebufferParameteriv in 'Get Command' for
41705bd8deadSopenharmony_ci            DRAW_BUFFERi and READ_BUFFER states"
41715bd8deadSopenharmony_ci
41725bd8deadSopenharmony_ci        However, there was no corresponding spec language change explaining
41735bd8deadSopenharmony_ci        how these additional tokens worked, and vendors did not implement
41745bd8deadSopenharmony_ci        support for it.
41755bd8deadSopenharmony_ci
41765bd8deadSopenharmony_ciRevision History
41775bd8deadSopenharmony_ci
41785bd8deadSopenharmony_ci    Rev.    Date        Author    Changes
41795bd8deadSopenharmony_ci    ----  -----------   --------- ---------------------------------------------
41805bd8deadSopenharmony_ci    51    17 Sep 2019   Jon Leech Modify DSA commands to generate
41815bd8deadSopenharmony_ci                                  INVALID_OPERATION errors instead of
41825bd8deadSopenharmony_ci                                  INVALID_ENUM for "effective texture
41835bd8deadSopenharmony_ci                                  <target>" mismatches, following the GL 4.6
41845bd8deadSopenharmony_ci                                  specification (gitlab #22).
41855bd8deadSopenharmony_ci
41865bd8deadSopenharmony_ci    50    14 Jun 2018   T. Karras Use English variable names and fix API usage
41875bd8deadSopenharmony_ci                                  in examples.
41885bd8deadSopenharmony_ci
41895bd8deadSopenharmony_ci    49    23 Jul 2017   Jon Leech Replace the long list of valid <target>
41905bd8deadSopenharmony_ci                                  parameters for BeginQueryIndexed,
41915bd8deadSopenharmony_ci                                  EndQueryIndexed, and GetQueryIndexediv
41925bd8deadSopenharmony_ci                                  with a reference to the list of query
41935bd8deadSopenharmony_ci                                  targets in section 4.2 (gitlab #18).
41945bd8deadSopenharmony_ci
41955bd8deadSopenharmony_ci    48    29 Sep 2016   Jon Leech Add interaction with ARB_query_buffer_object
41965bd8deadSopenharmony_ci                                  (Bug 13490).
41975bd8deadSopenharmony_ci
41985bd8deadSopenharmony_ci    47    22 Oct 2015   Jon Leech Add missing drawbuffer parameter to
41995bd8deadSopenharmony_ci                                  ClearNamedFramebufferfi (public Bug 1394,
42005bd8deadSopenharmony_ci                                  Bug 13469).
42015bd8deadSopenharmony_ci
42025bd8deadSopenharmony_ci    46    25 Jun 2015   Jon Leech Add issue 41 noting that read and drawbuffer
42035bd8deadSopenharmony_ci                                  state cannot be queried with
42045bd8deadSopenharmony_ci                                  GetNamedFramebufferParameteriv (Bug 14207).
42055bd8deadSopenharmony_ci
42065bd8deadSopenharmony_ci    45    20 Apr 2015   Jon Leech Change generated error fo *TexSubImage* with
42075bd8deadSopenharmony_ci                                  invalid <target> to INVALID_ENUM instead of
42085bd8deadSopenharmony_ci                                  INVALID_VALUE (Bug 13563).
42095bd8deadSopenharmony_ci
42105bd8deadSopenharmony_ci    44    27 Jan 2015   Jon Leech Remove unimplementable TEXTURE_BINDING token
42115bd8deadSopenharmony_ci                                  and state, and update Issue 22 (Bug 13278).
42125bd8deadSopenharmony_ci
42135bd8deadSopenharmony_ci    43    26 Sep 2014   Jon Leech Add GetQueryBufferObject* to New Commands +
42145bd8deadSopenharmony_ci                                  minor spacing fixes.
42155bd8deadSopenharmony_ci
42165bd8deadSopenharmony_ci    42    18 Sep 2014   Jon Leech Add GetQueryBufferObject* queries (Bug 1214).
42175bd8deadSopenharmony_ci
42185bd8deadSopenharmony_ci    41    24 Jul 2014   Jon Leech Allow cube map textures to be queried with
42195bd8deadSopenharmony_ci                                  GetTextureLevelParameter*. Don't allow
42205bd8deadSopenharmony_ci                                  cube map face targets as effective targets
42215bd8deadSopenharmony_ci                                  of *TextureSubImage2D, but do allow cube
42225bd8deadSopenharmony_ci                                  map textures as effective targets of the
42235bd8deadSopenharmony_ci                                  corresponding *3D commands (Bug 12451).
42245bd8deadSopenharmony_ci
42255bd8deadSopenharmony_ci    40    17 Jul 2014   Jon Leech Remove TRANSFORM_FEEDBACK_BUFFER_BINDING as
42265bd8deadSopenharmony_ci                                  a valid target for GetTransformFeedbackiv
42275bd8deadSopenharmony_ci                                  (Bug 12462).
42285bd8deadSopenharmony_ci
42295bd8deadSopenharmony_ci    39    17 Jul 2014   criccio   Fix missing VertexArrayAttribBinding function
42305bd8deadSopenharmony_ci
42315bd8deadSopenharmony_ci    38    16 Jul 2014   Jon Leech Fix drawBuffer -> drawbuffer capitalization.
42325bd8deadSopenharmony_ci
42335bd8deadSopenharmony_ci    37    15 Jul 2014   Jon Leech Specify that a zero <framebuffer> argument
42345bd8deadSopenharmony_ci                                  to GetNamedFramebufferParameteriv queries
42355bd8deadSopenharmony_ci                                  the default draw framebuffer, matching API
42365bd8deadSopenharmony_ci                                  spec.
42375bd8deadSopenharmony_ci
42385bd8deadSopenharmony_ci    36    10 Jul 2014   Jon Leech Fix error condition for
42395bd8deadSopenharmony_ci                                  Check*FramebufferStatus.
42405bd8deadSopenharmony_ci
42415bd8deadSopenharmony_ci    35    03 Jul 2014   Jon Leech Fix error condition for BindTextureUnit.
42425bd8deadSopenharmony_ci
42435bd8deadSopenharmony_ci    34    29 Jun 2014   Jon Leech Fix typo in spec prototype for
42445bd8deadSopenharmony_ci                                  TextureStorage2D. Clarify that not all
42455bd8deadSopenharmony_ci                                  GetTransformFeedback* commands accept
42465bd8deadSopenharmony_ci                                  all token names from the state table.
42475bd8deadSopenharmony_ci
42485bd8deadSopenharmony_ci    33    16 Jun 2014   Jon Leech Fix typos.
42495bd8deadSopenharmony_ci
42505bd8deadSopenharmony_ci                                  Require GetTextureImage to accept cube map
42515bd8deadSopenharmony_ci                                  texture objects and to respect
42525bd8deadSopenharmony_ci                                  three-dimensional pixel pack state in this
42535bd8deadSopenharmony_ci                                  case (Bug 12329).
42545bd8deadSopenharmony_ci
42555bd8deadSopenharmony_ci    32    16 Jun 2014   Jon Leech Reflow Issues list and add issue 40.
42565bd8deadSopenharmony_ci
42575bd8deadSopenharmony_ci                                  Finish merging errors and language from
42585bd8deadSopenharmony_ci                                  core API spec.
42595bd8deadSopenharmony_ci
42605bd8deadSopenharmony_ci                                  Allow CheckNamedFramebufferStatus to
42615bd8deadSopenharmony_ci                                  accept a zero <framebuffer> argument,
42625bd8deadSopenharmony_ci                                  indicating the default read or draw
42635bd8deadSopenharmony_ci                                  framebuffer.
42645bd8deadSopenharmony_ci
42655bd8deadSopenharmony_ci                                  Remove VERTEX_ATTRIB_ARRAY_POINTER query
42665bd8deadSopenharmony_ci                                  and add VERTEX_ATTRIB_RELATIVE_OFFSET (Bug
42675bd8deadSopenharmony_ci                                  12330).
42685bd8deadSopenharmony_ci
42695bd8deadSopenharmony_ci                                  Allow commands taking vertex object names
42705bd8deadSopenharmony_ci                                  to accept the name zero, indicating the
42715bd8deadSopenharmony_ci                                  default VAO, in the compatibility profile
42725bd8deadSopenharmony_ci                                  only (issues 19, 40).
42735bd8deadSopenharmony_ci
42745bd8deadSopenharmony_ci                                  Add parameter validation errors for
42755bd8deadSopenharmony_ci                                  TransformFeedbackBuffer{Base,Range} and
42765bd8deadSopenharmony_ci                                  GetTransformFeedback{i,i64}_v.
42775bd8deadSopenharmony_ci
42785bd8deadSopenharmony_ci    31    12 Jun 2014   Jon Leech Merge updated errors and language from the
42795bd8deadSopenharmony_ci                                  core API spec (only done up through
42805bd8deadSopenharmony_ci                                  CreateRenderbuffers, more to be done).
42815bd8deadSopenharmony_ci
42825bd8deadSopenharmony_ci    30    08 Jun 2014   Jon Leech Merged errors into body in new spec style
42835bd8deadSopenharmony_ci                                  (still not up to date with 4.5 API spec).
42845bd8deadSopenharmony_ci                                  Remove VertexArrayAttribBinding per issue
42855bd8deadSopenharmony_ci                                  31. Allow querying the default draw
42865bd8deadSopenharmony_ci                                  framebuffer with
42875bd8deadSopenharmony_ci                                  GetFramebufferAttachmentParameteriv
42885bd8deadSopenharmony_ci                                  (making errors consistent with spec body).
42895bd8deadSopenharmony_ci                                  Reflow a few paragraphs and adjust
42905bd8deadSopenharmony_ci                                  indentation for consistency. Assign enum
42915bd8deadSopenharmony_ci                                  values for QUERY_TARGET, TEXTURE_BINDING,
42925bd8deadSopenharmony_ci                                  and TEXTURE_TARGET.
42935bd8deadSopenharmony_ci
42945bd8deadSopenharmony_ci    29    06 Jun 2014   Jon Leech Remove 'or if such an object has been deleted'
42955bd8deadSopenharmony_ci                                  language from object name validation errors,
42965bd8deadSopenharmony_ci                                  since an 'existing' object has by definition
42975bd8deadSopenharmony_ci                                  not been deleted. Remove tabs.
42985bd8deadSopenharmony_ci
42995bd8deadSopenharmony_ci    28    03 Jun 2014   Jon Leech Fix typo 'img' -> 'pixels'.
43005bd8deadSopenharmony_ci
43015bd8deadSopenharmony_ci    27    30 May 2014   dkoch     Resolved issue 30, 36, and supporting edits.
43025bd8deadSopenharmony_ci                                  Resolved issue 25 and removed collapsed
43035bd8deadSopenharmony_ci                                  commands variants. Resolved issue 37.
43045bd8deadSopenharmony_ci                                  Resolved issue 15, 18 (wontfix).
43055bd8deadSopenharmony_ci                                  Removed CopyTextureImageSubData (Issue 38).
43065bd8deadSopenharmony_ci                                  Removed Begin/EndNamedQuery/QueryNamedCounter
43075bd8deadSopenharmony_ci                                  (Issue 39).
43085bd8deadSopenharmony_ci                                  Rename BindTextureBase to BindTextureUnit
43095bd8deadSopenharmony_ci
43105bd8deadSopenharmony_ci    26    28 May 2014   criccio   Improved the structural consistency.
43115bd8deadSopenharmony_ci
43125bd8deadSopenharmony_ci    25    27 May 2014   criccio   Documented issue 36.
43135bd8deadSopenharmony_ci                                  Added proposed language to resolve issue 36.
43145bd8deadSopenharmony_ci
43155bd8deadSopenharmony_ci    24    26 May 2014   criccio   Added issue 36.
43165bd8deadSopenharmony_ci                                  Added issue 37.
43175bd8deadSopenharmony_ci
43185bd8deadSopenharmony_ci    23    26 May 2014   dkoch     Fix typos, parameter names and references.
43195bd8deadSopenharmony_ci
43205bd8deadSopenharmony_ci    22    23 May 2014   criccio   Renamed CopyTextureSubImageData into
43215bd8deadSopenharmony_ci                                  CopyTextureImageSubData from Daniel comments.
43225bd8deadSopenharmony_ci                                  Updated issue 18 discussion.
43235bd8deadSopenharmony_ci                                  Added collapsed texture functions languages.
43245bd8deadSopenharmony_ci                                  Issue 25 is still to be fixed.
43255bd8deadSopenharmony_ci                                  Added new sample.
43265bd8deadSopenharmony_ci
43275bd8deadSopenharmony_ci    21    22 May 2014   criccio   Fixed Get*TextureImage parameters order.
43285bd8deadSopenharmony_ci                                  Completed modification to tables chapter 23.
43295bd8deadSopenharmony_ci                                  Added missing GetVertexArrayIndexed64iv.
43305bd8deadSopenharmony_ci                                  Fixed accepted enum for GetVertexArray*.
43315bd8deadSopenharmony_ci
43325bd8deadSopenharmony_ci    20    21 May 2014   criccio   Document issue 35 with the three alternatives
43335bd8deadSopenharmony_ci                                  envisioned.
43345bd8deadSopenharmony_ci                                  Clean up.
43355bd8deadSopenharmony_ci
43365bd8deadSopenharmony_ci    19    21 May 2014   dkoch     Added FramebufferTexture*D, QueryNamedCounter.
43375bd8deadSopenharmony_ci                                  Fixed CheckNamedFramebufferStatus and Issue 35.
43385bd8deadSopenharmony_ci
43395bd8deadSopenharmony_ci    18    21 May 2014   criccio   Fixed typos.
43405bd8deadSopenharmony_ci                                  Integrated Daniel review.
43415bd8deadSopenharmony_ci                                  Document issue 34.
43425bd8deadSopenharmony_ci                                  Updated table chapter 23.
43435bd8deadSopenharmony_ci
43445bd8deadSopenharmony_ci    17    20 May 2014   criccio   There is no default VAO in core profile, fix
43455bd8deadSopenharmony_ci                                  functions allowing zero.
43465bd8deadSopenharmony_ci                                  Added invalid operation error on
43475bd8deadSopenharmony_ci                                  TextureBuffer.
43485bd8deadSopenharmony_ci
43495bd8deadSopenharmony_ci    16    19 May 2014   criccio   Documented issue 30 and resolved it.
43505bd8deadSopenharmony_ci                                  Added issue 34.
43515bd8deadSopenharmony_ci                                  Added all the errors relative the object name
43525bd8deadSopenharmony_ci                                  passed to the new DSA functions.
43535bd8deadSopenharmony_ci
43545bd8deadSopenharmony_ci    15    18 May 2014   criccio   Resolved issue 19 and added errors relative
43555bd8deadSopenharmony_ci                                  to this issue.
43565bd8deadSopenharmony_ci                                  Updated and resolved issue 12.
43575bd8deadSopenharmony_ci                                  Updated and resolved issue 24.
43585bd8deadSopenharmony_ci                                  Resolved issue 27.
43595bd8deadSopenharmony_ci                                  Added language for query object interaction.
43605bd8deadSopenharmony_ci                                  Added issue 32.
43615bd8deadSopenharmony_ci                                  Resolved issue 11 accordingly to the
43625bd8deadSopenharmony_ci                                  resolution of issue 31.
43635bd8deadSopenharmony_ci                                  Updated and resolved issue 29.
43645bd8deadSopenharmony_ci                                  Resolved issue 20.
43655bd8deadSopenharmony_ci                                  Added example 1 to 3.
43665bd8deadSopenharmony_ci                                  Document issue 25 and 18.
43675bd8deadSopenharmony_ci                                  Added issue 33 and 34.
43685bd8deadSopenharmony_ci
43695bd8deadSopenharmony_ci    14    17 May 2014   criccio   Resolved issue 22.
43705bd8deadSopenharmony_ci                                  Add comments to the resolution of issue 31.
43715bd8deadSopenharmony_ci                                  Added language for missing functions.
43725bd8deadSopenharmony_ci
43735bd8deadSopenharmony_ci    13    17 May 2014   dkoch     Finish removing GetTransformFeedbackBooleanv.
43745bd8deadSopenharmony_ci                                  Added NamedFramebufferTextureND (Issue 30).
43755bd8deadSopenharmony_ci                                  Removed VertexArray*Offset (Issue 31).
43765bd8deadSopenharmony_ci                                  Minor editorial changes.
43775bd8deadSopenharmony_ci
43785bd8deadSopenharmony_ci    12    16 May 2014   criccio   Added BeginNamedQuery and EndNamedQuery
43795bd8deadSopenharmony_ci                                  function and a target state to the query
43805bd8deadSopenharmony_ci                                  object to complete the resolution of issue 4.
43815bd8deadSopenharmony_ci                                  Removed GetTransformFeedbackBooleanv function
43825bd8deadSopenharmony_ci                                  and added modifications for transform feedback
43835bd8deadSopenharmony_ci                                  state table to list the DSA functions to query
43845bd8deadSopenharmony_ci                                  the transform feedback states.
43855bd8deadSopenharmony_ci
43865bd8deadSopenharmony_ci    11    16 May 2014   dkoch     Fixed various typos. Resolved issue 4, 13, 14.
43875bd8deadSopenharmony_ci                                  Fixed prototypes and description of
43885bd8deadSopenharmony_ci                                  InvalidateNamed{Sub}Framebuffer.
43895bd8deadSopenharmony_ci
43905bd8deadSopenharmony_ci    10    16 May 2014   criccio   Added issues 0, 22, 24 to 29.
43915bd8deadSopenharmony_ci                                  Resolved issue 26.
43925bd8deadSopenharmony_ci                                  Fixed the language for GetCompressedTextureImage
43935bd8deadSopenharmony_ci                                  and GetTextureImage: <pixels> and <level>
43945bd8deadSopenharmony_ci                                  instead of <img> and <lod>.
43955bd8deadSopenharmony_ci                                  Additional reorganization of "New Procedures
43965bd8deadSopenharmony_ci                                  and Functions" section.
43975bd8deadSopenharmony_ci                                  Added dependence to OpenGL 2.0.
43985bd8deadSopenharmony_ci                                  Added interactions with all the extensions
43995bd8deadSopenharmony_ci                                  concerned since OpenGL 2.0.
44005bd8deadSopenharmony_ci
44015bd8deadSopenharmony_ci    9     16 May 2014   criccio   Fixed BlitNamedFramebuffer language inconsistency.
44025bd8deadSopenharmony_ci                                  Added list of missing functions in todo section.
44035bd8deadSopenharmony_ci                                  Reorganized "New Procedures and Functions"
44045bd8deadSopenharmony_ci                                  section for better readability.
44055bd8deadSopenharmony_ci
44065bd8deadSopenharmony_ci    8     16 May 2014   criccio   Applied DanielK: Typos, renamed
44075bd8deadSopenharmony_ci                                  VERTEX_ARRAY_ELEMENT_BINDING into
44085bd8deadSopenharmony_ci                                  ELEMENT_ARRAY_BUFFER_BINDING.
44095bd8deadSopenharmony_ci                                  Added and fixed issue 21.
44105bd8deadSopenharmony_ci
44115bd8deadSopenharmony_ci    7     15 May 2014   criccio   Removed left over for CompressedTextureImage1D,
44125bd8deadSopenharmony_ci                                  CompressedTextureImage2D and
44135bd8deadSopenharmony_ci                                  CompressedTextureImage3D.
44145bd8deadSopenharmony_ci                                  Removed left over for CopyTextureImage1D,
44155bd8deadSopenharmony_ci                                  CopyTextureImage2D, TextureImage1D,
44165bd8deadSopenharmony_ci                                  TextureImage2D and TextureImage3D.
44175bd8deadSopenharmony_ci
44185bd8deadSopenharmony_ci                                  Added and resolve issue 10.
44195bd8deadSopenharmony_ci                                  Fixed GetVertexArrayAttribPointerv prototype
44205bd8deadSopenharmony_ci                                  and language.
44215bd8deadSopenharmony_ci                                  Added issue 11.
44225bd8deadSopenharmony_ci                                  Resolved issue 5 and 3.
44235bd8deadSopenharmony_ci                                  Resolved issue 6 and fix associated prototype.
44245bd8deadSopenharmony_ci                                  Added issues 12 to 20.
44255bd8deadSopenharmony_ci                                  Updated issue 1 and 8 to be less specific.
44265bd8deadSopenharmony_ci                                  Added Transistioning guide to
44275bd8deadSopenharmony_ci                                  ARB_direct_state_access section.
44285bd8deadSopenharmony_ci
44295bd8deadSopenharmony_ci      6   15 May 2014   gsellers  More updates. Will it ever end?
44305bd8deadSopenharmony_ci
44315bd8deadSopenharmony_ci      5   15 Apr 2014   criccio   Clean up, typos.
44325bd8deadSopenharmony_ci
44335bd8deadSopenharmony_ci      4    2 Apr 2014   gsellers  More updates.
44345bd8deadSopenharmony_ci
44355bd8deadSopenharmony_ci      3    7 Fev 2014   gsellers  More updates. Ready for initial review. All
44365bd8deadSopenharmony_ci                                  functions mostly documented.
44375bd8deadSopenharmony_ci
44385bd8deadSopenharmony_ci      2   30 Jan 2014   gsellers  Updates - documented more functions.
44395bd8deadSopenharmony_ci
44405bd8deadSopenharmony_ci      1   23 Dec 2013   gsellers  Initial revision based on EXT_dsa.
4441