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

