blob: f54c32929a57b30eaa41ba56c139dc4308477177 [file] [log] [blame]
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 <pname> 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 <count> 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 <count> 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 <count> 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