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