Name APPLE_vertex_array_object Name Strings GL_APPLE_vertex_array_object Contact Bob Beretta, Apple Computer (beretta 'at' apple.com) Status Complete Version $Date: 2002/09/23 04:37:25 $ $Revision: 1.9 $ Number 273 Dependencies APPLE_vertex_array_range affects the definition of this extension. APPLE_element_array affects the definition of this extension. ARB_vertex_program affects the definition of this extension. EXT_secondary_color affects the definition of this extension. EXT_fog_coord affects the definition of this extension. ARB_vertex_blend affects the definition of this extension. Overview This extension introduces named vertex array objects which encapsulate vertex array state on the client side. The main purpose of these objects is to keep pointers to static vertex data and provide a name for different sets of static vertex data. By extending vertex array range functionality this extension allows multiple vertex array ranges to exist at one time, including their complete sets of state, in manner analogous to texture objects. GenVertexArraysAPPLE creates a list of n number of vertex array object names. After creating a name, BindVertexArrayAPPLE associates the name with a vertex array object and selects this vertex array and it's associated state as current. To get back to the default vertex array and its associated state the client should bind to vertex array named 0. Once a client is done using a vertex array object it can be deleted with DeleteVertexArraysAPPLE. The client is responsible for allocating and deallocating the memory used by the vertex array data, while the DeleteVertexArraysAPPLE command deletes vertex array object names and associated state only. Issues None New Procedures and Functions void BindVertexArrayAPPLE(uint array); void DeleteVertexArraysAPPLE(sizei n, const uint *arrays); void GenVertexArraysAPPLE(sizei n, const uint *arrays); boolean IsVertexArrayAPPLE(uint array); New Tokens Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: VERTEX_ARRAY_BINDING_APPLE 0x85B5 Additions to Chapter 2, 3, 4 of the 1.1 Specification (OpenGL Operation, Rasterization, Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the 1.1 Specification (Special Functions) A vertex array object is created by binding an unused name. This binding is accomplished by calling BindVertexArrayAPPLE with id set to the name of the new vertex array object. The state encapsulated by a vertex array object immediately after it is first bound is equivalent to the default vertex array state at GL initialization. Subsequent bindings of a vertex array object have no effect on its encapsulated state unless changed explicitly. When an OpenGL context is created, there is set of default vertex array state associated with the context. In order that the access to this default state is not lost, this extension treats the default state as if its name was zero. Unlike other vertex array objects, the zero named object cannot be deleted. GenVertexArraysAPPLE returns a list of unused vertex array object names in . Only names that were not in use immediately prior to the call to GenVertexArraysAPPLE are included in the returned list. Names returned by GenVertexArraysAPPLE are marked as used, so that they are not returned by subsequent calls to GenVertexArraysAPPLE, but they are associated with a vertex array object only after they are first bound (just as if the name were unused). Vertex array objects are deleted by calling DeleteVertexArraysAPPLE with specifying a list of names to be deleted. Once a vertex array object is deleted it has no contents and its name is freed. If a vertex array object that is currently bound is deleted, the binding for that object reverts to zero and the default vertex array becomes current. DeleteVertexArraysAPPLE ignores names that do not correspond to existing vertex array objects, including zero. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) IsVertexArrayAPPLE returns TRUE if is the name of a valid vertex array object. If is zero, or is a non-zero value that is not the name of a vertex array object, or if an error condition occurs, IsVertexArrayAPPLE returns FALSE. A name that has been returned GenVertexArraysAPPLE but never bound with BindVertexArrayAPPLE is not the name of a vertex array object. The name of the currently bound vertex array object is returned in when GetIntegerv is called with set to VERTEX_ARRAY_BINDING_APPLE. If the default vertex array object is currently bound, zero is returned. A vertex array object comprises vertex array pointers, the size, type, and stride information for each array, the corresponding enable flags and the range of static data for each array. More explicitly, the state list VERTEX_ARRAY VERTEX_ARRAY_SIZE VERTEX_ARRAY_TYPE VERTEX_ARRAY_STRIDE VERTEX_ARRAY_POINTER NORMAL_ARRAY NORMAL_ARRAY_TYPE NORMAL_ARRAY_STRIDE NORMAL_ARRAY_POINTER COLOR_ARRAY COLOR_ARRAY_SIZE COLOR_ARRAY_TYPE COLOR_ARRAY_STRIDE COLOR_ARRAY_POINTER INDEX_ARRAY INDEX_ARRAY_TYPE INDEX_ARRAY_STRIDE INDEX_ARRAY_POINTER TEXTURE_COORD_ARRAY TEXTURE_COORD_ARRAY_SIZE TEXTURE_COORD_ARRAY_TYPE TEXTURE_COORD_ARRAY_STRIDE TEXTURE_COORD_ARRAY_POINTER EDGE_FLAG_ARRAY EDGE_FLAG_ARRAY_STRIDE EDGE_FLAG_ARRAY_POINTER composes a single vertex array object. Additionally, if APPLE_vertex_array_range is supported the state list also includes VERTEX_ARRAY_RANGE_POINTER_APPLE VERTEX_ARRAY_RANGE_LENGTH_APPLE Additionally, if ARB_vertex_program is supported the state list also includes VERTEX_ATTRIB_ARRAY_ARB VERTEX_ATTRIB_ARRAY_SIZE_ARB VERTEX_ATTRIB_ARRAY_TYPE_ARB VERTEX_ATTRIB_ARRAY_STRIDE_ARB VERTEX_ATTRIB_ARRAY_POINTER_ARB Additionally, if EXT_secondary_color is supported the state list also includes SECONDARY_COLOR_ARRAY_EXT SECONDARY_COLOR_ARRAY_SIZE_EXT SECONDARY_COLOR_ARRAY_TYPE_EXT SECONDARY_COLOR_ARRAY_STRIDE_EXT SECONDARY_COLOR_ARRAY_POINTER_EXT Additionally, if EXT_fog_coord is supported the state list also includes FOG_COORDINATE_ARRAY_EXT FOG_COORDINATE_ARRAY_TYPE_EXT FOG_COORDINATE_ARRAY_STRIDE_EXT FOG_COORDINATE_ARRAY_POINTER_EXT Additionally, if ARB_vertex_blend is supported the state list also includes WEIGHT_ARRAY_ARB WEIGHT_ARRAY_SIZE_ARB WEIGHT_ARRAY_TYPE_ARB WEIGHT_ARRAY_STRIDE_ARB WEIGHT_ARRAY_POINTER_ARB Additionally, if APPLE_element_array is supported the state list also includes ELEMENT_ARRAY_APPLE ELEMENT_ARRAY_TYPE_APPLE ELEMENT_ARRAY_POINTER_APPLE When PushClientAttrib is called with CLIENT_VERTEX_ARRAY_BIT enabled, the array pointers, types, size and stride are pushed, as well as array pointer enables and the current vertex array object binding. When the attribute set that includes vertex array information is popped, the binding is first restored to its pushed value and then the enables and the array pointers, types, size and stride are restored to their pushed values. Additions to the GLX Specification No change is made to the GLX API. GLX Protocol None Errors INVALID_OPERATION is generated if any of the commands defined in this extension is executed between the execution of Begin and the corresponding execution of End. New State Get Value Get Command Type Value Attrib --------- ----------- ---- ------- ------ VERTEX_ARRAY_BINDING_APPLE GetIntegerv Z+ 0 vertex-array New Implementation Dependent State None Revision History None