15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_vertex_array
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_vertex_array
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciVersion
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    $Date: 1995/10/03 05:39:58 $ $Revision: 1.16 $  FINAL
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciNumber
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    30
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciDependencies
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    None
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ciOverview
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci    This extension adds the ability to specify multiple geometric primitives
245bd8deadSopenharmony_ci    with very few subroutine calls.  Instead of calling an OpenGL procedure
255bd8deadSopenharmony_ci    to pass each individual vertex, normal, or color, separate arrays
265bd8deadSopenharmony_ci    of vertexes, normals, and colors are prespecified, and are used to
275bd8deadSopenharmony_ci    define a sequence of primitives (all of the same type) when a single
285bd8deadSopenharmony_ci    call is made to DrawArraysEXT.  A stride mechanism is provided so that
295bd8deadSopenharmony_ci    an application can choose to keep all vertex data staggered in a
305bd8deadSopenharmony_ci    single array, or sparsely in separate arrays.  Single-array storage
315bd8deadSopenharmony_ci    may optimize performance on some implementations.
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    This extension also supports the rendering of individual array elements,
345bd8deadSopenharmony_ci    each specified as an index into the enabled arrays.
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ciIssues
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    *   Should arrays for material parameters be provided?  If so, how?
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci        A: No.  Let's leave this to a separate extension, and keep this
415bd8deadSopenharmony_ci           extension lean.
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    *   Should a FORTRAN interface be specified in this document?
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    *   It may not be possible to implement GetPointervEXT in FORTRAN.  If
465bd8deadSopenharmony_ci        not, should we eliminate it from this proposal?
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ci        A: Leave it in.
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ci    *   Should a stride be specified by DrawArraysEXT which, if non-zero,
515bd8deadSopenharmony_ci        would override the strides specified for the individual arrays?
525bd8deadSopenharmony_ci        This might improve the efficiency of single-array transfers.
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci        A: No, it's not worth the effort and complexity.
555bd8deadSopenharmony_ci
565bd8deadSopenharmony_ci    *   Should entry points for byte vertexes, byte indexes, and byte
575bd8deadSopenharmony_ci        texture coordinates be added in this extension?
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci        A: No, do this in a separate extension, which defines byte support
605bd8deadSopenharmony_ci           for arrays and for the current procedural interface.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ci    *   Should support for meshes (not strips) of rectangles be provided?
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci        A: No. If this is necessary, define a separate quad_mesh extension
655bd8deadSopenharmony_ci           that supports both immediate mode and arrays.  (Add QUAD_MESH_EXT
665bd8deadSopenharmony_ci           as a token accepted by Begin and DrawArraysEXT.  Add
675bd8deadSopenharmony_ci           QuadMeshLengthEXT to specify the length of the mesh.)
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ciReasoning
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    *   DrawArraysEXT requires that VERTEX_ARRAY_EXT be enabled so that
725bd8deadSopenharmony_ci        future extensions can support evaluation as well as direct
735bd8deadSopenharmony_ci        specification of vertex coordinates.
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    *   This extension does not support evaluation.  It could be extended
765bd8deadSopenharmony_ci        to provide such support by adding arrays of points to be evaluated,
775bd8deadSopenharmony_ci        and by adding enables to indicate that the arrays are to be
785bd8deadSopenharmony_ci        evaluated.  I think we may choose to add an array version of
795bd8deadSopenharmony_ci        EvalMesh, rather than extending the operation of DrawArraysEXT,
805bd8deadSopenharmony_ci        so I'd rather wait on this one.
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci    *   <size> is specified before <type> to match the order of the
835bd8deadSopenharmony_ci        information in immediate mode commands, such as Vertex3f.
845bd8deadSopenharmony_ci        (first 3, then f)
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    *   It seems reasonable to allow attribute values to be undefined after
875bd8deadSopenharmony_ci        DrawArraysEXT executes.  This avoids implementation overhead in
885bd8deadSopenharmony_ci        the case where an incomplete primitive is specified, and will allow
895bd8deadSopenharmony_ci        optimization on multiprocessor systems.  I don't expect this to be
905bd8deadSopenharmony_ci        a burden to programmers.
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    *   It is not an error to call VertexPointerEXT, NormalPointerEXT,
935bd8deadSopenharmony_ci        ColorPointerEXT, IndexPointerEXT, TexCoordPointerEXT,
945bd8deadSopenharmony_ci        or EdgeFlagPointerEXT between the execution of Begin and the
955bd8deadSopenharmony_ci        corresponding execution of End.  Because these commands will
965bd8deadSopenharmony_ci        typically be implemented on the client side with no protocol,
975bd8deadSopenharmony_ci        testing for between-Begin-End status requires that the client
985bd8deadSopenharmony_ci        track this state, or that a round trip be made.  Neither is
995bd8deadSopenharmony_ci        desirable.
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ci    *   Arrays are enabled and disabled individually, rather than with a
1025bd8deadSopenharmony_ci        single mask parameter, for two reasons.  First, we have had trouble
1035bd8deadSopenharmony_ci        allocating bits in masks, so eliminating a mask eliminates potential
1045bd8deadSopenharmony_ci        trouble down the road.  We may eventually require a larger number of
1055bd8deadSopenharmony_ci        array types than there are bits in a mask.  Second, making the
1065bd8deadSopenharmony_ci        enables into state eliminates a parameter in ArrayElementEXT, and
1075bd8deadSopenharmony_ci        may allow it to execute more efficiently.  Of course this state
1085bd8deadSopenharmony_ci        model may result in programming errors, but OpenGL is full of such
1095bd8deadSopenharmony_ci        hazards anyway!
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    *   ArrayElementEXT is provided to support applications that construct
1125bd8deadSopenharmony_ci        primitives by indexing vertex data, rather than by streaming through
1135bd8deadSopenharmony_ci        arrays of data in first-to-last order.  Because each call specifies
1145bd8deadSopenharmony_ci        only a single vertex, it is possible for an application to explicitly
1155bd8deadSopenharmony_ci        specify per-primitive attributes, such as a single normal per
1165bd8deadSopenharmony_ci        individual triangle.
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    *   The <count> parameters are added to the *PointerEXT commands to
1195bd8deadSopenharmony_ci        allow implementations to cache array data, and in particular to
1205bd8deadSopenharmony_ci        cache the transformed results of array data that are rendered
1215bd8deadSopenharmony_ci        repeatedly by ArrayElementEXT.  Implementations that do not wish
1225bd8deadSopenharmony_ci        to perform such caching can ignore the <count> parameter.
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci    *   The <first> parameter of DrawArraysEXT allows a single set of
1255bd8deadSopenharmony_ci        arrays to be used repeatedly, possibly improving performance.
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ciNew Procedures and Functions
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    void ArrayElementEXT(int i);
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci    void DrawArraysEXT(enum mode,
1325bd8deadSopenharmony_ci                       int first,
1335bd8deadSopenharmony_ci                       sizei count);
1345bd8deadSopenharmony_ci
1355bd8deadSopenharmony_ci    void VertexPointerEXT(int size,
1365bd8deadSopenharmony_ci                          enum type,
1375bd8deadSopenharmony_ci                          sizei stride,
1385bd8deadSopenharmony_ci                          sizei count,
1395bd8deadSopenharmony_ci                          const void* pointer);
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    void NormalPointerEXT(enum type,
1425bd8deadSopenharmony_ci                          sizei stride,
1435bd8deadSopenharmony_ci                          sizei count,
1445bd8deadSopenharmony_ci                          const void* pointer);
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ci    void ColorPointerEXT(int size,
1475bd8deadSopenharmony_ci                         enum type,
1485bd8deadSopenharmony_ci                         sizei stride,
1495bd8deadSopenharmony_ci                         sizei count,
1505bd8deadSopenharmony_ci                         const void* pointer);
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci    void IndexPointerEXT(enum type,
1535bd8deadSopenharmony_ci                         sizei stride,
1545bd8deadSopenharmony_ci                         sizei count,
1555bd8deadSopenharmony_ci                         const void* pointer);
1565bd8deadSopenharmony_ci
1575bd8deadSopenharmony_ci    void TexCoordPointerEXT(int size,
1585bd8deadSopenharmony_ci                            enum type,
1595bd8deadSopenharmony_ci                            sizei stride,
1605bd8deadSopenharmony_ci                            sizei count,
1615bd8deadSopenharmony_ci                            const void* pointer);
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci    void EdgeFlagPointerEXT(sizei stride,
1645bd8deadSopenharmony_ci                            sizei count,
1655bd8deadSopenharmony_ci                            const Boolean* pointer);
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci    void GetPointervEXT(enum pname,
1685bd8deadSopenharmony_ci                       void** params);
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ciNew Tokens
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and
1735bd8deadSopenharmony_ci    by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and
1745bd8deadSopenharmony_ci    GetDoublev:
1755bd8deadSopenharmony_ci
1765bd8deadSopenharmony_ci        VERTEX_ARRAY_EXT               0x8074
1775bd8deadSopenharmony_ci        NORMAL_ARRAY_EXT               0x8075
1785bd8deadSopenharmony_ci        COLOR_ARRAY_EXT                0x8076
1795bd8deadSopenharmony_ci        INDEX_ARRAY_EXT                0x8077
1805bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_EXT        0x8078
1815bd8deadSopenharmony_ci        EDGE_FLAG_ARRAY_EXT            0x8079
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    Accepted by the <type> parameter of VertexPointerEXT, NormalPointerEXT,
1845bd8deadSopenharmony_ci    ColorPointerEXT, IndexPointerEXT, and TexCoordPointerEXT:
1855bd8deadSopenharmony_ci
1865bd8deadSopenharmony_ci        DOUBLE_EXT                     0x140A
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
1895bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ci        VERTEX_ARRAY_SIZE_EXT          0x807A
1925bd8deadSopenharmony_ci        VERTEX_ARRAY_TYPE_EXT          0x807B
1935bd8deadSopenharmony_ci        VERTEX_ARRAY_STRIDE_EXT        0x807C
1945bd8deadSopenharmony_ci        VERTEX_ARRAY_COUNT_EXT         0x807D
1955bd8deadSopenharmony_ci        NORMAL_ARRAY_TYPE_EXT          0x807E
1965bd8deadSopenharmony_ci        NORMAL_ARRAY_STRIDE_EXT        0x807F
1975bd8deadSopenharmony_ci        NORMAL_ARRAY_COUNT_EXT         0x8080
1985bd8deadSopenharmony_ci        COLOR_ARRAY_SIZE_EXT           0x8081
1995bd8deadSopenharmony_ci        COLOR_ARRAY_TYPE_EXT           0x8082
2005bd8deadSopenharmony_ci        COLOR_ARRAY_STRIDE_EXT         0x8083
2015bd8deadSopenharmony_ci        COLOR_ARRAY_COUNT_EXT          0x8084
2025bd8deadSopenharmony_ci        INDEX_ARRAY_TYPE_EXT           0x8085
2035bd8deadSopenharmony_ci        INDEX_ARRAY_STRIDE_EXT         0x8086
2045bd8deadSopenharmony_ci        INDEX_ARRAY_COUNT_EXT          0x8087
2055bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088
2065bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089
2075bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
2085bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B
2095bd8deadSopenharmony_ci        EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C
2105bd8deadSopenharmony_ci        EDGE_FLAG_ARRAY_COUNT_EXT      0x808D
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetPointervEXT:
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci        VERTEX_ARRAY_POINTER_EXT       0x808E
2155bd8deadSopenharmony_ci        NORMAL_ARRAY_POINTER_EXT       0x808F
2165bd8deadSopenharmony_ci        COLOR_ARRAY_POINTER_EXT        0x8090
2175bd8deadSopenharmony_ci        INDEX_ARRAY_POINTER_EXT        0x8091
2185bd8deadSopenharmony_ci        TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
2195bd8deadSopenharmony_ci        EDGE_FLAG_ARRAY_POINTER_EXT    0x8093
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    Array Specification
2245bd8deadSopenharmony_ci    -------------------
2255bd8deadSopenharmony_ci
2265bd8deadSopenharmony_ci    Individual array pointers and associated data are maintained for an
2275bd8deadSopenharmony_ci    array of vertexes, an array of normals, an array of colors, an array
2285bd8deadSopenharmony_ci    of color indexes, an array of texture coordinates, and an array of edge
2295bd8deadSopenharmony_ci    flags.  The data associated with each array specify the data type of
2305bd8deadSopenharmony_ci    the values in the array, the number of values per element in the array
2315bd8deadSopenharmony_ci    (e.g.  vertexes of 2, 3, or 4 coordinates), the byte stride from one
2325bd8deadSopenharmony_ci    array element to the next, and the number of elements (counting from
2335bd8deadSopenharmony_ci    the first) that are static.  Static elements may be modified by the
2345bd8deadSopenharmony_ci    application, but once they are modified, the application must explicitly
2355bd8deadSopenharmony_ci    respecify the array before using it for any rendering.  When an array is
2365bd8deadSopenharmony_ci    specified, the pointer and associated data are saved as client-side
2375bd8deadSopenharmony_ci    state, and static elements may be cached by the implementation.  Non-
2385bd8deadSopenharmony_ci    static (dynamic) elements are never accessed until ArrayElementEXT or
2395bd8deadSopenharmony_ci    DrawArraysEXT is issued.
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci    VertexPointerEXT specifies the location and data format of an array
2425bd8deadSopenharmony_ci    of vertex coordinates.  <pointer> specifies a pointer to the first
2435bd8deadSopenharmony_ci    coordinate of the first vertex in the array.  <type> specifies the data
2445bd8deadSopenharmony_ci    type of each coordinate in the array, and must be one of SHORT, INT,
2455bd8deadSopenharmony_ci    FLOAT, or DOUBLE_EXT, implying GL data types short, int, float, and
2465bd8deadSopenharmony_ci    double respectively.  <size> specifies the number of coordinates per
2475bd8deadSopenharmony_ci    vertex, and must be 2, 3, or 4.  <stride> specifies the byte offset
2485bd8deadSopenharmony_ci    between pointers to consecutive vertexes.  If <stride> is zero, the
2495bd8deadSopenharmony_ci    vertex data are understood to be tightly packed in the array.  <count>
2505bd8deadSopenharmony_ci    specifies the number of vertexes, counting from the first, that are
2515bd8deadSopenharmony_ci    static.
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    NormalPointerEXT specifies the location and data format of an array
2545bd8deadSopenharmony_ci    of normals.  <pointer> specifies a pointer to the first coordinate
2555bd8deadSopenharmony_ci    of the first normal in the array.  <type> specifies the data type
2565bd8deadSopenharmony_ci    of each coordinate in the array, and must be one of BYTE, SHORT, INT,
2575bd8deadSopenharmony_ci    FLOAT, or DOUBLE_EXT, implying GL data types byte, short, int, float,
2585bd8deadSopenharmony_ci    and double respectively.  It is understood that each normal comprises
2595bd8deadSopenharmony_ci    three coordinates.  <stride> specifies the byte offset between
2605bd8deadSopenharmony_ci    pointers to consecutive normals.  If <stride> is zero, the normal
2615bd8deadSopenharmony_ci    data are understood to be tightly packed in the array.  <count>
2625bd8deadSopenharmony_ci    specifies the number of normals, counting from the first, that are
2635bd8deadSopenharmony_ci    static.
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci    ColorPointerEXT specifies the location and data format of an array
2665bd8deadSopenharmony_ci    of color components.  <pointer> specifies a pointer to the first
2675bd8deadSopenharmony_ci    component of the first color element in the array.  <type> specifies the
2685bd8deadSopenharmony_ci    data type of each component in the array, and must be one of BYTE,
2695bd8deadSopenharmony_ci    UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, INT, UNSIGNED_INT, FLOAT, or
2705bd8deadSopenharmony_ci    DOUBLE_EXT, implying GL data types byte, ubyte, short, ushort, int,
2715bd8deadSopenharmony_ci    uint, float, and double respectively.  <size> specifies the number of
2725bd8deadSopenharmony_ci    components per color, and must be 3 or 4.  <stride> specifies the byte
2735bd8deadSopenharmony_ci    offset between pointers to consecutive colors.  If <stride> is zero,
2745bd8deadSopenharmony_ci    the color data are understood to be tightly packed in the array.
2755bd8deadSopenharmony_ci    <count> specifies the number of colors, counting from the first, that
2765bd8deadSopenharmony_ci    are static.
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci    IndexPointerEXT specifies the location and data format of an array
2795bd8deadSopenharmony_ci    of color indexes.  <pointer> specifies a pointer to the first index in
2805bd8deadSopenharmony_ci    the array.  <type> specifies the data type of each index in the
2815bd8deadSopenharmony_ci    array, and must be one of SHORT, INT, FLOAT, or DOUBLE_EXT, implying
2825bd8deadSopenharmony_ci    GL data types short, int, float, and double respectively.  <stride>
2835bd8deadSopenharmony_ci    specifies the byte offset between pointers to consecutive indexes.  If
2845bd8deadSopenharmony_ci    <stride> is zero, the index data are understood to be tightly packed
2855bd8deadSopenharmony_ci    in the array.  <count> specifies the number of indexes, counting from
2865bd8deadSopenharmony_ci    the first, that are static.
2875bd8deadSopenharmony_ci
2885bd8deadSopenharmony_ci    TexCoordPointerEXT specifies the location and data format of an array
2895bd8deadSopenharmony_ci    of texture coordinates.  <pointer> specifies a pointer to the first
2905bd8deadSopenharmony_ci    coordinate of the first element in the array.  <type> specifies the data
2915bd8deadSopenharmony_ci    type of each coordinate in the array, and must be one of SHORT, INT,
2925bd8deadSopenharmony_ci    FLOAT, or DOUBLE_EXT, implying GL data types short, int, float, and
2935bd8deadSopenharmony_ci    double respectively.  <size> specifies the number of coordinates per
2945bd8deadSopenharmony_ci    element, and must be 1, 2, 3, or 4.  <stride> specifies the byte offset
2955bd8deadSopenharmony_ci    between pointers to consecutive elements of coordinates.  If <stride> is
2965bd8deadSopenharmony_ci    zero, the coordinate data are understood to be tightly packed in the
2975bd8deadSopenharmony_ci    array.  <count> specifies the number of texture coordinate elements,
2985bd8deadSopenharmony_ci    counting from the first, that are static.
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ci    EdgeFlagPointerEXT specifies the location and data format of an array
3015bd8deadSopenharmony_ci    of boolean edge flags.  <pointer> specifies a pointer to the first flag
3025bd8deadSopenharmony_ci    in the array.  <stride> specifies the byte offset between pointers to
3035bd8deadSopenharmony_ci    consecutive edge flags.  If <stride> is zero, the edge flag data are
3045bd8deadSopenharmony_ci    understood to be tightly packed in the array.  <count> specifies the
3055bd8deadSopenharmony_ci    number of edge flags, counting from the first, that are static.
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci    The table below summarizes the sizes and data types accepted (or
3085bd8deadSopenharmony_ci    understood implicitly) by each of the six pointer-specification commands.
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci        Command               Sizes     Types
3115bd8deadSopenharmony_ci        -------               -----     -----
3125bd8deadSopenharmony_ci        VertexPointerEXT      2,3,4     short, int, float, double
3135bd8deadSopenharmony_ci        NormalPointerEXT      3         byte, short, int, float, double
3145bd8deadSopenharmony_ci        ColorPointerEXT       3,4       byte, short, int, float, double,
3155bd8deadSopenharmony_ci                                        ubyte, ushort, uint
3165bd8deadSopenharmony_ci        IndexPointerEXT       1         short, int, float, double
3175bd8deadSopenharmony_ci        TexCoordPointerEXT    1,2,3,4   short, int, float, double
3185bd8deadSopenharmony_ci        EdgeFlagPointerEXT    1         boolean
3195bd8deadSopenharmony_ci
3205bd8deadSopenharmony_ci    Rendering the Arrays
3215bd8deadSopenharmony_ci    --------------------
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci    By default all the arrays are disabled, meaning that they will not
3245bd8deadSopenharmony_ci    be accessed when either ArrayElementEXT or DrawArraysEXT is called.
3255bd8deadSopenharmony_ci    An individual array is enabled or disabled by calling Enable or
3265bd8deadSopenharmony_ci    Disable with <cap> set to appropriate value, as specified in the
3275bd8deadSopenharmony_ci    table below:
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci        Array Specification Command     Enable Token
3305bd8deadSopenharmony_ci        ---------------------------     ------------
3315bd8deadSopenharmony_ci        VertexPointerEXT                VERTEX_ARRAY_EXT
3325bd8deadSopenharmony_ci        NormalPointerEXT                NORMAL_ARRAY_EXT
3335bd8deadSopenharmony_ci        ColorPointerEXT                 COLOR_ARRAY_EXT
3345bd8deadSopenharmony_ci        IndexPointerEXT                 INDEX_ARRAY_EXT
3355bd8deadSopenharmony_ci        TexCoordPointerEXT              TEXTURE_COORD_ARRAY_EXT
3365bd8deadSopenharmony_ci        EdgeFlagPointerEXT              EDGE_FLAG_ARRAY_EXT
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci    When ArrayElementEXT is called, a single vertex is drawn, using vertex
3395bd8deadSopenharmony_ci    and attribute data taken from location <i> of the enabled arrays.  The
3405bd8deadSopenharmony_ci    semantics of ArrayElementEXT are defined in the C-code below:
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ci        void ArrayElementEXT (int i) {
3435bd8deadSopenharmony_ci            byte* p;
3445bd8deadSopenharmony_ci            if (NORMAL_ARRAY_EXT) {
3455bd8deadSopenharmony_ci                if (normal_stride == 0)
3465bd8deadSopenharmony_ci                    p = (byte*)normal_pointer + i * 3 * sizeof(normal_type);
3475bd8deadSopenharmony_ci                else
3485bd8deadSopenharmony_ci                    p = (byte*)normal_pointer + i * normal_stride;
3495bd8deadSopenharmony_ci                Normal3<normal_type>v ((normal_type*)p);
3505bd8deadSopenharmony_ci            }
3515bd8deadSopenharmony_ci            if (COLOR_ARRAY_EXT) {
3525bd8deadSopenharmony_ci                if (color_stride == 0)
3535bd8deadSopenharmony_ci                    p = (byte*)color_pointer +
3545bd8deadSopenharmony_ci                        i * color_size * sizeof(color_type);
3555bd8deadSopenharmony_ci                else
3565bd8deadSopenharmony_ci                    p = (byte*)color_pointer + i * color_stride;
3575bd8deadSopenharmony_ci                Color<color_size><color_type>v ((color_type*)p);
3585bd8deadSopenharmony_ci            }
3595bd8deadSopenharmony_ci            if (INDEX_ARRAY_EXT) {
3605bd8deadSopenharmony_ci                if (index_stride == 0)
3615bd8deadSopenharmony_ci                    p = (byte*)index_pointer + i * sizeof(index_type);
3625bd8deadSopenharmony_ci                else
3635bd8deadSopenharmony_ci                    p = (byte*)index_pointer + i * index_stride;
3645bd8deadSopenharmony_ci                Index<index_type>v ((index_type*)p);
3655bd8deadSopenharmony_ci            }
3665bd8deadSopenharmony_ci            if (TEXTURE_COORD_ARRAY_EXT) {
3675bd8deadSopenharmony_ci                if (texcoord_stride == 0)
3685bd8deadSopenharmony_ci                    p = (byte*)texcoord_pointer +
3695bd8deadSopenharmony_ci                        i * texcoord_size * sizeof(texcoord_type);
3705bd8deadSopenharmony_ci                else
3715bd8deadSopenharmony_ci                    p = (byte*)texcoord_pointer + i * texcoord_stride;
3725bd8deadSopenharmony_ci                TexCoord<texcoord_size><texcoord_type>v ((texcoord_type*)p);
3735bd8deadSopenharmony_ci            }
3745bd8deadSopenharmony_ci            if (EDGE_FLAG_ARRAY_EXT) {
3755bd8deadSopenharmony_ci                if (edgeflag_stride == 0)
3765bd8deadSopenharmony_ci                    p = (byte*)edgeflag_pointer + i * sizeof(boolean);
3775bd8deadSopenharmony_ci                else
3785bd8deadSopenharmony_ci                    p = (byte*)edgeflag_pointer + i * edgeflag_stride;
3795bd8deadSopenharmony_ci                EdgeFlagv ((boolean*)p);
3805bd8deadSopenharmony_ci            }
3815bd8deadSopenharmony_ci            if (VERTEX_ARRAY_EXT) {
3825bd8deadSopenharmony_ci                if (vertex_stride == 0)
3835bd8deadSopenharmony_ci                    p = (byte*)vertex_pointer +
3845bd8deadSopenharmony_ci                        i * vertex_size * sizeof(vertex_type);
3855bd8deadSopenharmony_ci                else
3865bd8deadSopenharmony_ci                    p = (byte*)vertex_pointer + i * vertex_stride;
3875bd8deadSopenharmony_ci                Vertex<vertex_size><vertex_type>v ((vertex_type*)p);
3885bd8deadSopenharmony_ci            }
3895bd8deadSopenharmony_ci        }
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    ArrayElementEXT executes even if VERTEX_ARRAY_EXT is not enabled.  No
3925bd8deadSopenharmony_ci    drawing occurs in this case, but the attributes corresponding to
3935bd8deadSopenharmony_ci    enabled arrays are modified.
3945bd8deadSopenharmony_ci
3955bd8deadSopenharmony_ci    When DrawArraysEXT is called, <count> sequential elements from each
3965bd8deadSopenharmony_ci    enabled array are used to construct a sequence of geometric primitives,
3975bd8deadSopenharmony_ci    beginning with element <first>.  <mode> specifies what kind of
3985bd8deadSopenharmony_ci    primitives are constructed, and how the array elements are used to
3995bd8deadSopenharmony_ci    construct these primitives.  Accepted values for <mode> are POINTS,
4005bd8deadSopenharmony_ci    LINE_STRIP, LINE_LOOP, LINES, TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES,
4015bd8deadSopenharmony_ci    QUAD_STRIP, QUADS, and POLYGON.  If VERTEX_ARRAY_EXT is not enabled, no
4025bd8deadSopenharmony_ci    geometric primitives are generated.
4035bd8deadSopenharmony_ci
4045bd8deadSopenharmony_ci    The semantics of DrawArraysEXT are defined in the C-code below:
4055bd8deadSopenharmony_ci
4065bd8deadSopenharmony_ci        void DrawArraysEXT(enum mode, int first, sizei count) {
4075bd8deadSopenharmony_ci            int i;
4085bd8deadSopenharmony_ci            if (count < 0)
4095bd8deadSopenharmony_ci                /* generate INVALID_VALUE error and abort */
4105bd8deadSopenharmony_ci            else {
4115bd8deadSopenharmony_ci                Begin (mode);
4125bd8deadSopenharmony_ci                for (i=0; i < count; i++)
4135bd8deadSopenharmony_ci                    ArrayElementEXT(first + i);
4145bd8deadSopenharmony_ci                End ();
4155bd8deadSopenharmony_ci            }
4165bd8deadSopenharmony_ci        }
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci    The ways in which the execution of DrawArraysEXT differs from the
4195bd8deadSopenharmony_ci    semantics indicated in the pseudo-code above are:
4205bd8deadSopenharmony_ci
4215bd8deadSopenharmony_ci        1.  Vertex attributes that are modified by DrawArraysEXT have an
4225bd8deadSopenharmony_ci            unspecified value after DrawArraysEXT returns.  For example, if
4235bd8deadSopenharmony_ci            COLOR_ARRAY_EXT is enabled, the value of the current color is
4245bd8deadSopenharmony_ci            undefined after DrawArraysEXT executes.  Attributes that aren't
4255bd8deadSopenharmony_ci            modified remain well defined.
4265bd8deadSopenharmony_ci
4275bd8deadSopenharmony_ci        2.  Operation of DrawArraysEXT is atomic with respect to error
4285bd8deadSopenharmony_ci            generation.  If an error is generated, no other operations take
4295bd8deadSopenharmony_ci            place.
4305bd8deadSopenharmony_ci
4315bd8deadSopenharmony_ci    Although it is not an error to respecify an array between the execution
4325bd8deadSopenharmony_ci    of Begin and the corresponding execution of End, the result of such
4335bd8deadSopenharmony_ci    respecification is undefined.  Static array data may be read and cached
4345bd8deadSopenharmony_ci    by the implementation at any time.  If static array data are modified by
4355bd8deadSopenharmony_ci    the application, the results of any subsequently issued ArrayElementEXT
4365bd8deadSopenharmony_ci    or DrawArraysEXT commands are undefined.
4375bd8deadSopenharmony_ci
4385bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.0 Specification (Rasterization)
4395bd8deadSopenharmony_ci
4405bd8deadSopenharmony_ci    None
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
4435bd8deadSopenharmony_ciand the Frame buffer)
4445bd8deadSopenharmony_ci
4455bd8deadSopenharmony_ci    None
4465bd8deadSopenharmony_ci
4475bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.0 Specification (Special Functions)
4485bd8deadSopenharmony_ci
4495bd8deadSopenharmony_ci    ArrayElementEXT and DrawArraysEXT are included in display lists.
4505bd8deadSopenharmony_ci    When either command is entered into a display list, the necessary
4515bd8deadSopenharmony_ci    array data (determined by the array pointers and enables) is also
4525bd8deadSopenharmony_ci    entered into the display list.  Because the array pointers and
4535bd8deadSopenharmony_ci    enables are client side state, their values affect display lists
4545bd8deadSopenharmony_ci    when the lists are created, not when the lists are executed.
4555bd8deadSopenharmony_ci
4565bd8deadSopenharmony_ci    Array specification commands VertexPointerEXT, NormalPointerEXT,
4575bd8deadSopenharmony_ci    ColorPointerEXT, IndexPointerEXT, TexCoordPointerEXT, and
4585bd8deadSopenharmony_ci    EdgeFlagPointerEXT specify client side state, and are therefore
4595bd8deadSopenharmony_ci    not included in display lists.  Likewise Enable and Disable, when
4605bd8deadSopenharmony_ci    called with <cap> set to VERTEX_ARRAY_EXT, NORMAL_ARRAY_EXT,
4615bd8deadSopenharmony_ci    COLOR_ARRAY_EXT, INDEX_ARRAY_EXT, TEXTURE_COORD_ARRAY_EXT, or
4625bd8deadSopenharmony_ci    EDGE_FLAG_ARRAY_EXT, are not included in display lists.
4635bd8deadSopenharmony_ci    GetPointervEXT returns state information, and so is not included
4645bd8deadSopenharmony_ci    in display lists.
4655bd8deadSopenharmony_ci
4665bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.0 Specification (State and State Requests)
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci    GetPointervEXT returns in <param> the array pointer value specified
4695bd8deadSopenharmony_ci    by <pname>.  Accepted values for <pname> are VERTEX_ARRAY_POINTER_EXT,
4705bd8deadSopenharmony_ci    NORMAL_ARRAY_POINTER_EXT, COLOR_ARRAY_POINTER_EXT,
4715bd8deadSopenharmony_ci    INDEX_ARRAY_POINTER_EXT, TEXTURE_COORD_ARRAY_POINTER_EXT,
4725bd8deadSopenharmony_ci    and EDGE_FLAG_ARRAY_POINTER_EXT.
4735bd8deadSopenharmony_ci
4745bd8deadSopenharmony_ci    All array data are client side state, and are not saved or restored
4755bd8deadSopenharmony_ci    by PushAttrib and PopAttrib.
4765bd8deadSopenharmony_ci
4775bd8deadSopenharmony_ciAdditions to the GLX Specification
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ci    None
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ciGLX Protocol
4825bd8deadSopenharmony_ci
4835bd8deadSopenharmony_ci    A new rendering command is added; it can be sent to the server as part of a 
4845bd8deadSopenharmony_ci    glXRender request or as part of a glXRenderLarge request:
4855bd8deadSopenharmony_ci
4865bd8deadSopenharmony_ci        The DrawArraysEXT command consists of three sections, in the following order: 
4875bd8deadSopenharmony_ci        (1) header information, (2) a list of array information, containing the type 
4885bd8deadSopenharmony_ci        and size of the array values for each enabled array and (3) a list of vertex 
4895bd8deadSopenharmony_ci        data. Each element in the list of vertex data contains information for a single 
4905bd8deadSopenharmony_ci        vertex taken from the enabled arrays.
4915bd8deadSopenharmony_ci   
4925bd8deadSopenharmony_ci        DrawArraysEXT
4935bd8deadSopenharmony_ci            2           16+(12*m)+(s*n) rendering command length
4945bd8deadSopenharmony_ci            2           4116            rendering command opcode
4955bd8deadSopenharmony_ci            4           CARD32          n (number of array elements)
4965bd8deadSopenharmony_ci            4           CARD32          m (number of enabled arrays)
4975bd8deadSopenharmony_ci            4           ENUM            mode    /* GL_POINTS etc */
4985bd8deadSopenharmony_ci            12*m        LISTofARRAY_INFO 
4995bd8deadSopenharmony_ci            s*n         LISTofVERTEX_DATA 
5005bd8deadSopenharmony_ci     
5015bd8deadSopenharmony_ci            Where s = ns + cs + is + ts + es + vs + np + cp + ip + tp + ep + vp. (See
5025bd8deadSopenharmony_ci            description below, under VERTEX_DATA.) Note that if an array is disabled 
5035bd8deadSopenharmony_ci            then no information is sent for it. For example, when the normal array is 
5045bd8deadSopenharmony_ci            disabled, there is no ARRAY_INFO record for the normal array and ns and np 
5055bd8deadSopenharmony_ci            are both zero.
5065bd8deadSopenharmony_ci
5075bd8deadSopenharmony_ci            Note that the list of ARRAY_INFO is unordered: since the ARRAY_INFO
5085bd8deadSopenharmony_ci            record contains the array type, the arrays in the list may be stored
5095bd8deadSopenharmony_ci            in any order. Also, the VERTEX_DATA list is a packed list of vertices.
5105bd8deadSopenharmony_ci            For each vertex, data is retrieved from the enabled arrays, and stored
5115bd8deadSopenharmony_ci            in the list.
5125bd8deadSopenharmony_ci
5135bd8deadSopenharmony_ci            If the command is encoded in a glXRenderLarge request, the command
5145bd8deadSopenharmony_ci            opcode and command length fields above are expanded to 4 bytes each:
5155bd8deadSopenharmony_ci
5165bd8deadSopenharmony_ci            4           20+(12*m)+(s*n) rendering command length
5175bd8deadSopenharmony_ci            4           4116            rendering command opcode
5185bd8deadSopenharmony_ci
5195bd8deadSopenharmony_ci        ARRAY_INFO
5205bd8deadSopenharmony_ci            4           ENUM                    data type
5215bd8deadSopenharmony_ci                        0x1400  i=1             BYTE 
5225bd8deadSopenharmony_ci                        0x1401  i=1             UNSIGNED_BYTE
5235bd8deadSopenharmony_ci                        0x1402  i=2             SHORT       
5245bd8deadSopenharmony_ci                        0x1403  i=2             UNSIGNED_SHORT
5255bd8deadSopenharmony_ci                        0x1404  i=4             INT  
5265bd8deadSopenharmony_ci                        0x1405  i=4             UNSIGNED_INT
5275bd8deadSopenharmony_ci                        0x1406  i=4             FLOAT
5285bd8deadSopenharmony_ci                        0x140A  i=8             DOUBLE_EXT
5295bd8deadSopenharmony_ci            4           INT32                   j (number of values in array element)
5305bd8deadSopenharmony_ci            4           ENUM                    array type
5315bd8deadSopenharmony_ci                        0x8074  j=2/3/4         VERTEX_ARRAY_EXT               
5325bd8deadSopenharmony_ci                        0x8075  j=3             NORMAL_ARRAY_EXT               
5335bd8deadSopenharmony_ci                        0x8076  j=3/4           COLOR_ARRAY_EXT                
5345bd8deadSopenharmony_ci                        0x8077  j=1             INDEX_ARRAY_EXT                
5355bd8deadSopenharmony_ci                        0x8078  j=1/2/3/4       TEXTURE_COORD_ARRAY_EXT        
5365bd8deadSopenharmony_ci                        0x8079  j=1             EDGE_FLAG_ARRAY_EXT 
5375bd8deadSopenharmony_ci
5385bd8deadSopenharmony_ci            For each array, the size of an array element is i*j. Some arrays
5395bd8deadSopenharmony_ci            (e.g., the texture coordinate array) support different data sizes;
5405bd8deadSopenharmony_ci            for these arrays, the size, j, is specified when the array is defined.
5415bd8deadSopenharmony_ci 
5425bd8deadSopenharmony_ci        VERTEX_DATA
5435bd8deadSopenharmony_ci            if the normal array is enabled:
5445bd8deadSopenharmony_ci
5455bd8deadSopenharmony_ci            ns          LISTofBYTE              normal array element
5465bd8deadSopenharmony_ci            np                                  unused, np=pad(ns)
5475bd8deadSopenharmony_ci
5485bd8deadSopenharmony_ci            if the color array is enabled:
5495bd8deadSopenharmony_ci
5505bd8deadSopenharmony_ci            cs          LISTofBYTE              color array element
5515bd8deadSopenharmony_ci            cp                                  unused, cp=pad(cs)
5525bd8deadSopenharmony_ci
5535bd8deadSopenharmony_ci            if the index array is enabled:
5545bd8deadSopenharmony_ci
5555bd8deadSopenharmony_ci            is          LISTofBYTE              index array element
5565bd8deadSopenharmony_ci            ip                                  unused, ip=pad(is)
5575bd8deadSopenharmony_ci
5585bd8deadSopenharmony_ci            if the texture coord array is enabled:
5595bd8deadSopenharmony_ci
5605bd8deadSopenharmony_ci            ts          LISTofBYTE              texture coord array element
5615bd8deadSopenharmony_ci            tp                                  unused, tp=pad(ts)
5625bd8deadSopenharmony_ci
5635bd8deadSopenharmony_ci            if the edge flag array is enabled:
5645bd8deadSopenharmony_ci
5655bd8deadSopenharmony_ci            es          LISTofBYTE              edge flag array element
5665bd8deadSopenharmony_ci            ep                                  unused, ep=pad(es)
5675bd8deadSopenharmony_ci
5685bd8deadSopenharmony_ci            if the vertex array is enabled:
5695bd8deadSopenharmony_ci
5705bd8deadSopenharmony_ci            vs          LISTofBYTE              vertex array element
5715bd8deadSopenharmony_ci            vp                                  unused, vp=pad(vs)
5725bd8deadSopenharmony_ci
5735bd8deadSopenharmony_ci            where ns, cs, is, ts, es, vs is the size of the normal, color, index, 
5745bd8deadSopenharmony_ci            texture, edge and vertex array elements and np, cp, ip, tp, ep, vp is 
5755bd8deadSopenharmony_ci            the padding for the normal, color, index, texture, edge and vertex array 
5765bd8deadSopenharmony_ci            elements, respectively.
5775bd8deadSopenharmony_ci
5785bd8deadSopenharmony_ciErrors
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci    INVALID_OPERATION is generated if DrawArraysEXT is called between the
5815bd8deadSopenharmony_ci    execution of Begin and the corresponding execution of End.
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci    INVALID_ENUM is generated if DrawArraysEXT parameter <mode> is not
5845bd8deadSopenharmony_ci    POINTS, LINE_STRIP, LINE_LOOP, LINES, TRIANGLE_STRIP, TRIANGLE_FAN,
5855bd8deadSopenharmony_ci    TRIANGLES, QUAD_STRIP, QUADS, or POLYGON.
5865bd8deadSopenharmony_ci
5875bd8deadSopenharmony_ci    INVALID_VALUE is generated if DrawArraysEXT parameter <count> is
5885bd8deadSopenharmony_ci    negative.
5895bd8deadSopenharmony_ci
5905bd8deadSopenharmony_ci    INVALID_VALUE is generated if VertexPointerEXT parameter <size> is not
5915bd8deadSopenharmony_ci    2, 3, or 4.
5925bd8deadSopenharmony_ci
5935bd8deadSopenharmony_ci    INVALID_ENUM is generated if VertexPointerEXT parameter <type> is not
5945bd8deadSopenharmony_ci    SHORT, INT, FLOAT, or DOUBLE_EXT.
5955bd8deadSopenharmony_ci
5965bd8deadSopenharmony_ci    INVALID_VALUE is generated if VertexPointerEXT parameter <stride> or
5975bd8deadSopenharmony_ci    <count> is negative.
5985bd8deadSopenharmony_ci
5995bd8deadSopenharmony_ci    INVALID_ENUM is generated if NormalPointerEXT parameter <type> is not
6005bd8deadSopenharmony_ci    BYTE, SHORT, INT, FLOAT, or DOUBLE_EXT.
6015bd8deadSopenharmony_ci
6025bd8deadSopenharmony_ci    INVALID_VALUE is generated if NormalPointerEXT parameter <stride> or
6035bd8deadSopenharmony_ci    <count> is negative.
6045bd8deadSopenharmony_ci
6055bd8deadSopenharmony_ci    INVALID_VALUE is generated if ColorPointerEXT parameter <size> is not
6065bd8deadSopenharmony_ci    3 or 4.
6075bd8deadSopenharmony_ci
6085bd8deadSopenharmony_ci    INVALID_ENUM is generated if ColorPointerEXT parameter <type> is not
6095bd8deadSopenharmony_ci    BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, INT, UNSIGNED_INT, FLOAT,
6105bd8deadSopenharmony_ci    or DOUBLE_EXT.
6115bd8deadSopenharmony_ci
6125bd8deadSopenharmony_ci    INVALID_VALUE is generated if ColorPointerEXT parameter <stride> or
6135bd8deadSopenharmony_ci    <count> is negative.
6145bd8deadSopenharmony_ci
6155bd8deadSopenharmony_ci    INVALID_ENUM is generated if IndexPointerEXT parameter <type> is not
6165bd8deadSopenharmony_ci    SHORT, INT, FLOAT, or DOUBLE_EXT.
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ci    INVALID_VALUE is generated if IndexPointerEXT parameter <stride> or
6195bd8deadSopenharmony_ci    <count> is negative.
6205bd8deadSopenharmony_ci
6215bd8deadSopenharmony_ci    INVALID_VALUE is generated if TexCoordPointerEXT parameter <size> is not
6225bd8deadSopenharmony_ci    1, 2, 3, or 4.
6235bd8deadSopenharmony_ci
6245bd8deadSopenharmony_ci    INVALID_ENUM is generated if TexCoordPointerEXT parameter <type> is not
6255bd8deadSopenharmony_ci    SHORT, INT, FLOAT, or DOUBLE_EXT.
6265bd8deadSopenharmony_ci
6275bd8deadSopenharmony_ci    INVALID_VALUE is generated if TexCoordPointerEXT parameter <stride> or
6285bd8deadSopenharmony_ci    <count> is negative.
6295bd8deadSopenharmony_ci
6305bd8deadSopenharmony_ci    INVALID_VALUE is generated if EdgeFlagPointerEXT parameter <stride> or
6315bd8deadSopenharmony_ci    <count> is negative.
6325bd8deadSopenharmony_ci
6335bd8deadSopenharmony_ci    INVALID_ENUM is generated if GetPointervEXT parameter <pname> is not
6345bd8deadSopenharmony_ci    VERTEX_ARRAY_POINTER_EXT, NORMAL_ARRAY_POINTER_EXT,
6355bd8deadSopenharmony_ci    COLOR_ARRAY_POINTER_EXT, INDEX_ARRAY_POINTER_EXT,
6365bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_POINTER_EXT, or EDGE_FLAG_ARRAY_POINTER_EXT.
6375bd8deadSopenharmony_ci
6385bd8deadSopenharmony_ciNew State
6395bd8deadSopenharmony_ci                                                                Initial
6405bd8deadSopenharmony_ci    Get Value                           Get Command     Type    Value   Attrib
6415bd8deadSopenharmony_ci    ---------                           -----------     ----    ------- ------
6425bd8deadSopenharmony_ci    VERTEX_ARRAY_EXT                    IsEnabled       B       False   client
6435bd8deadSopenharmony_ci    VERTEX_ARRAY_SIZE_EXT               GetIntegerv     Z+      4       client
6445bd8deadSopenharmony_ci    VERTEX_ARRAY_TYPE_EXT               GetIntegerv     Z4      FLOAT   client
6455bd8deadSopenharmony_ci    VERTEX_ARRAY_STRIDE_EXT             GetIntegerv     Z+      0       client
6465bd8deadSopenharmony_ci    VERTEX_ARRAY_COUNT_EXT              GetIntegerv     Z+      0       client
6475bd8deadSopenharmony_ci    VERTEX_ARRAY_POINTER_EXT            GetPointervEXT  Z+      0       client
6485bd8deadSopenharmony_ci    NORMAL_ARRAY_EXT                    IsEnabled       B       False   client
6495bd8deadSopenharmony_ci    NORMAL_ARRAY_TYPE_EXT               GetIntegerv     Z5      FLOAT   client
6505bd8deadSopenharmony_ci    NORMAL_ARRAY_STRIDE_EXT             GetIntegerv     Z+      0       client
6515bd8deadSopenharmony_ci    NORMAL_ARRAY_COUNT_EXT              GetIntegerv     Z+      0       client
6525bd8deadSopenharmony_ci    NORMAL_ARRAY_POINTER_EXT            GetPointervEXT  Z+      0       client
6535bd8deadSopenharmony_ci    COLOR_ARRAY_EXT                     IsEnabled       B       False   client
6545bd8deadSopenharmony_ci    COLOR_ARRAY_SIZE_EXT                GetIntegerv     Z+      4       client
6555bd8deadSopenharmony_ci    COLOR_ARRAY_TYPE_EXT                GetIntegerv     Z8      FLOAT   client
6565bd8deadSopenharmony_ci    COLOR_ARRAY_STRIDE_EXT              GetIntegerv     Z+      0       client
6575bd8deadSopenharmony_ci    COLOR_ARRAY_COUNT_EXT               GetIntegerv     Z+      0       client
6585bd8deadSopenharmony_ci    COLOR_ARRAY_POINTER_EXT             GetPointervEXT  Z+      0       client
6595bd8deadSopenharmony_ci    INDEX_ARRAY_EXT                     IsEnabled       B       False   client
6605bd8deadSopenharmony_ci    INDEX_ARRAY_TYPE_EXT                GetIntegerv     Z4      FLOAT   client
6615bd8deadSopenharmony_ci    INDEX_ARRAY_STRIDE_EXT              GetIntegerv     Z+      0       client
6625bd8deadSopenharmony_ci    INDEX_ARRAY_COUNT_EXT               GetIntegerv     Z+      0       client
6635bd8deadSopenharmony_ci    INDEX_ARRAY_POINTER_EXT             GetPointervEXT  Z+      0       client
6645bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_EXT             IsEnabled       B       False   client
6655bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_SIZE_EXT        GetIntegerv     Z+      4       client
6665bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_TYPE_EXT        GetIntegerv     Z4      FLOAT   client
6675bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_STRIDE_EXT      GetIntegerv     Z+      0       client
6685bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_COUNT_EXT       GetIntegerv     Z+      0       client
6695bd8deadSopenharmony_ci    TEXTURE_COORD_ARRAY_POINTER_EXT     GetPointervEXT  Z+      0       client
6705bd8deadSopenharmony_ci    EDGE_FLAG_ARRAY_EXT                 IsEnabled       B       False   client
6715bd8deadSopenharmony_ci    EDGE_FLAG_ARRAY_STRIDE_EXT          GetIntegerv     Z+      0       client
6725bd8deadSopenharmony_ci    EDGE_FLAG_ARRAY_COUNT_EXT           GetIntegerv     Z+      0       client
6735bd8deadSopenharmony_ci    EDGE_FLAG_ARRAY_POINTER_EXT         GetPointervEXT  Z+      0       client
6745bd8deadSopenharmony_ci
6755bd8deadSopenharmony_ciNew Implementation Dependent State
6765bd8deadSopenharmony_ci
6775bd8deadSopenharmony_ci    None
678