XXX - Not complete yet!!!

Name

    EXT_compiled_vertex_array

Name Strings

    GL_EXT_compiled_vertex_array

Version

    $Date: 1996/11/21 00:52:19 $ $Revision: 1.3 $

Number

    97

Dependencies

    None

Overview

    This extension defines an interface which allows static 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.

Issues

    * Is compiled_vertex_array the right name for this extension?

    * Should there be an implementation defined maximum number of array
      elements which can be locked at a time (i.e. MAX_LOCKED_ARRAY_SIZE)?

      Probably not, the lock request can always be ignored with no resulting
      change in functionality if there are insufficent resources, and allowing
      the GL to define this limit can make things difficult for applications.
    
    * Should there be any restrictions on what state can be changed while
      the vertex array data is locked?

      Probably not.  The GL can check for state changes and invalidate
      any cached vertex state that may be affected.  This is likely to
      cause a performance hit, so the preferred use will be to not change
      state while the vertex array data is locked.
    
New Procedures and Functions

    void LockArraysEXT (int first, sizei count)
    void UnlockArraysEXT (void)

New Tokens

    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:

        ARRAY_ELEMENT_LOCK_FIRST_EXT        0x81A8
        ARRAY_ELEMENT_LOCK_COUNT_EXT        0x81A9

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 GL
   can compile the array data or the transformed results of array
   data associated with the currently enabled vertex arrays.  The
   vertex arrays are unlocked by the command UnlockArraysEXT.

   Between LockArraysEXT and UnlockArraysEXT the application
   should ensure that none of the array data in the range of
   elements specified by <first> and <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 compiled vertex array, references to array elements
   by the commands DrawArrays, ArrayElement, or DrawElements which are
   outside of the range specified by <first> and <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

    XXX - Not complete yet!!!

GLX Protocol

    XXX - Not complete yet!!!

Errors

    INVALID_VALUE is generated if LockArrarysEXT parameter <first> is less
    than zero.

    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 is generated if LockArraysEXT or UnlockArraysEXT is called
    between execution of Begin and the corresponding execution of End.

New State
                                                                Initial
    Get Value                           Get Command     Type    Value   Attrib
    ---------                           -----------     ----    ------- ------

    ARRAY_ELEMENT_LOCK_FIRST_EXT        GetIntegerv     Z+      0       client-vertex-array
    ARRAY_ELEMENT_LOCK_COUNT_EXT        GetIntegerv     Z+      0       client-vertex-array

New Implementation Dependent State

    None
