blob: 7faef226f89e6347e475377dacff54334b2e9338 [file] [log] [blame]
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