Name EXT_static_vertex_array Name Strings GL_EXT_static_vertex_array Version $Date: 1997/09/17 18:24:20 $ $Revision: 1.1 $ Number ?? Dependencies None Overview This extension defines an interface which allows vertex array data to be cached or pre-compiled for more efficient rendering. This is useful for implementations which can cache the transformed results of array data for reuse by several DrawArrays, ArrayElement, or DrawElements commands. It is also useful for implementations which can transfer array data to fast memory for more efficient processing. For example, rendering an M by N mesh of quadrilaterals can be accomplished by setting up vertex arrays containing all of the vertexes in the mesh and issuing M DrawElements commands each of which operate on 2 * N vertexes. Each DrawElements command after the first will share N vertexes with the preceding DrawElements command. If the vertex array data is locked while the DrawElements commands are executed, then OpenGL may be able to transform each of these shared vertexes just once. New Procedures and Functions void LockArraysEXT (sizei count) void UnlockArraysEXT (void) New Tokens Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: ARRAY_ELEMENT_LOCK_COUNT_EXT Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) After the discussion of InterleavedArrays, add a description of array compiling/locking. The currently enabled vertex arrays can be locked with the command LockArraysEXT. When the vertex arrays are locked, the data specified by the currently enabled vertex arrays is considered to be static by GL. An implementation can delay the referencing of the data used by the commands DrawArrays, ArrayElement or DrawElements or pre-process the array data or cache the transformed vertex data associated with the currently enabled vertex arrays. The vertex arrays are unlocked by the command UnlockArraysEXT. The lock count, ARRAY_ELEMENT_LOCK_COUNT_EXT, is reset to 0 when the vertex arrays are unlocked. The error INVALID_OPERATION is generated if any array pointer command such as EdgeFlagPointer, TexCoordPointer, ColorPointer, IndexPointer, NormalPointer, VertexPointer or InterleavedArrays or EnableClientState/DisableClientState with array set to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY, COLOR_ARRAY, INDEX_ARRAY, NORMAL_ARRAY or VERTEX_ARRAY is executed between the execution of LocakArraysEXT and the corresponding UnlockArraysExt. Between LockArraysEXT and UnlockArraysEXT the application should ensure that none of the array data in the range specified by are changed. Changes to the array data between the execution of LockArraysEXT and UnlockArraysEXT commands may affect calls may affect DrawArrays, ArrayElement, or DrawElements commands in non-sequential ways. While using a static vertex array, references to array elements by the commands DrawArrays, ArrayElement, or DrawElements which are outside of the range specified by are undefined. Additions to Chapter 3 of the 1.1 Specification (Rasterization) None Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the 1.1 Specification (Special Functions) LockArraysEXT and UnlockArraysEXT are not complied into display lists but are executed immediately. Additions to Chapter 6 of the 1.1 Specification (State and State Requests) None Additions to the GLX Specification None GLX Protocol None Errors INVALID_VALUE is generated if LockArraysEXT parameter is less than or equal to zero. INVALID_OPERATION is generated if LockArraysEXT is called between execution of LockArraysEXT and corresponding execution of UnlockArraysEXT. INVALID_OPERATION is generated if UnlockArraysEXT is called without a corresponding previous execution of LockArraysEXT. INVALID_OPERATION may be generated if LockArraysEXT or UnlockArraysEXT is called between execution of Begin and the corresponding execution of End. INVALID_OPERATION is generated if any array pointer command such as EdgeFlagPointer, TexCoordPointer, ColorPointer, IndexPointer, NormalPointer, VertexPointer or InterleavedArrays or EnableClientState/DisableClientState with array set to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY, COLOR_ARRAY, INDEX_ARRAY, NORMAL_ARRAY or VERTEX_ARRAY is executed between the execution of LocakArraysEXT and the corresponding UnlockArraysExt. New State Initial Get Value Get Command Type Value Attrib --------- ----------- ---- ------- ------ ARRAY_ELEMENT_LOCK_COUNT_EXT GetIntegerv Z+ 0 client-vertex-array New Implementation Dependent State None