1XXX - Not complete yet!!! 2 3Name 4 5 EXT_compiled_vertex_array 6 7Name Strings 8 9 GL_EXT_compiled_vertex_array 10 11Version 12 13 $Date: 1996/11/21 00:52:19 $ $Revision: 1.3 $ 14 15Number 16 17 97 18 19Dependencies 20 21 None 22 23Overview 24 25 This extension defines an interface which allows static vertex array 26 data to be cached or pre-compiled for more efficient rendering. This 27 is useful for implementations which can cache the transformed results 28 of array data for reuse by several DrawArrays, ArrayElement, or 29 DrawElements commands. It is also useful for implementations which 30 can transfer array data to fast memory for more efficient processing. 31 32 For example, rendering an M by N mesh of quadrilaterals can be 33 accomplished by setting up vertex arrays containing all of the 34 vertexes in the mesh and issuing M DrawElements commands each of 35 which operate on 2 * N vertexes. Each DrawElements command after 36 the first will share N vertexes with the preceding DrawElements 37 command. If the vertex array data is locked while the DrawElements 38 commands are executed, then OpenGL may be able to transform each 39 of these shared vertexes just once. 40 41Issues 42 43 * Is compiled_vertex_array the right name for this extension? 44 45 * Should there be an implementation defined maximum number of array 46 elements which can be locked at a time (i.e. MAX_LOCKED_ARRAY_SIZE)? 47 48 Probably not, the lock request can always be ignored with no resulting 49 change in functionality if there are insufficent resources, and allowing 50 the GL to define this limit can make things difficult for applications. 51 52 * Should there be any restrictions on what state can be changed while 53 the vertex array data is locked? 54 55 Probably not. The GL can check for state changes and invalidate 56 any cached vertex state that may be affected. This is likely to 57 cause a performance hit, so the preferred use will be to not change 58 state while the vertex array data is locked. 59 60New Procedures and Functions 61 62 void LockArraysEXT (int first, sizei count) 63 void UnlockArraysEXT (void) 64 65New Tokens 66 67 Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 68 GetFloatv, and GetDoublev: 69 70 ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 71 ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 72 73Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) 74 75 After the discussion of InterleavedArrays, add a description of 76 array compiling/locking. 77 78 The currently enabled vertex arrays can be locked with the command 79 LockArraysEXT. When the vertex arrays are locked, the GL 80 can compile the array data or the transformed results of array 81 data associated with the currently enabled vertex arrays. The 82 vertex arrays are unlocked by the command UnlockArraysEXT. 83 84 Between LockArraysEXT and UnlockArraysEXT the application 85 should ensure that none of the array data in the range of 86 elements specified by <first> and <count> are changed. 87 Changes to the array data between the execution of LockArraysEXT 88 and UnlockArraysEXT commands may affect calls may affect DrawArrays, 89 ArrayElement, or DrawElements commands in non-sequential ways. 90 91 While using a compiled vertex array, references to array elements 92 by the commands DrawArrays, ArrayElement, or DrawElements which are 93 outside of the range specified by <first> and <count> are undefined. 94 95Additions to Chapter 3 of the 1.1 Specification (Rasterization) 96 97 None 98 99Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations 100and the Frame Buffer) 101 102 None 103 104Additions to Chapter 5 of the 1.1 Specification (Special Functions) 105 106 LockArraysEXT and UnlockArraysEXT are not complied into display lists 107 but are executed immediately. 108 109Additions to Chapter 6 of the 1.1 Specification (State and State Requests) 110 111 None 112 113Additions to the GLX Specification 114 115 XXX - Not complete yet!!! 116 117GLX Protocol 118 119 XXX - Not complete yet!!! 120 121Errors 122 123 INVALID_VALUE is generated if LockArrarysEXT parameter <first> is less 124 than zero. 125 126 INVALID_VALUE is generated if LockArraysEXT parameter <count> is less than 127 or equal to zero. 128 129 INVALID_OPERATION is generated if LockArraysEXT is called between execution 130 of LockArraysEXT and corresponding execution of UnlockArraysEXT. 131 132 INVALID_OPERATION is generated if UnlockArraysEXT is called without a 133 corresponding previous execution of LockArraysEXT. 134 135 INVALID_OPERATION is generated if LockArraysEXT or UnlockArraysEXT is called 136 between execution of Begin and the corresponding execution of End. 137 138New State 139 Initial 140 Get Value Get Command Type Value Attrib 141 --------- ----------- ---- ------- ------ 142 143 ARRAY_ELEMENT_LOCK_FIRST_EXT GetIntegerv Z+ 0 client-vertex-array 144 ARRAY_ELEMENT_LOCK_COUNT_EXT GetIntegerv Z+ 0 client-vertex-array 145 146New Implementation Dependent State 147 148 None 149