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 parameter of FlushStaticDataIBM: ALL_STATIC_DATA_IBM 103060 Accepted by the parameter of EnableClientState, DisableClientState, and IsEnabled, and the 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