15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_vertex_array_object 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_vertex_array_object 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Ian Romanick, IBM Corporation (idr 'at' us.ibm.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciNotice 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at 165bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciSpecification Update Policy 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 215bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 225bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 235bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 245bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 255bd8deadSopenharmony_ci described in more detail at 265bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ciStatus 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci Approved by the ARB on July 11, 2008 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ciVersion 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ci Last Modified Data: October 8, 2012 355bd8deadSopenharmony_ci Author revision: 13 365bd8deadSopenharmony_ci 375bd8deadSopenharmony_ciNumber 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ci ARB Extension #54 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ciDependencies 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ci This extension is written against the OpenGL 2.1 specification (December 445bd8deadSopenharmony_ci 1st, 2006). 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci APPLE_vertex_array_object affects the definition of this extension. 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciOverview 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci This extension introduces named vertex array objects which encapsulate 515bd8deadSopenharmony_ci vertex array state on the client side. These objects allow applications 525bd8deadSopenharmony_ci to rapidly switch between large sets of array state. In addition, layered 535bd8deadSopenharmony_ci libraries can return to the default array state by simply creating and 545bd8deadSopenharmony_ci binding a new vertex array object. 555bd8deadSopenharmony_ci 565bd8deadSopenharmony_ci This extension differs from GL_APPLE_vertex_array_object in that client 575bd8deadSopenharmony_ci memory cannot be accessed through a non-zero vertex array object. It also 585bd8deadSopenharmony_ci differs in that vertex array objects are explicitly not sharable between 595bd8deadSopenharmony_ci contexts. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ciNew Procedures and Functions 625bd8deadSopenharmony_ci 635bd8deadSopenharmony_ci void BindVertexArray(uint array); 645bd8deadSopenharmony_ci 655bd8deadSopenharmony_ci void DeleteVertexArrays(sizei n, const uint *arrays); 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci void GenVertexArrays(sizei n, uint *arrays); 685bd8deadSopenharmony_ci 695bd8deadSopenharmony_ci boolean IsVertexArray(uint array); 705bd8deadSopenharmony_ci 715bd8deadSopenharmony_ciNew Tokens 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 745bd8deadSopenharmony_ci GetFloatv, and GetDoublev: 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci VERTEX_ARRAY_BINDING 0x85B5 775bd8deadSopenharmony_ci 785bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation) 795bd8deadSopenharmony_ci 805bd8deadSopenharmony_ci Add new section "2.X Vertex Array Objects" between sections "2.9 Buffer 815bd8deadSopenharmony_ci Objects" and "2.10 Rectangles". 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci The buffer objects that are to be used by the vertex and geometry stages 845bd8deadSopenharmony_ci of the GL are collected together to form a vertex array object. All 855bd8deadSopenharmony_ci state related to the definition of data used by the vertex processor is 865bd8deadSopenharmony_ci encapsulated in a vertex array object. 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci The command 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci void GenVertexArrays(sizei n, uint *arrays); 915bd8deadSopenharmony_ci 925bd8deadSopenharmony_ci returns <n> previous unused vertex array object names in <arrays>. These 935bd8deadSopenharmony_ci names are marked as used, for the purposes of GenVertexArrays only, but 945bd8deadSopenharmony_ci they acquire array state only when they are first bound. 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci Vertex array objects are deleted by calling 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ci void DeleteVertexArrays(sizei n, const uint *arrays); 995bd8deadSopenharmony_ci 1005bd8deadSopenharmony_ci <arrays> contains <n> names of vertex array objects to be deleted. Once 1015bd8deadSopenharmony_ci a vertex array object is deleted it has no contents and its name is 1025bd8deadSopenharmony_ci again unused. If a vertex array object that is currently bound is 1035bd8deadSopenharmony_ci deleted, the binding for that object reverts to zero and the default 1045bd8deadSopenharmony_ci vertex array becomes current. Unused names in <arrays> are silently 1055bd8deadSopenharmony_ci ignored, as is the value zero. 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci A vertex array object is created by binding a name returned by 1085bd8deadSopenharmony_ci GenVertexArrays with the command 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci void BindVertexArray(uint array); 1115bd8deadSopenharmony_ci 1125bd8deadSopenharmony_ci <array> is the vertex array object name. The resulting vertex array 1135bd8deadSopenharmony_ci object is a new state vector, comprising all the state values listed in 1145bd8deadSopenharmony_ci tables 6.6 (except for the CLIENT_ACTIVE_TEXTURE selector state), 6.7, 1155bd8deadSopenharmony_ci and 6.8 (except for the ARRAY_BUFFER_BINDING state). 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci BindVertexArray may also be used to bind an existing vertex array 1185bd8deadSopenharmony_ci object. If the bind is successful no change is made to the state of the 1195bd8deadSopenharmony_ci bound vertex array object, and any previous binding is broken. 1205bd8deadSopenharmony_ci 1215bd8deadSopenharmony_ci The currently bound vertex array object is used for all commands 1225bd8deadSopenharmony_ci which modify vertex array state, such as VertexAttribPointer and 1235bd8deadSopenharmony_ci EnableVertexAttribArray; all commands which draw from vertex arrays, 1245bd8deadSopenharmony_ci such as DrawArrays and DrawElements; and all queries of vertex 1255bd8deadSopenharmony_ci array state (see chapter 6). 1265bd8deadSopenharmony_ci 1275bd8deadSopenharmony_ci BindVertexArray fails and an INVALID_OPERATION error is generated if 1285bd8deadSopenharmony_ci array is not zero or a name returned from a previous call to 1295bd8deadSopenharmony_ci GenVertexArrays, or if such a name has since been deleted with 1305bd8deadSopenharmony_ci DeleteVertexArrays. 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ci An INVALID_OPERATION error is generated if any of the *Pointer commands 1335bd8deadSopenharmony_ci specifying the location and organization of vertex data are called while 1345bd8deadSopenharmony_ci a non-zero vertex array object is bound, zero is bound to the 1355bd8deadSopenharmony_ci ARRAY_BUFFER buffer object, and the pointer is not NULL[fn]. 1365bd8deadSopenharmony_ci [fn: This error makes it impossible to create a vertex array 1375bd8deadSopenharmony_ci object containing client array pointers.] 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization) 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ci None 1425bd8deadSopenharmony_ci 1435bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment 1445bd8deadSopenharmony_ci Operations and the Framebuffer) 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ci None 1475bd8deadSopenharmony_ci 1485bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 2.1 Specification (Special Functions) 1495bd8deadSopenharmony_ci 1505bd8deadSopenharmony_ci Modify Section 5.4, Display Lists (p. 240) 1515bd8deadSopenharmony_ci 1525bd8deadSopenharmony_ci (add new paragraph after 10th paragraph on p. 244) 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci Vertex array objects: GenVertexArrays, DeleteVertexArrays, 1555bd8deadSopenharmony_ci BindVertexArray 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 2.1 Specification (Querying GL State) 1585bd8deadSopenharmony_ci 1595bd8deadSopenharmony_ci Modify Section 6.1.2, Data Conversions (p. 248) 1605bd8deadSopenharmony_ci 1615bd8deadSopenharmony_ci (add new paragraph after last paragraph of section, p. 249) 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci Vertex-array state variables are qualified by the value of 1645bd8deadSopenharmony_ci VERTEX_ARRAY_BINDING to determine which vertex array object is queried. 1655bd8deadSopenharmony_ci Tables 6.6, 6.7, and 6.8 define the set of state stored in a vertex array 1665bd8deadSopenharmony_ci object. 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci Modify Section 6.1.11, Pointer and String Queries (p. 257) 1695bd8deadSopenharmony_ci 1705bd8deadSopenharmony_ci (add new paragraph after 1st paragraph of section, p. 257) 1715bd8deadSopenharmony_ci 1725bd8deadSopenharmony_ci Queries for VERTEX_ARRAY_POINTER, NORMAL_ARRAY_POINTER, 1735bd8deadSopenharmony_ci COLOR_ARRAY_POINTER, SECONDARY_COLOR_ARRAY_POINTER, INDEX_ARRAY_POINTER, 1745bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY_POINTER, FOG_COORD_ARRAY_POINTER, or 1755bd8deadSopenharmony_ci EDGE_FLAG_ARRAY_POINTER return the value stored in the currently bound 1765bd8deadSopenharmony_ci vertex array object. 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci Add new section "6.1.X Vertex Array Object Queries" between sections 1795bd8deadSopenharmony_ci "6.1.13 Buffer Object Queries" and "6.1.14 Shader and Program Queries". 1805bd8deadSopenharmony_ci 1815bd8deadSopenharmony_ci The command 1825bd8deadSopenharmony_ci 1835bd8deadSopenharmony_ci boolean IsVertexArray(uint array); 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci returns TRUE if <array> is the name of a vertex array object. If <array> 1865bd8deadSopenharmony_ci is zero, or a non-zero value that is not the name of a vertex array 1875bd8deadSopenharmony_ci object, IsVertexArray returns FALSE. No error is generated is <array> is 1885bd8deadSopenharmony_ci not a valid vertex array object name. 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci Modify Section 6.1.14, Shader and Program Queries, p. 260 1915bd8deadSopenharmony_ci 1925bd8deadSopenharmony_ci (modify the first paragraph on page 263) 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci Replace the text 1955bd8deadSopenharmony_ci 1965bd8deadSopenharmony_ci "Note that all the queries except CURRENT_VERTEX_ATTRIB return client 1975bd8deadSopenharmony_ci state." 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci with 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ci "Note that all the queries except CURRENT_VERTEX_ATTRIB return values 2025bd8deadSopenharmony_ci stored in the currently bound vertex array object (the value of 2035bd8deadSopenharmony_ci VERTEX_ARRAY_BINDING). If the zero object is bound, these values 2045bd8deadSopenharmony_ci are client state." 2055bd8deadSopenharmony_ci 2065bd8deadSopenharmony_ci (modify the 3rd paragraph on page 263 to read) 2075bd8deadSopenharmony_ci 2085bd8deadSopenharmony_ci The command 2095bd8deadSopenharmony_ci 2105bd8deadSopenharmony_ci void GetVertexAttribPointerv(uint index, enum pname, void **pointer); 2115bd8deadSopenharmony_ci 2125bd8deadSopenharmony_ci obtains the pointer named <pname> for vertex attribute numbered <index> 2135bd8deadSopenharmony_ci and places the information in <pointer>. <pname> must be 2145bd8deadSopenharmony_ci VERTEX_ATTRIB_ARRAY_POINTER. The value returned is queried from the 2155bd8deadSopenharmony_ci currently bound vertex array object. If the zero object is bound, the 2165bd8deadSopenharmony_ci value is queried from client state. An INVALID_VALUE error is generated 2175bd8deadSopenharmony_ci if <index> is greater than or equal to the value of MAX_VERTEX_ATTRIBS. 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ciAdditions to Appendix X of the OpenGL X.X specification (Sharing) 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ci Vertex array objects are not sharable between contexts. 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ciAdditions to the GLX Specification 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci No change is made to the GLX API. 2265bd8deadSopenharmony_ci 2275bd8deadSopenharmony_ciInteractions with APPLE_vertex_array_object 2285bd8deadSopenharmony_ci 2295bd8deadSopenharmony_ci Vertex array objects as defined by this spec fill the same role as the 2305bd8deadSopenharmony_ci objects defined in APPLE_vertex_array_object but have some significant 2315bd8deadSopenharmony_ci semantic differences. If both types of object are supported by an 2325bd8deadSopenharmony_ci implementation, BindVertexArray will accept object names from either 2335bd8deadSopenharmony_ci type of object. Names passed to BindVertexArray must have been 2345bd8deadSopenharmony_ci previously returned by GenVertexArrays, previously returned by 2355bd8deadSopenharmony_ci GenVertexArraysAPPLE, or previously bound by BindVertexArrayAPPLE. 2365bd8deadSopenharmony_ci BindVertexArrayAPPLE must also accept names that were previously returned 2375bd8deadSopenharmony_ci by GenVertexArrays and bound with BindVertexArray. 2385bd8deadSopenharmony_ci 2395bd8deadSopenharmony_ci In addition, the enumerant value for VERTEX_ARRAY_BINDING is the same 2405bd8deadSopenharmony_ci as VERTEX_ARRAY_BINDING_APPLE. 2415bd8deadSopenharmony_ci 2425bd8deadSopenharmony_ci This allows applications using ARB VAOs to safely call into libraries that 2435bd8deadSopenharmony_ci internally use Apple VAOs, and vice-versa. 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci The first bind call, either BindVertexArray or BindVertexArrayAPPLE, 2465bd8deadSopenharmony_ci determines the semantic of the object. 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ciGLX Protocol 2495bd8deadSopenharmony_ci 2505bd8deadSopenharmony_ci The following rendering commands are sent to the server as part of a 2515bd8deadSopenharmony_ci glXRender request. 2525bd8deadSopenharmony_ci 2535bd8deadSopenharmony_ci BindVertexArray 2545bd8deadSopenharmony_ci 2555bd8deadSopenharmony_ci 2 8 rendering command length 2565bd8deadSopenharmony_ci 2 350 rendering command opcode 2575bd8deadSopenharmony_ci 4 CARD32 array 2585bd8deadSopenharmony_ci 2595bd8deadSopenharmony_ci DeleteVertexArrays 2605bd8deadSopenharmony_ci 2615bd8deadSopenharmony_ci 2 8+(n*4) rendering command length 2625bd8deadSopenharmony_ci 2 351 rendering command opcode 2635bd8deadSopenharmony_ci 4 CARD32 n 2645bd8deadSopenharmony_ci n*4 LISTofCARD32 arrays 2655bd8deadSopenharmony_ci 2665bd8deadSopenharmony_ci The following non-rendering commands are sent using glx single requests: 2675bd8deadSopenharmony_ci 2685bd8deadSopenharmony_ci GenVertexArrays 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 2715bd8deadSopenharmony_ci 1 206 GLX opcode 2725bd8deadSopenharmony_ci 2 3 request length 2735bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 2745bd8deadSopenharmony_ci 4 CARD32 n 2755bd8deadSopenharmony_ci => 2765bd8deadSopenharmony_ci 1 1 reply 2775bd8deadSopenharmony_ci 1 unused 2785bd8deadSopenharmony_ci 2 CARD16 sequence number 2795bd8deadSopenharmony_ci 4 n reply length 2805bd8deadSopenharmony_ci 24 unused 2815bd8deadSopenharmony_ci n*4 LISTofCARD32 arrays 2825bd8deadSopenharmony_ci 2835bd8deadSopenharmony_ci IsVertexArray 2845bd8deadSopenharmony_ci 2855bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 2865bd8deadSopenharmony_ci 1 207 GLX opcode 2875bd8deadSopenharmony_ci 2 3 request length 2885bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 2895bd8deadSopenharmony_ci 4 CARD32 array 2905bd8deadSopenharmony_ci => 2915bd8deadSopenharmony_ci 1 1 reply 2925bd8deadSopenharmony_ci 1 unused 2935bd8deadSopenharmony_ci 2 CARD16 sequence number 2945bd8deadSopenharmony_ci 4 0 reply length 2955bd8deadSopenharmony_ci 4 BOOL32 return value 2965bd8deadSopenharmony_ci 20 unused 2975bd8deadSopenharmony_ci 2985bd8deadSopenharmony_ci New protocols for GetPointerv and GetVertexAttribPointerv are specified 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci GetPointerv 3015bd8deadSopenharmony_ci 3025bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 3035bd8deadSopenharmony_ci 1 208 GLX opcode 3045bd8deadSopenharmony_ci 2 3 request length 3055bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 3065bd8deadSopenharmony_ci 4 ENUM pname 3075bd8deadSopenharmony_ci => 3085bd8deadSopenharmony_ci 1 1 reply 3095bd8deadSopenharmony_ci 1 1 unused 3105bd8deadSopenharmony_ci 2 CARD16 sequence number 3115bd8deadSopenharmony_ci 4 m reply length, m = (n + p) / 4 3125bd8deadSopenharmony_ci 4 unused 3135bd8deadSopenharmony_ci 4 CARD32 n 3145bd8deadSopenharmony_ci 16 unused 3155bd8deadSopenharmony_ci n LISTofBYTE params 3165bd8deadSopenharmony_ci p unused, p=pad(n) 3175bd8deadSopenharmony_ci 3185bd8deadSopenharmony_ci GetVertexAttribPointerv 3195bd8deadSopenharmony_ci 3205bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 3215bd8deadSopenharmony_ci 1 209 GLX opcode 3225bd8deadSopenharmony_ci 2 4 request length 3235bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 3245bd8deadSopenharmony_ci 4 CARD32 index 3255bd8deadSopenharmony_ci 4 ENUM pname 3265bd8deadSopenharmony_ci => 3275bd8deadSopenharmony_ci 1 1 reply 3285bd8deadSopenharmony_ci 1 1 unused 3295bd8deadSopenharmony_ci 2 CARD16 sequence number 3305bd8deadSopenharmony_ci 4 m reply length, m = (n + p) / 4 3315bd8deadSopenharmony_ci 4 unused 3325bd8deadSopenharmony_ci 4 CARD32 n 3335bd8deadSopenharmony_ci 16 unused 3345bd8deadSopenharmony_ci n LISTofBYTE pointer 3355bd8deadSopenharmony_ci p unused, p=pad(n) 3365bd8deadSopenharmony_ci 3375bd8deadSopenharmony_ciErrors 3385bd8deadSopenharmony_ci 3395bd8deadSopenharmony_ci INVALID_OPERATION is generated if any of the commands defined in this 3405bd8deadSopenharmony_ci extension is executed between the execution of Begin and the corresponding 3415bd8deadSopenharmony_ci execution of End. 3425bd8deadSopenharmony_ci 3435bd8deadSopenharmony_ciNew State 3445bd8deadSopenharmony_ci 3455bd8deadSopenharmony_ci Get Value Get Command Type Value Attrib 3465bd8deadSopenharmony_ci --------- ----------- ---- ------- ------ 3475bd8deadSopenharmony_ci VERTEX_ARRAY_BINDING GetIntegerv Z+ 0 vertex-array 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ciNew Implementation Dependent State 3505bd8deadSopenharmony_ci 3515bd8deadSopenharmony_ci None 3525bd8deadSopenharmony_ci 3535bd8deadSopenharmony_ciIssues 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ci (1) Are vertex array objects client or server state? 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ci DISCUSSION: Ideally they should be server state, like texture objects. 3585bd8deadSopenharmony_ci However, much of the state that is encapsulated by VAOs is client-state. 3595bd8deadSopenharmony_ci 3605bd8deadSopenharmony_ci RESOLUTION: Resolved. VAOs are server state. This essentially means that 3615bd8deadSopenharmony_ci client array state must be duplicated on the server. For practical 3625bd8deadSopenharmony_ci purposes, VBOs already require this duplication. 3635bd8deadSopenharmony_ci 3645bd8deadSopenharmony_ci (2) What happens when a buffer object that is attached to a non-current 3655bd8deadSopenharmony_ci VAO is deleted? 3665bd8deadSopenharmony_ci 3675bd8deadSopenharmony_ci RESOLUTION: Nothing (though a reference count may be decremented). 3685bd8deadSopenharmony_ci A buffer object that is deleted while attached to a non-current VAO 3695bd8deadSopenharmony_ci is treated just like a buffer object bound to another context (or to 3705bd8deadSopenharmony_ci a current VAO in another context). 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ci (3) Are VAOs sharable? 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci DISCUSSION: There are many difficulties and complications involved in 3755bd8deadSopenharmony_ci guaranteeing correct behavior when "container" objects are sharable. 3765bd8deadSopenharmony_ci 3775bd8deadSopenharmony_ci RESOLUTION: RESOLVED: NO. 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ci (4) Can buffer objects attached to a VAO be modified? 3805bd8deadSopenharmony_ci 3815bd8deadSopenharmony_ci DISCUSSION: Operations such as updating the contents of a buffer object, 3825bd8deadSopenharmony_ci either via mapping the buffer or calling BufferSubData, are not 3835bd8deadSopenharmony_ci problematic. However, operations that cause a change in the underlying 3845bd8deadSopenharmony_ci data structure can be very problematic from a hardware / driver 3855bd8deadSopenharmony_ci perspective. Currently the only such operation is BufferData which causes 3865bd8deadSopenharmony_ci the buffer to be reallocated. 3875bd8deadSopenharmony_ci 3885bd8deadSopenharmony_ci RESOLUTION: RESOLVED. Yes. Calling BufferData on a buffer attached 3895bd8deadSopenharmony_ci to a VAO is allowed. 3905bd8deadSopenharmony_ci 3915bd8deadSopenharmony_ci (5) What are the interactions with this extension and 3925bd8deadSopenharmony_ci APPLE_vertex_array_object? 3935bd8deadSopenharmony_ci 3945bd8deadSopenharmony_ci DISCUSSION: The only question is what the behavior should be when both an 3955bd8deadSopenharmony_ci ARB vertex array object and an Apple vertex array object are bound at the 3965bd8deadSopenharmony_ci same time. 3975bd8deadSopenharmony_ci 3985bd8deadSopenharmony_ci RESOLUTION: Resolved. If both extensions are supported by an 3995bd8deadSopenharmony_ci implementation, both object types share a name space. Most of the useful 4005bd8deadSopenharmony_ci interactions fall out as a result of that. Please refer to the section 4015bd8deadSopenharmony_ci "Interactions with APPLE_vertex_array_object" above for more details. 4025bd8deadSopenharmony_ci 4035bd8deadSopenharmony_ci (6) Why don't the new tokens and entry points in this extension have 4045bd8deadSopenharmony_ci "ARB" suffixes like other ARB extensions? 4055bd8deadSopenharmony_ci 4065bd8deadSopenharmony_ci RESOLVED: Unlike most ARB extensions, this is a strict subset of 4075bd8deadSopenharmony_ci functionality already approved in OpenGL 3.0. This extension exists 4085bd8deadSopenharmony_ci only to support that functionality on older hardware that cannot 4095bd8deadSopenharmony_ci implement a full OpenGL 3.0 driver. Since there are no possible 4105bd8deadSopenharmony_ci behavior changes between the ARB extension and core features, source 4115bd8deadSopenharmony_ci code compatibility is improved by not using suffixes on the 4125bd8deadSopenharmony_ci extension. 4135bd8deadSopenharmony_ci 4145bd8deadSopenharmony_ci (7) How does this extension affect the GLX protocol of the commands that 4155bd8deadSopenharmony_ci modify or query vertex array state? 4165bd8deadSopenharmony_ci 4175bd8deadSopenharmony_ci RESOLVED: This extension changes the behaviour of all the commands that 4185bd8deadSopenharmony_ci modify or query vertex array state to use currently bound vertex array 4195bd8deadSopenharmony_ci object when a non-zero vertex array object is bound. 4205bd8deadSopenharmony_ci Since vertex array object is stored in the server, new protocol must be 4215bd8deadSopenharmony_ci specified for GetPointerv and GetVertexAttribPointerv. 4225bd8deadSopenharmony_ci Additionally, commands GetVertexAttribdv, GetVertexAttribfv and 4235bd8deadSopenharmony_ci GetVertexAttribiv must query state from the server and commands 4245bd8deadSopenharmony_ci VertexAttrib*Pointer, EnableVertexAttribArray and DisableVertexAttribArray 4255bd8deadSopenharmony_ci must modify state in the server when a non-zero vertex array object is 4265bd8deadSopenharmony_ci bound. If the zero object is bound, the value is queried from client state. 4275bd8deadSopenharmony_ci 4285bd8deadSopenharmony_ciRevision History 4295bd8deadSopenharmony_ci 4305bd8deadSopenharmony_ci Rev. Date Author Changes 4315bd8deadSopenharmony_ci ---- ---------- -------- ---------------------------------------------- 4325bd8deadSopenharmony_ci 1 04/17/2008 idr Initial version based on 4335bd8deadSopenharmony_ci GL_APPLE_vertex_array_object spec. 4345bd8deadSopenharmony_ci 4355bd8deadSopenharmony_ci 2 04/18/2008 idr Added sharability issue. 4365bd8deadSopenharmony_ci 4375bd8deadSopenharmony_ci 3 05/02/2008 idr Added issues #4 and #5. 4385bd8deadSopenharmony_ci 4395bd8deadSopenharmony_ci 4 05/15/2008 idr Resolved issue #1. VAOs are server state. 4405bd8deadSopenharmony_ci Resolved issue #5. ARB and APPLE VAOs share 4415bd8deadSopenharmony_ci a name space. 4425bd8deadSopenharmony_ci 4435bd8deadSopenharmony_ci 5 06/04/200 Jon Leech Minor typos, rearrange errors. 4445bd8deadSopenharmony_ci 4455bd8deadSopenharmony_ci 6 06/15/2008 Jon Leech More minor typos, clarify GenVertexArrays 4465bd8deadSopenharmony_ci behavior. 4475bd8deadSopenharmony_ci 4485bd8deadSopenharmony_ci 7 07/08/2008 js - noted that VAO is not supposed to include 4495bd8deadSopenharmony_ci CLIENT_ACTIVE_TEXTURE (bugzilla 3611) 4505bd8deadSopenharmony_ci - resolved all other open issues as per working 4515bd8deadSopenharmony_ci group discussions 4525bd8deadSopenharmony_ci - deleted obsolete INVALID_OPERATION on 4535bd8deadSopenharmony_ci draw with client arrays since it's no 4545bd8deadSopenharmony_ci longer possible to define a VAOs with client 4555bd8deadSopenharmony_ci arrays, as per working group discussions 4565bd8deadSopenharmony_ci - synced up BindVertexArray language with GL 3 spec 4575bd8deadSopenharmony_ci draft glspec30.20080708.1.pdf. 4585bd8deadSopenharmony_ci 4595bd8deadSopenharmony_ci 8 08/07/2008 Jon Leech Remove ARB suffixes. 4605bd8deadSopenharmony_ci 4615bd8deadSopenharmony_ci 9 08/20/2008 Jon Leech Cleanup formatting errors. 4625bd8deadSopenharmony_ci 4635bd8deadSopenharmony_ci 10 09/21/2011 Jon Leech Clarify that all *Pointer commands generate 4645bd8deadSopenharmony_ci errors when attempting to specify client 4655bd8deadSopenharmony_ci array pointers in a VAO (Bug 3696). 4665bd8deadSopenharmony_ci 11 09/22/2011 Jon Leech Exclude ARRAY_BUFFER_BINDING from VAO 4675bd8deadSopenharmony_ci state (Bug 5659). 4685bd8deadSopenharmony_ci 12 09/19/2012 Jon Leech Language tweaks for consistency with 4695bd8deadSopenharmony_ci OpenGL 3.1 specification (Bug 4306). 4705bd8deadSopenharmony_ci 4715bd8deadSopenharmony_ci 13 10/08/2012 srahman Added GLX protocol and issue #7. 472