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