Name

    IBM_static_data

Name Strings

    GL_IBM_static_data

Version

    $Date: 1999/12/28 01:40:35 $ $Revision: 1.2 $
    IBM Id: static_data.spec,v 1.1 1997/07/29 12:52:51 pbrown Exp

Number

    223

Dependencies

    None

Overview

    The OpenGL specification requires that data be bound at call time.	The
    IBM_static_data extension relaxes the bind-at-call semantics allowing
    an implementation to dereference pointers some time after the
    corresponding calls.

    Because of the bind-at-call sematics of standard OpenGL, an
    implementation is required to either copy or fully process data at the
    time it is provided by the application.  Copying data substantially
    increases the demands on the memory subsystem; processing the data may
    result in ineffective amortization of fixed costs.	Neither copying nor
    processing allows multiple rendering threads to operate on the original
    data.

Issues

  * Indirect rendering is ignored; is there anything useful we can do?

  * This specification has been designed to be generic, but at this time
    only allows vertex array data to be noted as static.  Should the
    specification be extended to include data specified in one or more
    of the following ways:
      pixel data [glBitmap, glDrawPixels]
      pixel maps [glPixelMap*]
      vertex data [glVertex*v, glColor*v, glNormal*v, etc.]
      evaluator maps [glMap*]
      texture maps [glTexImage*, glTexSubImage*]
      matrices [glLoadMatrix*, glMultMatrix*]
      other attribute calls [glMaterial*v, glLight*v, etc.]

New Procedures and Functions

    FlushStaticDataIBM(GLenum target)

New Tokens

    Accepted by the <target> parameter of FlushStaticDataIBM:

	ALL_STATIC_DATA_IBM			103060

    Accepted by the <cap> parameter of EnableClientState, DisableClientState,
    and IsEnabled, and the <target> parameter of FlushStaticDataIBM:

	STATIC_VERTEX_ARRAY_IBM			103061

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

  Additions to Section 2.8, Vertex Arrays

    Typically, the vertex array data is dereferenced at the time of a call
    to glArrayElement, glDrawArrays, or glDrawElements, after which it can
    be changed by the caller.  Calling EnableClientState with a target of
    STATIC_VERTEX_ARRAY_IBM relaxes this requirement.  Instead, only the
    memory addresses of such data are bound at the time of the call.  If
    vertex array data are changed, freed, or reallocated while
    STATIC_VERTEX_ARRAY_IBM is enabled, the results of any glArrayElement,
    glDrawArrays, or glDrawElements calls using such an array are
    undefined.	In order to free, change or reallocate the vertex array
    data specified while STATIC_VERTEX_ARRAY_IBM was enabled, either
    glFinish or glFlushStaticDataIBM must be used.

    The client state required to implement vertex arrays consist of six
    boolean values representing vertex array enables, one boolean value
    representing the static vertex array enable, ...

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

Additions to Chapter 4 of the GL Specification (Per-Fragment Operations
and the Framebuffer)

    None

Additions to Chapter 5 of the GL Specification (Special Functions)

  Additions to Section 5.5, Flush and Finish (added to the end of the section)

  The command

      void FlushStaticDataIBM( GLenum target ) ;

  forces all references to data relative to target that were specified as
  static to be resolved before this function returns.  While this is
  similar to Finish, only the references to the target static data are
  guaranteed to be completed upon return from this function.  This function
  does not guarantee that any rendering involving the target data is
  completed, only that the references to the data are completed.

Additions to Chapter 6 of the GL Specification (State and State Requests)

    None

Additions to the GLX Specification

    None

GLX Protocol

    None.

Errors

    None

New State

    Get Value			  Type Get Command  Value Sec	Attrib
    ----------------------------- ---- -----------  ----- ----	-------
    STATIC_VERTEX_ARRAY_IBM	  B    IsEnabled    False 2.8	vertex-array

New Implementation Dependent State

    None
