1Name 2 3 EXT_static_vertex_array 4 5Name Strings 6 7 GL_EXT_static_vertex_array 8 9Version 10 11 $Date: 1997/09/17 18:24:20 $ $Revision: 1.1 $ 12 13Number 14 15 ?? 16 17Dependencies 18 19 None 20 21Overview 22 23 This extension defines an interface which allows vertex array 24 data to be cached or pre-compiled for more efficient rendering. This 25 is useful for implementations which can cache the transformed results 26 of array data for reuse by several DrawArrays, ArrayElement, or 27 DrawElements commands. It is also useful for implementations which 28 can transfer array data to fast memory for more efficient processing. 29 30 For example, rendering an M by N mesh of quadrilaterals can be 31 accomplished by setting up vertex arrays containing all of the 32 vertexes in the mesh and issuing M DrawElements commands each of 33 which operate on 2 * N vertexes. Each DrawElements command after 34 the first will share N vertexes with the preceding DrawElements 35 command. If the vertex array data is locked while the DrawElements 36 commands are executed, then OpenGL may be able to transform each 37 of these shared vertexes just once. 38 39New Procedures and Functions 40 41 void LockArraysEXT (sizei count) 42 void UnlockArraysEXT (void) 43 44New Tokens 45 46 Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 47 GetFloatv, and GetDoublev: 48 49 ARRAY_ELEMENT_LOCK_COUNT_EXT 50 51Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) 52 53 After the discussion of InterleavedArrays, add a description of 54 array compiling/locking. 55 56 The currently enabled vertex arrays can be locked with the command 57 LockArraysEXT. When the vertex arrays are locked, the data 58 specified by the currently enabled vertex arrays is considered 59 to be static by GL. An implementation can delay the referencing 60 of the data used by the commands DrawArrays, ArrayElement or 61 DrawElements or pre-process the array data or cache the transformed 62 vertex data associated with the currently enabled vertex arrays. 63 The vertex arrays are unlocked by the command UnlockArraysEXT. 64 The lock count, ARRAY_ELEMENT_LOCK_COUNT_EXT, is reset 65 to 0 when the vertex arrays are unlocked. 66 67 The error INVALID_OPERATION is generated if any array pointer 68 command such as EdgeFlagPointer, TexCoordPointer, ColorPointer, 69 IndexPointer, NormalPointer, VertexPointer or InterleavedArrays 70 or EnableClientState/DisableClientState with array set 71 to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY, COLOR_ARRAY, 72 INDEX_ARRAY, NORMAL_ARRAY or VERTEX_ARRAY is executed between 73 the execution of LocakArraysEXT and the corresponding 74 UnlockArraysExt. 75 76 Between LockArraysEXT and UnlockArraysEXT the application 77 should ensure that none of the array data in the range 78 specified by <count> are changed. Changes to the array data 79 between the execution of LockArraysEXT and UnlockArraysEXT 80 commands may affect calls may affect DrawArrays, ArrayElement, 81 or DrawElements commands in non-sequential ways. 82 83 While using a static vertex array, references to array elements 84 by the commands DrawArrays, ArrayElement, or DrawElements which 85 are outside of the range specified by <count> are undefined. 86 87Additions to Chapter 3 of the 1.1 Specification (Rasterization) 88 89 None 90 91Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations 92and the Frame Buffer) 93 94 None 95 96Additions to Chapter 5 of the 1.1 Specification (Special Functions) 97 98 LockArraysEXT and UnlockArraysEXT are not complied into display lists 99 but are executed immediately. 100 101Additions to Chapter 6 of the 1.1 Specification (State and State Requests) 102 103 None 104 105Additions to the GLX Specification 106 107 None 108 109GLX Protocol 110 111 None 112 113Errors 114 115 INVALID_VALUE is generated if LockArraysEXT parameter <count> is less than 116 or equal to zero. 117 118 INVALID_OPERATION is generated if LockArraysEXT is called between execution 119 of LockArraysEXT and corresponding execution of UnlockArraysEXT. 120 121 INVALID_OPERATION is generated if UnlockArraysEXT is called without a 122 corresponding previous execution of LockArraysEXT. 123 124 INVALID_OPERATION may be generated if LockArraysEXT or UnlockArraysEXT is called 125 between execution of Begin and the corresponding execution of End. 126 127 INVALID_OPERATION is generated if any array pointer command such as 128 EdgeFlagPointer, TexCoordPointer, ColorPointer, IndexPointer, 129 NormalPointer, VertexPointer or InterleavedArrays 130 or EnableClientState/DisableClientState with array set 131 to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY, COLOR_ARRAY, 132 INDEX_ARRAY, NORMAL_ARRAY or VERTEX_ARRAY is executed between 133 the execution of LocakArraysEXT and the corresponding 134 UnlockArraysExt. 135 136New State 137 Initial 138 Get Value Get Command Type Value Attrib 139 --------- ----------- ---- ------- ------ 140 141 ARRAY_ELEMENT_LOCK_COUNT_EXT GetIntegerv Z+ 0 client-vertex-array 142 143New Implementation Dependent State 144 145 None 146 147