Name

    NV_vertex_array_range2

Name Strings

    GL_NV_vertex_array_range2

Contact

    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 2001.

IP Status

    NVIDIA Proprietary.

Status

    Complete

Version

    NVIDIA Date:  April 13, 2001
    Version:      2

Number

    232

Dependencies

    Assumes support for the NV_vertex_array_range extension (version 1.1).

    Support for NV_fence is recommended but not required.

Overview

    Enabling and disabling the vertex array range is specified by the
    original NV_vertex_array_range extension specification to flush the
    vertex array range implicitly.  In retrospect, this semantic is
    extremely misconceived and creates terrible performance problems
    for any application that wishes to mix conventional vertex arrays
    with vertex arrange range-enabled vertex arrays.

    This extension provides a new token for enabling/disabling the
    vertex array range that does NOT perform an implicit vertex array
    range flush when the enable/disable is performed.

Issues

    Should this extension expose a new enable that enables/disables the
    vertex array range enable/disable semantic of performing an implicit
    'vertex array range flush' when GL_VERTEX_ARRAY_RANGE_NV is enabled
    or disabled, OR should it add a new enable token that acts identically
    to GL_VERTEX_ARRAY_RANGE_NV without the implicit flush?

      RESOLUTION:  The second option.  Enabling/disabling
      GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV acts identically to
      enabling/disabling GL_VERTEX_ARRAY_RANGE_NV, just without the
      implicit flush.

    Should GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV work with glIsEnabled?

      RESOLUTION:  NO.  There is still just a single state boolean to
      query.

New Procedures and Functions

    None

New Tokens

    Accepted by the <cap> parameter of EnableClientState,
    DisableClientState:

        VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV  0x8533

Additions to Chapter 2 of the OpenGL 1.1 Specification (OpenGL Operation)

    Within the discussion of vertex arrays (Section 2.8) amended by
    the NV_vertex_array_range extension specification, change the
    discussion of enabling the vertex array range to:

    The vertex array range is enabled or disabled by calling
    EnableClientState or DisableClientState with the symbolic
    constant VERTEX_ARRAY_RANGE_NV. 

    The vertex array range is also enabled or disabled by calling
    EnableClientState or DisableClientState with the symbolic constant
    VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV.  This second means to enable
    and disable the vertex array range does not perform an implicit
    vertex array range flush as described subsequently."

    Within the discussion of vertex arrays (Section 2.8) amended by the
    NV_vertex_array_range extension specification, change the discussion
    of implicit vertex array range flushes to:

    "A 'vertex array range flush' occurs when one of the following
    operations occur:

       o  Finish returns.

       o  FlushVertexArrayRangeNV returns.

       o  VertexArrayRangeNV returns.

       o  DisableClientState of VERTEX_ARRAY_RANGE_NV returns.

       o  EnableClientState of VERTEX_ARRAY_RANGE_NV returns.

       o  Another OpenGL context is made current.

    However, use of VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV with
    DisableClientState or EnableClientState does NOT perform an implicit
    vertex array range flush."

Additions to Chapter 5 of the OpenGL 1.1 Specification (Special Functions)

    None

Additions to the WGL interface:

    None

Additions to the GLX Specification

    None

GLX Protocol

    None

Errors

    No new errors.

New State

    None

New Implementation Dependent State

    None

Revision History

    4/13/2001 - token value for GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV
    should be 0x8533 (was incorrectly typed as 0x8503)

