1Name 2 3 APPLE_vertex_array_object 4 5Name Strings 6 7 GL_APPLE_vertex_array_object 8 9Contact 10 11 Bob Beretta, Apple Computer (beretta 'at' apple.com) 12 13Status 14 15 Complete 16 17Version 18 19 $Date: 2002/09/23 04:37:25 $ $Revision: 1.9 $ 20 21Number 22 23 273 24 25Dependencies 26 27 APPLE_vertex_array_range affects the definition of this extension. 28 29 APPLE_element_array affects the definition of this extension. 30 31 ARB_vertex_program affects the definition of this extension. 32 33 EXT_secondary_color affects the definition of this extension. 34 35 EXT_fog_coord affects the definition of this extension. 36 37 ARB_vertex_blend affects the definition of this extension. 38 39Overview 40 41 This extension introduces named vertex array objects which encapsulate 42 vertex array state on the client side. The main purpose of these 43 objects is to keep pointers to static vertex data and provide a name 44 for different sets of static vertex data. 45 46 By extending vertex array range functionality this extension allows multiple 47 vertex array ranges to exist at one time, including their complete sets of 48 state, in manner analogous to texture objects. 49 50 GenVertexArraysAPPLE creates a list of n number of vertex array object 51 names. After creating a name, BindVertexArrayAPPLE associates the name with 52 a vertex array object and selects this vertex array and its associated 53 state as current. To get back to the default vertex array and its 54 associated state the client should bind to vertex array named 0. 55 56 Once a client is done using a vertex array object it can be deleted with 57 DeleteVertexArraysAPPLE. The client is responsible for allocating and 58 deallocating the memory used by the vertex array data, while the 59 DeleteVertexArraysAPPLE command deletes vertex array object names and 60 associated state only. 61 62Issues 63 64 None 65 66New Procedures and Functions 67 68 void BindVertexArrayAPPLE(uint array); 69 70 void DeleteVertexArraysAPPLE(sizei n, const uint *arrays); 71 72 void GenVertexArraysAPPLE(sizei n, const uint *arrays); 73 74 boolean IsVertexArrayAPPLE(uint array); 75 76New Tokens 77 78 Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, 79 and GetDoublev: 80 81 VERTEX_ARRAY_BINDING_APPLE 0x85B5 82 83Additions to Chapter 2, 3, 4 of the 1.1 Specification (OpenGL Operation, 84 Rasterization, Per-Fragment Operations and the Frame Buffer) 85 86 None 87 88Additions to Chapter 5 of the 1.1 Specification (Special Functions) 89 90 A vertex array object is created by binding an unused name. This binding is 91 accomplished by calling BindVertexArrayAPPLE with id set to the name of the 92 new vertex array object. 93 94 The state encapsulated by a vertex array object immediately after it is 95 first bound is equivalent to the default vertex array state at GL 96 initialization. Subsequent bindings of a vertex array object have no effect 97 on its encapsulated state unless changed explicitly. 98 99 When an OpenGL context is created, there is set of default vertex array 100 state associated with the context. In order that the access to this default 101 state is not lost, this extension treats the default state as if its name 102 was zero. Unlike other vertex array objects, the zero named object cannot be 103 deleted. 104 105 GenVertexArraysAPPLE returns a list of <n> unused vertex array object names 106 in <arrays>. Only names that were not in use immediately prior to the call 107 to GenVertexArraysAPPLE are included in the returned list. Names returned 108 by GenVertexArraysAPPLE are marked as used, so that they are not returned by 109 subsequent calls to GenVertexArraysAPPLE, but they are associated with a 110 vertex array object only after they are first bound (just as if the name 111 were unused). 112 113 Vertex array objects are deleted by calling DeleteVertexArraysAPPLE with 114 <arrays> specifying a list of <n> names to be deleted. Once a vertex array 115 object is deleted it has no contents and its name is freed. If a vertex 116 array object that is currently bound is deleted, the binding for that object 117 reverts to zero and the default vertex array becomes current. 118 DeleteVertexArraysAPPLE ignores names that do not correspond to existing 119 vertex array objects, including zero. 120 121Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 122 123 IsVertexArrayAPPLE returns TRUE if <id> is the name of a valid vertex array 124 object. If <id> is zero, or is a non-zero value that is not the name of a 125 vertex array object, or if an error condition occurs, IsVertexArrayAPPLE 126 returns FALSE. A name that has been returned GenVertexArraysAPPLE but never 127 bound with BindVertexArrayAPPLE is not the name of a vertex array object. 128 129 The name of the currently bound vertex array object is returned in <params> 130 when GetIntegerv is called with <pname> set to VERTEX_ARRAY_BINDING_APPLE. 131 If the default vertex array object is currently bound, zero is returned. 132 133 A vertex array object comprises vertex array pointers, the size, type, and 134 stride information for each array, the corresponding enable flags and the 135 range of static data for each array. More explicitly, the state list 136 137 VERTEX_ARRAY 138 VERTEX_ARRAY_SIZE 139 VERTEX_ARRAY_TYPE 140 VERTEX_ARRAY_STRIDE 141 VERTEX_ARRAY_POINTER 142 NORMAL_ARRAY 143 NORMAL_ARRAY_TYPE 144 NORMAL_ARRAY_STRIDE 145 NORMAL_ARRAY_POINTER 146 COLOR_ARRAY 147 COLOR_ARRAY_SIZE 148 COLOR_ARRAY_TYPE 149 COLOR_ARRAY_STRIDE 150 COLOR_ARRAY_POINTER 151 INDEX_ARRAY 152 INDEX_ARRAY_TYPE 153 INDEX_ARRAY_STRIDE 154 INDEX_ARRAY_POINTER 155 TEXTURE_COORD_ARRAY 156 TEXTURE_COORD_ARRAY_SIZE 157 TEXTURE_COORD_ARRAY_TYPE 158 TEXTURE_COORD_ARRAY_STRIDE 159 TEXTURE_COORD_ARRAY_POINTER 160 EDGE_FLAG_ARRAY 161 EDGE_FLAG_ARRAY_STRIDE 162 EDGE_FLAG_ARRAY_POINTER 163 164 composes a single vertex array object. 165 166 Additionally, if APPLE_vertex_array_range is supported the state list also 167 includes 168 169 VERTEX_ARRAY_RANGE_POINTER_APPLE 170 VERTEX_ARRAY_RANGE_LENGTH_APPLE 171 172 Additionally, if ARB_vertex_program is supported the state list also 173 includes 174 175 VERTEX_ATTRIB_ARRAY_ARB 176 VERTEX_ATTRIB_ARRAY_SIZE_ARB 177 VERTEX_ATTRIB_ARRAY_TYPE_ARB 178 VERTEX_ATTRIB_ARRAY_STRIDE_ARB 179 VERTEX_ATTRIB_ARRAY_POINTER_ARB 180 181 Additionally, if EXT_secondary_color is supported the state list also 182 includes 183 184 SECONDARY_COLOR_ARRAY_EXT 185 SECONDARY_COLOR_ARRAY_SIZE_EXT 186 SECONDARY_COLOR_ARRAY_TYPE_EXT 187 SECONDARY_COLOR_ARRAY_STRIDE_EXT 188 SECONDARY_COLOR_ARRAY_POINTER_EXT 189 190 Additionally, if EXT_fog_coord is supported the state list also includes 191 192 FOG_COORDINATE_ARRAY_EXT 193 FOG_COORDINATE_ARRAY_TYPE_EXT 194 FOG_COORDINATE_ARRAY_STRIDE_EXT 195 FOG_COORDINATE_ARRAY_POINTER_EXT 196 197 Additionally, if ARB_vertex_blend is supported the state list also includes 198 199 WEIGHT_ARRAY_ARB 200 WEIGHT_ARRAY_SIZE_ARB 201 WEIGHT_ARRAY_TYPE_ARB 202 WEIGHT_ARRAY_STRIDE_ARB 203 WEIGHT_ARRAY_POINTER_ARB 204 205 Additionally, if APPLE_element_array is supported the state list also 206 includes 207 208 ELEMENT_ARRAY_APPLE 209 ELEMENT_ARRAY_TYPE_APPLE 210 ELEMENT_ARRAY_POINTER_APPLE 211 212 When PushClientAttrib is called with CLIENT_VERTEX_ARRAY_BIT enabled, the 213 array pointers, types, size and stride are pushed, as well as array pointer 214 enables and the current vertex array object binding. When the attribute set 215 that includes vertex array information is popped, the binding is first 216 restored to its pushed value and then the enables and the array pointers, 217 types, size and stride are restored to their pushed values. 218 219Additions to the GLX Specification 220 221 No change is made to the GLX API. 222 223GLX Protocol 224 225 None 226 227Errors 228 229 INVALID_OPERATION is generated if any of the commands defined in this 230 extension is executed between the execution of Begin and the corresponding 231 execution of End. 232 233New State 234 235 Get Value Get Command Type Value Attrib 236 --------- ----------- ---- ------- ------ 237 VERTEX_ARRAY_BINDING_APPLE GetIntegerv Z+ 0 vertex-array 238 239New Implementation Dependent State 240 241 None 242 243Revision History 244 245 None 246