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