1/************************************************************************** 2 3Copyright 2002 VMware, Inc. 4Copyright 2011 Dave Airlie (ARB_vertex_type_2_10_10_10_rev support) 5All Rights Reserved. 6 7Permission is hereby granted, free of charge, to any person obtaining a 8copy of this software and associated documentation files (the "Software"), 9to deal in the Software without restriction, including without limitation 10on the rights to use, copy, modify, merge, publish, distribute, sub 11license, and/or sell copies of the Software, and to permit persons to whom 12the Software is furnished to do so, subject to the following conditions: 13 14The above copyright notice and this permission notice (including the next 15paragraph) shall be included in all copies or substantial portions of the 16Software. 17 18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21VMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24USE OR OTHER DEALINGS IN THE SOFTWARE. 25 26**************************************************************************/ 27 28#include "util/format_r11g11b10f.h" 29#include "main/varray.h" 30#include "vbo_util.h" 31#include "util/half_float.h" 32 33#ifdef SUPPRESS_STATIC 34#define static 35#endif 36 37/* ATTR */ 38#define ATTRI( A, N, V0, V1, V2, V3 ) \ 39 ATTR_UNION(A, N, GL_INT, uint32_t, INT_AS_UINT(V0), INT_AS_UINT(V1), \ 40 INT_AS_UINT(V2), INT_AS_UINT(V3)) 41#define ATTRUI( A, N, V0, V1, V2, V3 ) \ 42 ATTR_UNION(A, N, GL_UNSIGNED_INT, uint32_t, (uint32_t)(V0), (uint32_t)(V1), \ 43 (uint32_t)(V2), (uint32_t)(V3)) 44#define ATTRF( A, N, V0, V1, V2, V3 ) \ 45 ATTR_UNION(A, N, GL_FLOAT, uint32_t, FLOAT_AS_UINT(V0), FLOAT_AS_UINT(V1),\ 46 FLOAT_AS_UINT(V2), FLOAT_AS_UINT(V3)) 47#define ATTRD( A, N, V0, V1, V2, V3 ) \ 48 ATTR_UNION(A, N, GL_DOUBLE, uint64_t, DOUBLE_AS_UINT64(V0), \ 49 DOUBLE_AS_UINT64(V1), DOUBLE_AS_UINT64(V2), DOUBLE_AS_UINT64(V3)) 50#define ATTRUI64( A, N, V0, V1, V2, V3 ) \ 51 ATTR_UNION(A, N, GL_UNSIGNED_INT64_ARB, uint64_t, V0, V1, V2, V3) 52 53 54/* float */ 55#define ATTR1FV( A, V ) ATTRF( A, 1, (V)[0], 0, 0, 1 ) 56#define ATTR2FV( A, V ) ATTRF( A, 2, (V)[0], (V)[1], 0, 1 ) 57#define ATTR3FV( A, V ) ATTRF( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 58#define ATTR4FV( A, V ) ATTRF( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 59 60#define ATTR1F( A, X ) ATTRF( A, 1, X, 0, 0, 1 ) 61#define ATTR2F( A, X, Y ) ATTRF( A, 2, X, Y, 0, 1 ) 62#define ATTR3F( A, X, Y, Z ) ATTRF( A, 3, X, Y, Z, 1 ) 63#define ATTR4F( A, X, Y, Z, W ) ATTRF( A, 4, X, Y, Z, W ) 64 65 66/* half */ 67#define ATTR1HV( A, V ) ATTRF( A, 1, _mesa_half_to_float((uint16_t)(V)[0]), \ 68 0, 0, 1 ) 69#define ATTR2HV( A, V ) ATTRF( A, 2, _mesa_half_to_float((uint16_t)(V)[0]), \ 70 _mesa_half_to_float((uint16_t)(V)[1]), 0, 1 ) 71#define ATTR3HV( A, V ) ATTRF( A, 3, _mesa_half_to_float((uint16_t)(V)[0]), \ 72 _mesa_half_to_float((uint16_t)(V)[1]), \ 73 _mesa_half_to_float((uint16_t)(V)[2]), 1 ) 74#define ATTR4HV( A, V ) ATTRF( A, 4, _mesa_half_to_float((uint16_t)(V)[0]), \ 75 _mesa_half_to_float((uint16_t)(V)[1]), \ 76 _mesa_half_to_float((uint16_t)(V)[2]), \ 77 _mesa_half_to_float((uint16_t)(V)[3]) ) 78 79#define ATTR1H( A, X ) ATTRF( A, 1, _mesa_half_to_float(X), 0, 0, 1 ) 80#define ATTR2H( A, X, Y ) ATTRF( A, 2, _mesa_half_to_float(X), \ 81 _mesa_half_to_float(Y), 0, 1 ) 82#define ATTR3H( A, X, Y, Z ) ATTRF( A, 3, _mesa_half_to_float(X), \ 83 _mesa_half_to_float(Y), \ 84 _mesa_half_to_float(Z), 1 ) 85#define ATTR4H( A, X, Y, Z, W ) ATTRF( A, 4, _mesa_half_to_float(X), \ 86 _mesa_half_to_float(Y), \ 87 _mesa_half_to_float(Z), \ 88 _mesa_half_to_float(W) ) 89 90 91/* int */ 92#define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 ) 93#define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 94#define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 95 96#define ATTR1I( A, X ) ATTRI( A, 1, X, 0, 0, 1 ) 97#define ATTR2I( A, X, Y ) ATTRI( A, 2, X, Y, 0, 1 ) 98#define ATTR3I( A, X, Y, Z ) ATTRI( A, 3, X, Y, Z, 1 ) 99#define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W ) 100 101 102/* uint */ 103#define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 ) 104#define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 105#define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 106 107#define ATTR1UI( A, X ) ATTRUI( A, 1, X, 0, 0, 1 ) 108#define ATTR2UI( A, X, Y ) ATTRUI( A, 2, X, Y, 0, 1 ) 109#define ATTR3UI( A, X, Y, Z ) ATTRUI( A, 3, X, Y, Z, 1 ) 110#define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W ) 111 112#define MAT_ATTR( A, N, V ) ATTRF( A, N, (V)[0], (V)[1], (V)[2], (V)[3] ) 113 114#define ATTRUI10_1( A, UI ) ATTRF( A, 1, (UI) & 0x3ff, 0, 0, 1 ) 115#define ATTRUI10_2( A, UI ) ATTRF( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 ) 116#define ATTRUI10_3( A, UI ) ATTRF( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 ) 117#define ATTRUI10_4( A, UI ) ATTRF( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 ) 118 119#define ATTRUI10N_1( A, UI ) ATTRF( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 ) 120#define ATTRUI10N_2( A, UI ) ATTRF( A, 2, \ 121 conv_ui10_to_norm_float((UI) & 0x3ff), \ 122 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 ) 123#define ATTRUI10N_3( A, UI ) ATTRF( A, 3, \ 124 conv_ui10_to_norm_float((UI) & 0x3ff), \ 125 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \ 126 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 ) 127#define ATTRUI10N_4( A, UI ) ATTRF( A, 4, \ 128 conv_ui10_to_norm_float((UI) & 0x3ff), \ 129 conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \ 130 conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \ 131 conv_ui2_to_norm_float(((UI) >> 30) & 0x3) ) 132 133#define ATTRI10_1( A, I10 ) ATTRF( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 ) 134#define ATTRI10_2( A, I10 ) ATTRF( A, 2, \ 135 conv_i10_to_i((I10) & 0x3ff), \ 136 conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 ) 137#define ATTRI10_3( A, I10 ) ATTRF( A, 3, \ 138 conv_i10_to_i((I10) & 0x3ff), \ 139 conv_i10_to_i(((I10) >> 10) & 0x3ff), \ 140 conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 ) 141#define ATTRI10_4( A, I10 ) ATTRF( A, 4, \ 142 conv_i10_to_i((I10) & 0x3ff), \ 143 conv_i10_to_i(((I10) >> 10) & 0x3ff), \ 144 conv_i10_to_i(((I10) >> 20) & 0x3ff), \ 145 conv_i2_to_i(((I10) >> 30) & 0x3)) 146 147 148#define ATTRI10N_1(ctx, A, I10) ATTRF(A, 1, conv_i10_to_norm_float(ctx, (I10) & 0x3ff), 0, 0, 1 ) 149#define ATTRI10N_2(ctx, A, I10) ATTRF(A, 2, \ 150 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 151 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), 0, 1 ) 152#define ATTRI10N_3(ctx, A, I10) ATTRF(A, 3, \ 153 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 154 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \ 155 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), 1 ) 156#define ATTRI10N_4(ctx, A, I10) ATTRF(A, 4, \ 157 conv_i10_to_norm_float(ctx, (I10) & 0x3ff), \ 158 conv_i10_to_norm_float(ctx, ((I10) >> 10) & 0x3ff), \ 159 conv_i10_to_norm_float(ctx, ((I10) >> 20) & 0x3ff), \ 160 conv_i2_to_norm_float(ctx, ((I10) >> 30) & 0x3)) 161 162#define ATTR_UI(ctx, val, type, normalized, attr, arg) do { \ 163 if ((type) == GL_UNSIGNED_INT_2_10_10_10_REV) { \ 164 if (normalized) { \ 165 ATTRUI10N_##val((attr), (arg)); \ 166 } else { \ 167 ATTRUI10_##val((attr), (arg)); \ 168 } \ 169 } else if ((type) == GL_INT_2_10_10_10_REV) { \ 170 if (normalized) { \ 171 ATTRI10N_##val(ctx, (attr), (arg)); \ 172 } else { \ 173 ATTRI10_##val((attr), (arg)); \ 174 } \ 175 } else if ((type) == GL_UNSIGNED_INT_10F_11F_11F_REV) { \ 176 float res[4]; \ 177 res[3] = 1; \ 178 r11g11b10f_to_float3((arg), res); \ 179 ATTR##val##FV((attr), res); \ 180 } else \ 181 ERROR(GL_INVALID_VALUE); \ 182 } while(0) 183 184#define ATTR_UI_INDEX(ctx, val, type, normalized, index, arg) do { \ 185 if ((index) == 0 && _mesa_attr_zero_aliases_vertex(ctx)) { \ 186 ATTR_UI(ctx, val, (type), normalized, 0, (arg)); \ 187 } else if ((index) < MAX_VERTEX_GENERIC_ATTRIBS) { \ 188 ATTR_UI(ctx, val, (type), normalized, VBO_ATTRIB_GENERIC0 + (index), (arg)); \ 189 } else \ 190 ERROR(GL_INVALID_VALUE); \ 191 } while(0) 192 193 194/* Doubles */ 195#define ATTR1DV( A, V ) ATTRD( A, 1, (V)[0], 0, 0, 1 ) 196#define ATTR2DV( A, V ) ATTRD( A, 2, (V)[0], (V)[1], 0, 1 ) 197#define ATTR3DV( A, V ) ATTRD( A, 3, (V)[0], (V)[1], (V)[2], 1 ) 198#define ATTR4DV( A, V ) ATTRD( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) 199 200#define ATTR1D( A, X ) ATTRD( A, 1, X, 0, 0, 1 ) 201#define ATTR2D( A, X, Y ) ATTRD( A, 2, X, Y, 0, 1 ) 202#define ATTR3D( A, X, Y, Z ) ATTRD( A, 3, X, Y, Z, 1 ) 203#define ATTR4D( A, X, Y, Z, W ) ATTRD( A, 4, X, Y, Z, W ) 204 205#define ATTR1UIV64( A, V ) ATTRUI64( A, 1, (V)[0], 0, 0, 0 ) 206#define ATTR1UI64( A, X ) ATTRUI64( A, 1, X, 0, 0, 0 ) 207 208 209static void GLAPIENTRY 210TAG(Vertex2f)(GLfloat x, GLfloat y) 211{ 212 GET_CURRENT_CONTEXT(ctx); 213 ATTR2F(VBO_ATTRIB_POS, x, y); 214} 215 216static void GLAPIENTRY 217TAG(Vertex2fv)(const GLfloat * v) 218{ 219 GET_CURRENT_CONTEXT(ctx); 220 ATTR2FV(VBO_ATTRIB_POS, v); 221} 222 223static void GLAPIENTRY 224TAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z) 225{ 226 GET_CURRENT_CONTEXT(ctx); 227 ATTR3F(VBO_ATTRIB_POS, x, y, z); 228} 229 230static void GLAPIENTRY 231TAG(Vertex3fv)(const GLfloat * v) 232{ 233 GET_CURRENT_CONTEXT(ctx); 234 ATTR3FV(VBO_ATTRIB_POS, v); 235} 236 237static void GLAPIENTRY 238TAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 239{ 240 GET_CURRENT_CONTEXT(ctx); 241 ATTR4F(VBO_ATTRIB_POS, x, y, z, w); 242} 243 244static void GLAPIENTRY 245TAG(Vertex4fv)(const GLfloat * v) 246{ 247 GET_CURRENT_CONTEXT(ctx); 248 ATTR4FV(VBO_ATTRIB_POS, v); 249} 250 251static void GLAPIENTRY 252TAG(VertexAttrib1fARB)(GLuint index, GLfloat x) 253{ 254 GET_CURRENT_CONTEXT(ctx); 255 if (is_vertex_position(ctx, index)) 256 ATTR1F(0, x); 257 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 258 ATTR1F(VBO_ATTRIB_GENERIC0 + index, x); 259 else 260 ERROR(GL_INVALID_VALUE); 261} 262 263static void GLAPIENTRY 264TAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v) 265{ 266 GET_CURRENT_CONTEXT(ctx); 267 if (is_vertex_position(ctx, index)) 268 ATTR1FV(0, v); 269 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 270 ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v); 271 else 272 ERROR(GL_INVALID_VALUE); 273} 274 275static void GLAPIENTRY 276TAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y) 277{ 278 GET_CURRENT_CONTEXT(ctx); 279 if (is_vertex_position(ctx, index)) 280 ATTR2F(0, x, y); 281 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 282 ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y); 283 else 284 ERROR(GL_INVALID_VALUE); 285} 286 287static void GLAPIENTRY 288TAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v) 289{ 290 GET_CURRENT_CONTEXT(ctx); 291 if (is_vertex_position(ctx, index)) 292 ATTR2FV(0, v); 293 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 294 ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v); 295 else 296 ERROR(GL_INVALID_VALUE); 297} 298 299static void GLAPIENTRY 300TAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z) 301{ 302 GET_CURRENT_CONTEXT(ctx); 303 if (is_vertex_position(ctx, index)) 304 ATTR3F(0, x, y, z); 305 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 306 ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z); 307 else 308 ERROR(GL_INVALID_VALUE); 309} 310 311static void GLAPIENTRY 312TAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v) 313{ 314 GET_CURRENT_CONTEXT(ctx); 315 if (is_vertex_position(ctx, index)) 316 ATTR3FV(0, v); 317 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 318 ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v); 319 else 320 ERROR(GL_INVALID_VALUE); 321} 322 323static void GLAPIENTRY 324TAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 325{ 326 GET_CURRENT_CONTEXT(ctx); 327 if (is_vertex_position(ctx, index)) 328 ATTR4F(0, x, y, z, w); 329 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 330 ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 331 else 332 ERROR(GL_INVALID_VALUE); 333} 334 335static void GLAPIENTRY 336TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v) 337{ 338 GET_CURRENT_CONTEXT(ctx); 339 if (is_vertex_position(ctx, index)) 340 ATTR4FV(0, v); 341 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 342 ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v); 343 else 344 ERROR(GL_INVALID_VALUE); 345} 346 347 348 349/* Integer-valued generic attributes. 350 * XXX: the integers just get converted to floats at this time 351 */ 352static void GLAPIENTRY 353TAG(VertexAttribI1iEXT)(GLuint index, GLint x) 354{ 355 GET_CURRENT_CONTEXT(ctx); 356 if (is_vertex_position(ctx, index)) 357 ATTR1I(0, x); 358 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 359 ATTR1I(VBO_ATTRIB_GENERIC0 + index, x); 360 else 361 ERROR(GL_INVALID_VALUE); 362} 363 364static void GLAPIENTRY 365TAG(VertexAttribI2iEXT)(GLuint index, GLint x, GLint y) 366{ 367 GET_CURRENT_CONTEXT(ctx); 368 if (is_vertex_position(ctx, index)) 369 ATTR2I(0, x, y); 370 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 371 ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y); 372 else 373 ERROR(GL_INVALID_VALUE); 374} 375 376static void GLAPIENTRY 377TAG(VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z) 378{ 379 GET_CURRENT_CONTEXT(ctx); 380 if (is_vertex_position(ctx, index)) 381 ATTR3I(0, x, y, z); 382 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 383 ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z); 384 else 385 ERROR(GL_INVALID_VALUE); 386} 387 388static void GLAPIENTRY 389TAG(VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w) 390{ 391 GET_CURRENT_CONTEXT(ctx); 392 if (is_vertex_position(ctx, index)) 393 ATTR4I(0, x, y, z, w); 394 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 395 ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 396 else 397 ERROR(GL_INVALID_VALUE); 398} 399 400static void GLAPIENTRY 401TAG(VertexAttribI2ivEXT)(GLuint index, const GLint *v) 402{ 403 GET_CURRENT_CONTEXT(ctx); 404 if (is_vertex_position(ctx, index)) 405 ATTR2IV(0, v); 406 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 407 ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v); 408 else 409 ERROR(GL_INVALID_VALUE); 410} 411 412static void GLAPIENTRY 413TAG(VertexAttribI3ivEXT)(GLuint index, const GLint *v) 414{ 415 GET_CURRENT_CONTEXT(ctx); 416 if (is_vertex_position(ctx, index)) 417 ATTR3IV(0, v); 418 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 419 ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v); 420 else 421 ERROR(GL_INVALID_VALUE); 422} 423 424static void GLAPIENTRY 425TAG(VertexAttribI4ivEXT)(GLuint index, const GLint *v) 426{ 427 GET_CURRENT_CONTEXT(ctx); 428 if (is_vertex_position(ctx, index)) 429 ATTR4IV(0, v); 430 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 431 ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v); 432 else 433 ERROR(GL_INVALID_VALUE); 434} 435 436 437 438/* Unsigned integer-valued generic attributes. 439 * XXX: the integers just get converted to floats at this time 440 */ 441static void GLAPIENTRY 442TAG(VertexAttribI1uiEXT)(GLuint index, GLuint x) 443{ 444 GET_CURRENT_CONTEXT(ctx); 445 if (is_vertex_position(ctx, index)) 446 ATTR1UI(0, x); 447 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 448 ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x); 449 else 450 ERROR(GL_INVALID_VALUE); 451} 452 453static void GLAPIENTRY 454TAG(VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y) 455{ 456 GET_CURRENT_CONTEXT(ctx); 457 if (is_vertex_position(ctx, index)) 458 ATTR2UI(0, x, y); 459 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 460 ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y); 461 else 462 ERROR(GL_INVALID_VALUE); 463} 464 465static void GLAPIENTRY 466TAG(VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z) 467{ 468 GET_CURRENT_CONTEXT(ctx); 469 if (is_vertex_position(ctx, index)) 470 ATTR3UI(0, x, y, z); 471 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 472 ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z); 473 else 474 ERROR(GL_INVALID_VALUE); 475} 476 477static void GLAPIENTRY 478TAG(VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) 479{ 480 GET_CURRENT_CONTEXT(ctx); 481 if (is_vertex_position(ctx, index)) 482 ATTR4UI(0, x, y, z, w); 483 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 484 ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 485 else 486 ERROR(GL_INVALID_VALUE); 487} 488 489static void GLAPIENTRY 490TAG(VertexAttribI2uivEXT)(GLuint index, const GLuint *v) 491{ 492 GET_CURRENT_CONTEXT(ctx); 493 if (is_vertex_position(ctx, index)) 494 ATTR2UIV(0, v); 495 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 496 ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v); 497 else 498 ERROR(GL_INVALID_VALUE); 499} 500 501static void GLAPIENTRY 502TAG(VertexAttribI3uivEXT)(GLuint index, const GLuint *v) 503{ 504 GET_CURRENT_CONTEXT(ctx); 505 if (is_vertex_position(ctx, index)) 506 ATTR3UIV(0, v); 507 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 508 ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v); 509 else 510 ERROR(GL_INVALID_VALUE); 511} 512 513static void GLAPIENTRY 514TAG(VertexAttribI4uivEXT)(GLuint index, const GLuint *v) 515{ 516 GET_CURRENT_CONTEXT(ctx); 517 if (is_vertex_position(ctx, index)) 518 ATTR4UIV(0, v); 519 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 520 ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v); 521 else 522 ERROR(GL_INVALID_VALUE); 523} 524 525 526 527/* These entrypoints are no longer used for NV_vertex_program but they are 528 * used by the display list and other code specifically because of their 529 * property of aliasing with the legacy Vertex, TexCoord, Normal, etc 530 * attributes. (See vbo_save_loopback.c) 531 */ 532static void GLAPIENTRY 533TAG(VertexAttrib1fNV)(GLuint index, GLfloat x) 534{ 535 GET_CURRENT_CONTEXT(ctx); 536 if (index < VBO_ATTRIB_MAX) 537 ATTR1F(index, x); 538} 539 540static void GLAPIENTRY 541TAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v) 542{ 543 GET_CURRENT_CONTEXT(ctx); 544 if (index < VBO_ATTRIB_MAX) 545 ATTR1FV(index, v); 546} 547 548static void GLAPIENTRY 549TAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y) 550{ 551 GET_CURRENT_CONTEXT(ctx); 552 if (index < VBO_ATTRIB_MAX) 553 ATTR2F(index, x, y); 554} 555 556static void GLAPIENTRY 557TAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v) 558{ 559 GET_CURRENT_CONTEXT(ctx); 560 if (index < VBO_ATTRIB_MAX) 561 ATTR2FV(index, v); 562} 563 564static void GLAPIENTRY 565TAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z) 566{ 567 GET_CURRENT_CONTEXT(ctx); 568 if (index < VBO_ATTRIB_MAX) 569 ATTR3F(index, x, y, z); 570} 571 572static void GLAPIENTRY 573TAG(VertexAttrib3fvNV)(GLuint index, 574 const GLfloat * v) 575{ 576 GET_CURRENT_CONTEXT(ctx); 577 if (index < VBO_ATTRIB_MAX) 578 ATTR3FV(index, v); 579} 580 581static void GLAPIENTRY 582TAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 583{ 584 GET_CURRENT_CONTEXT(ctx); 585 if (index < VBO_ATTRIB_MAX) 586 ATTR4F(index, x, y, z, w); 587} 588 589static void GLAPIENTRY 590TAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v) 591{ 592 GET_CURRENT_CONTEXT(ctx); 593 if (index < VBO_ATTRIB_MAX) 594 ATTR4FV(index, v); 595} 596 597static void GLAPIENTRY 598TAG(VertexP2ui)(GLenum type, GLuint value) 599{ 600 GET_CURRENT_CONTEXT(ctx); 601 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP2ui"); 602 ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_POS, value); 603} 604 605static void GLAPIENTRY 606TAG(VertexP2uiv)(GLenum type, const GLuint *value) 607{ 608 GET_CURRENT_CONTEXT(ctx); 609 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP2uiv"); 610 ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_POS, value[0]); 611} 612 613static void GLAPIENTRY 614TAG(VertexP3ui)(GLenum type, GLuint value) 615{ 616 GET_CURRENT_CONTEXT(ctx); 617 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP3ui"); 618 ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_POS, value); 619} 620 621static void GLAPIENTRY 622TAG(VertexP3uiv)(GLenum type, const GLuint *value) 623{ 624 GET_CURRENT_CONTEXT(ctx); 625 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP3uiv"); 626 ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_POS, value[0]); 627} 628 629static void GLAPIENTRY 630TAG(VertexP4ui)(GLenum type, GLuint value) 631{ 632 GET_CURRENT_CONTEXT(ctx); 633 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP4ui"); 634 ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_POS, value); 635} 636 637static void GLAPIENTRY 638TAG(VertexP4uiv)(GLenum type, const GLuint *value) 639{ 640 GET_CURRENT_CONTEXT(ctx); 641 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexP4uiv"); 642 ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_POS, value[0]); 643} 644 645static void GLAPIENTRY 646TAG(VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, 647 GLuint value) 648{ 649 GET_CURRENT_CONTEXT(ctx); 650 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP1ui"); 651 ATTR_UI_INDEX(ctx, 1, type, normalized, index, value); 652} 653 654static void GLAPIENTRY 655TAG(VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, 656 GLuint value) 657{ 658 GET_CURRENT_CONTEXT(ctx); 659 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP2ui"); 660 ATTR_UI_INDEX(ctx, 2, type, normalized, index, value); 661} 662 663static void GLAPIENTRY 664TAG(VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, 665 GLuint value) 666{ 667 GET_CURRENT_CONTEXT(ctx); 668 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP3ui"); 669 ATTR_UI_INDEX(ctx, 3, type, normalized, index, value); 670} 671 672static void GLAPIENTRY 673TAG(VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, 674 GLuint value) 675{ 676 GET_CURRENT_CONTEXT(ctx); 677 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexAttribP4ui"); 678 ATTR_UI_INDEX(ctx, 4, type, normalized, index, value); 679} 680 681static void GLAPIENTRY 682TAG(VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, 683 const GLuint *value) 684{ 685 GET_CURRENT_CONTEXT(ctx); 686 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP1uiv"); 687 ATTR_UI_INDEX(ctx, 1, type, normalized, index, *value); 688} 689 690static void GLAPIENTRY 691TAG(VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, 692 const GLuint *value) 693{ 694 GET_CURRENT_CONTEXT(ctx); 695 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP2uiv"); 696 ATTR_UI_INDEX(ctx, 2, type, normalized, index, *value); 697} 698 699static void GLAPIENTRY 700TAG(VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, 701 const GLuint *value) 702{ 703 GET_CURRENT_CONTEXT(ctx); 704 ERROR_IF_NOT_PACKED_TYPE_EXT(ctx, type, "glVertexAttribP3uiv"); 705 ATTR_UI_INDEX(ctx, 3, type, normalized, index, *value); 706} 707 708static void GLAPIENTRY 709TAG(VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, 710 const GLuint *value) 711{ 712 GET_CURRENT_CONTEXT(ctx); 713 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glVertexAttribP4uiv"); 714 ATTR_UI_INDEX(ctx, 4, type, normalized, index, *value); 715} 716 717 718 719static void GLAPIENTRY 720TAG(VertexAttribL1d)(GLuint index, GLdouble x) 721{ 722 GET_CURRENT_CONTEXT(ctx); 723 if (is_vertex_position(ctx, index)) 724 ATTR1D(0, x); 725 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 726 ATTR1D(VBO_ATTRIB_GENERIC0 + index, x); 727 else 728 ERROR(GL_INVALID_VALUE); 729} 730 731static void GLAPIENTRY 732TAG(VertexAttribL1dv)(GLuint index, const GLdouble * v) 733{ 734 GET_CURRENT_CONTEXT(ctx); 735 if (is_vertex_position(ctx, index)) 736 ATTR1DV(0, v); 737 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 738 ATTR1DV(VBO_ATTRIB_GENERIC0 + index, v); 739 else 740 ERROR(GL_INVALID_VALUE); 741} 742 743static void GLAPIENTRY 744TAG(VertexAttribL2d)(GLuint index, GLdouble x, GLdouble y) 745{ 746 GET_CURRENT_CONTEXT(ctx); 747 if (is_vertex_position(ctx, index)) 748 ATTR2D(0, x, y); 749 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 750 ATTR2D(VBO_ATTRIB_GENERIC0 + index, x, y); 751 else 752 ERROR(GL_INVALID_VALUE); 753} 754 755static void GLAPIENTRY 756TAG(VertexAttribL2dv)(GLuint index, const GLdouble * v) 757{ 758 GET_CURRENT_CONTEXT(ctx); 759 if (is_vertex_position(ctx, index)) 760 ATTR2DV(0, v); 761 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 762 ATTR2DV(VBO_ATTRIB_GENERIC0 + index, v); 763 else 764 ERROR(GL_INVALID_VALUE); 765} 766 767static void GLAPIENTRY 768TAG(VertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z) 769{ 770 GET_CURRENT_CONTEXT(ctx); 771 if (is_vertex_position(ctx, index)) 772 ATTR3D(0, x, y, z); 773 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 774 ATTR3D(VBO_ATTRIB_GENERIC0 + index, x, y, z); 775 else 776 ERROR(GL_INVALID_VALUE); 777} 778 779static void GLAPIENTRY 780TAG(VertexAttribL3dv)(GLuint index, const GLdouble * v) 781{ 782 GET_CURRENT_CONTEXT(ctx); 783 if (is_vertex_position(ctx, index)) 784 ATTR3DV(0, v); 785 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 786 ATTR3DV(VBO_ATTRIB_GENERIC0 + index, v); 787 else 788 ERROR(GL_INVALID_VALUE); 789} 790 791static void GLAPIENTRY 792TAG(VertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 793{ 794 GET_CURRENT_CONTEXT(ctx); 795 if (is_vertex_position(ctx, index)) 796 ATTR4D(0, x, y, z, w); 797 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 798 ATTR4D(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 799 else 800 ERROR(GL_INVALID_VALUE); 801} 802 803static void GLAPIENTRY 804TAG(VertexAttribL4dv)(GLuint index, const GLdouble * v) 805{ 806 GET_CURRENT_CONTEXT(ctx); 807 if (is_vertex_position(ctx, index)) 808 ATTR4DV(0, v); 809 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 810 ATTR4DV(VBO_ATTRIB_GENERIC0 + index, v); 811 else 812 ERROR(GL_INVALID_VALUE); 813} 814 815static void GLAPIENTRY 816TAG(VertexAttribL1ui64ARB)(GLuint index, GLuint64EXT x) 817{ 818 GET_CURRENT_CONTEXT(ctx); 819 if (is_vertex_position(ctx, index)) 820 ATTR1UI64(0, x); 821 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 822 ATTR1UI64(VBO_ATTRIB_GENERIC0 + index, x); 823 else 824 ERROR(GL_INVALID_VALUE); 825} 826 827static void GLAPIENTRY 828TAG(VertexAttribL1ui64vARB)(GLuint index, const GLuint64EXT *v) 829{ 830 GET_CURRENT_CONTEXT(ctx); 831 if (is_vertex_position(ctx, index)) 832 ATTR1UIV64(0, v); 833 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 834 ATTR1UIV64(VBO_ATTRIB_GENERIC0 + index, v); 835 else 836 ERROR(GL_INVALID_VALUE); 837} 838 839/* GL_NV_half_float */ 840static void GLAPIENTRY 841TAG(Vertex2hNV)(GLhalfNV x, GLhalfNV y) 842{ 843 GET_CURRENT_CONTEXT(ctx); 844 ATTR2H(VBO_ATTRIB_POS, x, y); 845} 846 847static void GLAPIENTRY 848TAG(Vertex2hvNV)(const GLhalfNV * v) 849{ 850 GET_CURRENT_CONTEXT(ctx); 851 ATTR2HV(VBO_ATTRIB_POS, v); 852} 853 854static void GLAPIENTRY 855TAG(Vertex3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z) 856{ 857 GET_CURRENT_CONTEXT(ctx); 858 ATTR3H(VBO_ATTRIB_POS, x, y, z); 859} 860 861static void GLAPIENTRY 862TAG(Vertex3hvNV)(const GLhalfNV * v) 863{ 864 GET_CURRENT_CONTEXT(ctx); 865 ATTR3HV(VBO_ATTRIB_POS, v); 866} 867 868static void GLAPIENTRY 869TAG(Vertex4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) 870{ 871 GET_CURRENT_CONTEXT(ctx); 872 ATTR4H(VBO_ATTRIB_POS, x, y, z, w); 873} 874 875static void GLAPIENTRY 876TAG(Vertex4hvNV)(const GLhalfNV * v) 877{ 878 GET_CURRENT_CONTEXT(ctx); 879 ATTR4HV(VBO_ATTRIB_POS, v); 880} 881 882static void GLAPIENTRY 883TAG(VertexAttrib1hNV)(GLuint index, GLhalfNV x) 884{ 885 GET_CURRENT_CONTEXT(ctx); 886 if (is_vertex_position(ctx, index)) 887 ATTR1H(0, x); 888 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 889 ATTR1H(VBO_ATTRIB_GENERIC0 + index, x); 890 else 891 ERROR(GL_INVALID_VALUE); 892} 893 894static void GLAPIENTRY 895TAG(VertexAttrib2hNV)(GLuint index, GLhalfNV x, GLhalfNV y) 896{ 897 GET_CURRENT_CONTEXT(ctx); 898 if (is_vertex_position(ctx, index)) 899 ATTR2H(0, x, y); 900 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 901 ATTR2H(VBO_ATTRIB_GENERIC0 + index, x, y); 902 else 903 ERROR(GL_INVALID_VALUE); 904} 905 906static void GLAPIENTRY 907TAG(VertexAttrib3hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z) 908{ 909 GET_CURRENT_CONTEXT(ctx); 910 if (is_vertex_position(ctx, index)) 911 ATTR3H(0, x, y, z); 912 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 913 ATTR3H(VBO_ATTRIB_GENERIC0 + index, x, y, z); 914 else 915 ERROR(GL_INVALID_VALUE); 916} 917 918static void GLAPIENTRY 919TAG(VertexAttrib4hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) 920{ 921 GET_CURRENT_CONTEXT(ctx); 922 if (is_vertex_position(ctx, index)) 923 ATTR4H(0, x, y, z, w); 924 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 925 ATTR4H(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); 926 else 927 ERROR(GL_INVALID_VALUE); 928} 929 930static void GLAPIENTRY 931TAG(VertexAttrib1hvNV)(GLuint index, const GLhalfNV * v) 932{ 933 GET_CURRENT_CONTEXT(ctx); 934 if (is_vertex_position(ctx, index)) 935 ATTR1HV(0, v); 936 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 937 ATTR1HV(VBO_ATTRIB_GENERIC0 + index, v); 938 else 939 ERROR(GL_INVALID_VALUE); 940} 941 942static void GLAPIENTRY 943TAG(VertexAttrib2hvNV)(GLuint index, const GLhalfNV * v) 944{ 945 GET_CURRENT_CONTEXT(ctx); 946 if (is_vertex_position(ctx, index)) 947 ATTR2HV(0, v); 948 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 949 ATTR2HV(VBO_ATTRIB_GENERIC0 + index, v); 950 else 951 ERROR(GL_INVALID_VALUE); 952} 953 954static void GLAPIENTRY 955TAG(VertexAttrib3hvNV)(GLuint index, const GLhalfNV * v) 956{ 957 GET_CURRENT_CONTEXT(ctx); 958 if (is_vertex_position(ctx, index)) 959 ATTR3HV(0, v); 960 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 961 ATTR3HV(VBO_ATTRIB_GENERIC0 + index, v); 962 else 963 ERROR(GL_INVALID_VALUE); 964} 965 966static void GLAPIENTRY 967TAG(VertexAttrib4hvNV)(GLuint index, const GLhalfNV * v) 968{ 969 GET_CURRENT_CONTEXT(ctx); 970 if (is_vertex_position(ctx, index)) 971 ATTR4HV(0, v); 972 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 973 ATTR4HV(VBO_ATTRIB_GENERIC0 + index, v); 974 else 975 ERROR(GL_INVALID_VALUE); 976} 977 978static void GLAPIENTRY 979TAG(VertexAttribs1hvNV)(GLuint index, GLsizei n, const GLhalfNV *v) 980{ 981 GET_CURRENT_CONTEXT(ctx); 982 n = MIN2(n, VBO_ATTRIB_MAX - index); 983 for (GLint i = n - 1; i >= 0; i--) 984 ATTR1H(index + i, v[i]); 985} 986 987static void GLAPIENTRY 988TAG(VertexAttribs2hvNV)(GLuint index, GLsizei n, const GLhalfNV *v) 989{ 990 GET_CURRENT_CONTEXT(ctx); 991 n = MIN2(n, VBO_ATTRIB_MAX - index); 992 for (GLint i = n - 1; i >= 0; i--) 993 ATTR2H(index + i, v[2 * i], v[2 * i + 1]); 994} 995 996static void GLAPIENTRY 997TAG(VertexAttribs3hvNV)(GLuint index, GLsizei n, const GLhalfNV *v) 998{ 999 GET_CURRENT_CONTEXT(ctx); 1000 n = MIN2(n, VBO_ATTRIB_MAX - index); 1001 for (GLint i = n - 1; i >= 0; i--) 1002 ATTR3H(index + i, v[3 * i], v[3 * i + 1], v[3 * i + 2]); 1003} 1004 1005 1006static void GLAPIENTRY 1007TAG(VertexAttribs4hvNV)(GLuint index, GLsizei n, const GLhalfNV *v) 1008{ 1009 GET_CURRENT_CONTEXT(ctx); 1010 n = MIN2(n, VBO_ATTRIB_MAX - index); 1011 for (GLint i = n - 1; i >= 0; i--) 1012 ATTR4H(index + i, v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3]); 1013} 1014 1015static void GLAPIENTRY 1016TAG(Vertex2d)(GLdouble x, GLdouble y) 1017{ 1018 GET_CURRENT_CONTEXT(ctx); 1019 ATTR2F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y); 1020} 1021 1022static void GLAPIENTRY 1023TAG(Vertex2i)(GLint x, GLint y) 1024{ 1025 GET_CURRENT_CONTEXT(ctx); 1026 ATTR2F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y); 1027} 1028 1029static void GLAPIENTRY 1030TAG(Vertex2s)(GLshort x, GLshort y) 1031{ 1032 GET_CURRENT_CONTEXT(ctx); 1033 ATTR2F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y); 1034} 1035 1036static void GLAPIENTRY 1037TAG(Vertex3d)(GLdouble x, GLdouble y, GLdouble z) 1038{ 1039 GET_CURRENT_CONTEXT(ctx); 1040 ATTR3F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1041} 1042 1043static void GLAPIENTRY 1044TAG(Vertex3i)(GLint x, GLint y, GLint z) 1045{ 1046 GET_CURRENT_CONTEXT(ctx); 1047 ATTR3F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1048} 1049 1050static void GLAPIENTRY 1051TAG(Vertex3s)(GLshort x, GLshort y, GLshort z) 1052{ 1053 GET_CURRENT_CONTEXT(ctx); 1054 ATTR3F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1055} 1056 1057static void GLAPIENTRY 1058TAG(Vertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1059{ 1060 GET_CURRENT_CONTEXT(ctx); 1061 ATTR4F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1062} 1063 1064static void GLAPIENTRY 1065TAG(Vertex4i)(GLint x, GLint y, GLint z, GLint w) 1066{ 1067 GET_CURRENT_CONTEXT(ctx); 1068 ATTR4F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1069} 1070 1071static void GLAPIENTRY 1072TAG(Vertex4s)(GLshort x, GLshort y, GLshort z, GLshort w) 1073{ 1074 GET_CURRENT_CONTEXT(ctx); 1075 ATTR4F(VBO_ATTRIB_POS, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1076} 1077 1078static void GLAPIENTRY 1079TAG(Vertex2dv)(const GLdouble *v) 1080{ 1081 GET_CURRENT_CONTEXT(ctx); 1082 ATTR2F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1]); 1083} 1084 1085static void GLAPIENTRY 1086TAG(Vertex2iv)(const GLint *v) 1087{ 1088 GET_CURRENT_CONTEXT(ctx); 1089 ATTR2F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1]); 1090} 1091 1092static void GLAPIENTRY 1093TAG(Vertex2sv)(const GLshort *v) 1094{ 1095 GET_CURRENT_CONTEXT(ctx); 1096 ATTR2F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1]); 1097} 1098 1099static void GLAPIENTRY 1100TAG(Vertex3dv)(const GLdouble *v) 1101{ 1102 GET_CURRENT_CONTEXT(ctx); 1103 ATTR3F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1104} 1105 1106static void GLAPIENTRY 1107TAG(Vertex3iv)(const GLint *v) 1108{ 1109 GET_CURRENT_CONTEXT(ctx); 1110 ATTR3F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1111} 1112 1113static void GLAPIENTRY 1114TAG(Vertex3sv)(const GLshort *v) 1115{ 1116 GET_CURRENT_CONTEXT(ctx); 1117 ATTR3F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1118} 1119 1120static void GLAPIENTRY 1121TAG(Vertex4dv)(const GLdouble *v) 1122{ 1123 GET_CURRENT_CONTEXT(ctx); 1124 ATTR4F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], 1125 (GLfloat) v[2], (GLfloat) v[3]); 1126} 1127 1128static void GLAPIENTRY 1129TAG(Vertex4iv)(const GLint *v) 1130{ 1131 GET_CURRENT_CONTEXT(ctx); 1132 ATTR4F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], 1133 (GLfloat) v[2], (GLfloat) v[3]); 1134} 1135 1136static void GLAPIENTRY 1137TAG(Vertex4sv)(const GLshort *v) 1138{ 1139 GET_CURRENT_CONTEXT(ctx); 1140 ATTR4F(VBO_ATTRIB_POS, (GLfloat) v[0], (GLfloat) v[1], 1141 (GLfloat) v[2], (GLfloat) v[3]); 1142} 1143 1144/* 1145 * GL_NV_vertex_program: 1146 * Note that attribute indexes DO alias conventional vertex attributes. 1147 */ 1148 1149static void GLAPIENTRY 1150TAG(VertexAttrib1sNV)(GLuint index, GLshort x) 1151{ 1152 GET_CURRENT_CONTEXT(ctx); 1153 if (index < VBO_ATTRIB_MAX) ATTR1F(index, (GLfloat) x); 1154} 1155 1156static void GLAPIENTRY 1157TAG(VertexAttrib1dNV)(GLuint index, GLdouble x) 1158{ 1159 GET_CURRENT_CONTEXT(ctx); 1160 if (index < VBO_ATTRIB_MAX) ATTR1F(index, (GLfloat) x); 1161} 1162 1163static void GLAPIENTRY 1164TAG(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y) 1165{ 1166 GET_CURRENT_CONTEXT(ctx); 1167 if (index < VBO_ATTRIB_MAX) ATTR2F(index, (GLfloat) x, y); 1168} 1169 1170static void GLAPIENTRY 1171TAG(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y) 1172{ 1173 GET_CURRENT_CONTEXT(ctx); 1174 if (index < VBO_ATTRIB_MAX) ATTR2F(index, (GLfloat) x, (GLfloat) y); 1175} 1176 1177static void GLAPIENTRY 1178TAG(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z) 1179{ 1180 GET_CURRENT_CONTEXT(ctx); 1181 if (index < VBO_ATTRIB_MAX) ATTR3F(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1182} 1183 1184static void GLAPIENTRY 1185TAG(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z) 1186{ 1187 GET_CURRENT_CONTEXT(ctx); 1188 if (index < VBO_ATTRIB_MAX) ATTR4F(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); 1189} 1190 1191static void GLAPIENTRY 1192TAG(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) 1193{ 1194 GET_CURRENT_CONTEXT(ctx); 1195 if (index < VBO_ATTRIB_MAX) ATTR4F(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1196} 1197 1198static void GLAPIENTRY 1199TAG(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1200{ 1201 GET_CURRENT_CONTEXT(ctx); 1202 if (index < VBO_ATTRIB_MAX) ATTR4F(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1203} 1204 1205static void GLAPIENTRY 1206TAG(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) 1207{ 1208 GET_CURRENT_CONTEXT(ctx); 1209 if (index < VBO_ATTRIB_MAX) ATTR4F(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y), 1210 UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w)); 1211} 1212 1213static void GLAPIENTRY 1214TAG(VertexAttrib1svNV)(GLuint index, const GLshort *v) 1215{ 1216 GET_CURRENT_CONTEXT(ctx); 1217 if (index < VBO_ATTRIB_MAX) ATTR1F(index, (GLfloat) v[0]); 1218} 1219 1220static void GLAPIENTRY 1221TAG(VertexAttrib1dvNV)(GLuint index, const GLdouble *v) 1222{ 1223 GET_CURRENT_CONTEXT(ctx); 1224 if (index < VBO_ATTRIB_MAX) ATTR1F(index, (GLfloat) v[0]); 1225} 1226 1227static void GLAPIENTRY 1228TAG(VertexAttrib2svNV)(GLuint index, const GLshort *v) 1229{ 1230 GET_CURRENT_CONTEXT(ctx); 1231 if (index < VBO_ATTRIB_MAX) ATTR2F(index, (GLfloat) v[0], (GLfloat) v[1]); 1232} 1233 1234static void GLAPIENTRY 1235TAG(VertexAttrib2dvNV)(GLuint index, const GLdouble *v) 1236{ 1237 GET_CURRENT_CONTEXT(ctx); 1238 if (index < VBO_ATTRIB_MAX) ATTR2F(index, (GLfloat) v[0], (GLfloat) v[1]); 1239} 1240 1241static void GLAPIENTRY 1242TAG(VertexAttrib3svNV)(GLuint index, const GLshort *v) 1243{ 1244 GET_CURRENT_CONTEXT(ctx); 1245 if (index < VBO_ATTRIB_MAX) ATTR3F(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1246} 1247 1248static void GLAPIENTRY 1249TAG(VertexAttrib3dvNV)(GLuint index, const GLdouble *v) 1250{ 1251 GET_CURRENT_CONTEXT(ctx); 1252 if (index < VBO_ATTRIB_MAX) ATTR3F(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1253} 1254 1255static void GLAPIENTRY 1256TAG(VertexAttrib4svNV)(GLuint index, const GLshort *v) 1257{ 1258 GET_CURRENT_CONTEXT(ctx); 1259 if (index < VBO_ATTRIB_MAX) ATTR4F(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1260 (GLfloat)v[3]); 1261} 1262 1263static void GLAPIENTRY 1264TAG(VertexAttrib4dvNV)(GLuint index, const GLdouble *v) 1265{ 1266 GET_CURRENT_CONTEXT(ctx); 1267 if (index < VBO_ATTRIB_MAX) ATTR4F(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1268} 1269 1270static void GLAPIENTRY 1271TAG(VertexAttrib4ubvNV)(GLuint index, const GLubyte *v) 1272{ 1273 GET_CURRENT_CONTEXT(ctx); 1274 if (index < VBO_ATTRIB_MAX) ATTR4F(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 1275 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 1276} 1277 1278 1279static void GLAPIENTRY 1280TAG(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort *v) 1281{ 1282 GET_CURRENT_CONTEXT(ctx); 1283 GLint i; 1284 n = MIN2(n, VBO_ATTRIB_MAX - index); 1285 for (i = n - 1; i >= 0; i--) 1286 ATTR1F(index + i, (GLfloat) v[i]); 1287} 1288 1289static void GLAPIENTRY 1290TAG(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat *v) 1291{ 1292 GET_CURRENT_CONTEXT(ctx); 1293 GLint i; 1294 n = MIN2(n, VBO_ATTRIB_MAX - index); 1295 for (i = n - 1; i >= 0; i--) 1296 ATTR1F(index + i, v[i]); 1297} 1298 1299static void GLAPIENTRY 1300TAG(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble *v) 1301{ 1302 GET_CURRENT_CONTEXT(ctx); 1303 GLint i; 1304 n = MIN2(n, VBO_ATTRIB_MAX - index); 1305 for (i = n - 1; i >= 0; i--) 1306 ATTR1F(index + i, (GLfloat) v[i]); 1307} 1308 1309static void GLAPIENTRY 1310TAG(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort *v) 1311{ 1312 GET_CURRENT_CONTEXT(ctx); 1313 GLint i; 1314 n = MIN2(n, VBO_ATTRIB_MAX - index); 1315 for (i = n - 1; i >= 0; i--) 1316 ATTR2F(index + i, (GLfloat) v[2 * i], (GLfloat) v[2 * i + 1]); 1317} 1318 1319static void GLAPIENTRY 1320TAG(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat *v) 1321{ 1322 GET_CURRENT_CONTEXT(ctx); 1323 GLint i; 1324 n = MIN2(n, VBO_ATTRIB_MAX - index); 1325 for (i = n - 1; i >= 0; i--) 1326 ATTR2F(index + i, v[2 * i], v[2 * i + 1]); 1327} 1328 1329static void GLAPIENTRY 1330TAG(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble *v) 1331{ 1332 GET_CURRENT_CONTEXT(ctx); 1333 GLint i; 1334 n = MIN2(n, VBO_ATTRIB_MAX - index); 1335 for (i = n - 1; i >= 0; i--) 1336 ATTR2F(index + i, (GLfloat) v[2 * i], (GLfloat) v[2 * i + 1]); 1337} 1338 1339static void GLAPIENTRY 1340TAG(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort *v) 1341{ 1342 GET_CURRENT_CONTEXT(ctx); 1343 GLint i; 1344 n = MIN2(n, VBO_ATTRIB_MAX - index); 1345 for (i = n - 1; i >= 0; i--) 1346 ATTR3F(index + i, (GLfloat) v[3 * i], (GLfloat) v[3 * i + 1], (GLfloat) v[3 * i + 2]); 1347} 1348 1349static void GLAPIENTRY 1350TAG(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat *v) 1351{ 1352 GET_CURRENT_CONTEXT(ctx); 1353 GLint i; 1354 n = MIN2(n, VBO_ATTRIB_MAX - index); 1355 for (i = n - 1; i >= 0; i--) 1356 ATTR3F(index + i, v[3 * i], v[3 * i + 1], v[3 * i + 2]); 1357} 1358 1359static void GLAPIENTRY 1360TAG(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble *v) 1361{ 1362 GET_CURRENT_CONTEXT(ctx); 1363 GLint i; 1364 n = MIN2(n, VBO_ATTRIB_MAX - index); 1365 for (i = n - 1; i >= 0; i--) 1366 ATTR3F(index + i, (GLfloat) v[3 * i], (GLfloat) v[3 * i + 1], (GLfloat) v[3 * i + 2]); 1367} 1368 1369static void GLAPIENTRY 1370TAG(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort *v) 1371{ 1372 GET_CURRENT_CONTEXT(ctx); 1373 GLint i; 1374 n = MIN2(n, VBO_ATTRIB_MAX - index); 1375 for (i = n - 1; i >= 0; i--) 1376 ATTR4F(index + i, (GLfloat) v[4 * i], (GLfloat) v[4 * i + 1], (GLfloat) v[4 * i + 2], (GLfloat) v[4 * i + 3]); 1377} 1378 1379static void GLAPIENTRY 1380TAG(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat *v) 1381{ 1382 GET_CURRENT_CONTEXT(ctx); 1383 GLint i; 1384 n = MIN2(n, VBO_ATTRIB_MAX - index); 1385 for (i = n - 1; i >= 0; i--) 1386 ATTR4F(index + i, v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3]); 1387} 1388 1389static void GLAPIENTRY 1390TAG(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble *v) 1391{ 1392 GET_CURRENT_CONTEXT(ctx); 1393 GLint i; 1394 n = MIN2(n, VBO_ATTRIB_MAX - index); 1395 for (i = n - 1; i >= 0; i--) 1396 ATTR4F(index + i, (GLfloat) v[4 * i], (GLfloat) v[4 * i + 1], (GLfloat) v[4 * i + 2], (GLfloat) v[4 * i + 3]); 1397} 1398 1399static void GLAPIENTRY 1400TAG(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte *v) 1401{ 1402 GET_CURRENT_CONTEXT(ctx); 1403 GLint i; 1404 n = MIN2(n, VBO_ATTRIB_MAX - index); 1405 for (i = n - 1; i >= 0; i--) 1406 ATTR4F(index + i, UBYTE_TO_FLOAT(v[4 * i]), UBYTE_TO_FLOAT(v[4 * i + 1]), 1407 UBYTE_TO_FLOAT(v[4 * i + 2]), UBYTE_TO_FLOAT(v[4 * i + 3])); 1408} 1409 1410 1411/* 1412 * GL_ARB_vertex_program 1413 * Note that attribute indexes do NOT alias conventional attributes. 1414 */ 1415 1416static void GLAPIENTRY 1417TAG(VertexAttrib1s)(GLuint index, GLshort x) 1418{ 1419 GET_CURRENT_CONTEXT(ctx); 1420 if (is_vertex_position(ctx, index)) 1421 ATTR1F(0, (GLfloat) x); 1422 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1423 ATTR1F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x); 1424 else 1425 ERROR(GL_INVALID_VALUE); 1426} 1427 1428static void GLAPIENTRY 1429TAG(VertexAttrib1d)(GLuint index, GLdouble x) 1430{ 1431 GET_CURRENT_CONTEXT(ctx); 1432 if (is_vertex_position(ctx, index)) 1433 ATTR1F(0, (GLfloat) x); 1434 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1435 ATTR1F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x); 1436 else 1437 ERROR(GL_INVALID_VALUE); 1438} 1439 1440static void GLAPIENTRY 1441TAG(VertexAttrib2s)(GLuint index, GLshort x, GLshort y) 1442{ 1443 GET_CURRENT_CONTEXT(ctx); 1444 if (is_vertex_position(ctx, index)) 1445 ATTR2F(0, (GLfloat) x, (GLfloat) y); 1446 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1447 ATTR2F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y); 1448 else 1449 ERROR(GL_INVALID_VALUE); 1450} 1451 1452static void GLAPIENTRY 1453TAG(VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y) 1454{ 1455 GET_CURRENT_CONTEXT(ctx); 1456 if (is_vertex_position(ctx, index)) 1457 ATTR2F(0, (GLfloat) x, (GLfloat) y); 1458 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1459 ATTR2F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y); 1460 else 1461 ERROR(GL_INVALID_VALUE); 1462} 1463 1464static void GLAPIENTRY 1465TAG(VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z) 1466{ 1467 GET_CURRENT_CONTEXT(ctx); 1468 if (is_vertex_position(ctx, index)) 1469 ATTR3F(0, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1470 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1471 ATTR3F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1472 else 1473 ERROR(GL_INVALID_VALUE); 1474} 1475 1476static void GLAPIENTRY 1477TAG(VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z) 1478{ 1479 GET_CURRENT_CONTEXT(ctx); 1480 if (is_vertex_position(ctx, index)) 1481 ATTR3F(0, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1482 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1483 ATTR3F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1484 else 1485 ERROR(GL_INVALID_VALUE); 1486} 1487 1488static void GLAPIENTRY 1489TAG(VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) 1490{ 1491 GET_CURRENT_CONTEXT(ctx); 1492 if (is_vertex_position(ctx, index)) 1493 ATTR4F(0, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1494 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1495 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1496 else 1497 ERROR(GL_INVALID_VALUE); 1498} 1499 1500static void GLAPIENTRY 1501TAG(VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1502{ 1503 GET_CURRENT_CONTEXT(ctx); 1504 if (is_vertex_position(ctx, index)) 1505 ATTR4F(0, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1506 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1507 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1508 else 1509 ERROR(GL_INVALID_VALUE); 1510} 1511 1512static void GLAPIENTRY 1513TAG(VertexAttrib1sv)(GLuint index, const GLshort *v) 1514{ 1515 GET_CURRENT_CONTEXT(ctx); 1516 if (is_vertex_position(ctx, index)) 1517 ATTR1F(0, (GLfloat) v[0]); 1518 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1519 ATTR1F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0]); 1520 else 1521 ERROR(GL_INVALID_VALUE); 1522} 1523 1524static void GLAPIENTRY 1525TAG(VertexAttrib1dv)(GLuint index, const GLdouble *v) 1526{ 1527 GET_CURRENT_CONTEXT(ctx); 1528 if (is_vertex_position(ctx, index)) 1529 ATTR1F(0, (GLfloat) v[0]); 1530 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1531 ATTR1F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0]); 1532 else 1533 ERROR(GL_INVALID_VALUE); 1534} 1535 1536static void GLAPIENTRY 1537TAG(VertexAttrib2sv)(GLuint index, const GLshort *v) 1538{ 1539 GET_CURRENT_CONTEXT(ctx); 1540 if (is_vertex_position(ctx, index)) 1541 ATTR2F(0, (GLfloat) v[0], (GLfloat) v[1]); 1542 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1543 ATTR2F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1]); 1544 else 1545 ERROR(GL_INVALID_VALUE); 1546} 1547 1548static void GLAPIENTRY 1549TAG(VertexAttrib2dv)(GLuint index, const GLdouble *v) 1550{ 1551 GET_CURRENT_CONTEXT(ctx); 1552 if (is_vertex_position(ctx, index)) 1553 ATTR2F(0, (GLfloat) v[0], (GLfloat) v[1]); 1554 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1555 ATTR2F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1]); 1556 else 1557 ERROR(GL_INVALID_VALUE); 1558} 1559 1560static void GLAPIENTRY 1561TAG(VertexAttrib3sv)(GLuint index, const GLshort *v) 1562{ 1563 GET_CURRENT_CONTEXT(ctx); 1564 if (is_vertex_position(ctx, index)) 1565 ATTR3F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1566 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1567 ATTR3F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1568 else 1569 ERROR(GL_INVALID_VALUE); 1570} 1571 1572static void GLAPIENTRY 1573TAG(VertexAttrib3dv)(GLuint index, const GLdouble *v) 1574{ 1575 GET_CURRENT_CONTEXT(ctx); 1576 if (is_vertex_position(ctx, index)) 1577 ATTR3F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1578 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1579 ATTR3F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1580 else 1581 ERROR(GL_INVALID_VALUE); 1582} 1583 1584static void GLAPIENTRY 1585TAG(VertexAttrib4sv)(GLuint index, const GLshort *v) 1586{ 1587 GET_CURRENT_CONTEXT(ctx); 1588 if (is_vertex_position(ctx, index)) 1589 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1590 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1591 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1592 else 1593 ERROR(GL_INVALID_VALUE); 1594} 1595 1596static void GLAPIENTRY 1597TAG(VertexAttrib4dv)(GLuint index, const GLdouble *v) 1598{ 1599 GET_CURRENT_CONTEXT(ctx); 1600 if (is_vertex_position(ctx, index)) 1601 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1602 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1603 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1604 else 1605 ERROR(GL_INVALID_VALUE); 1606} 1607 1608static void GLAPIENTRY 1609TAG(VertexAttrib4bv)(GLuint index, const GLbyte * v) 1610{ 1611 GET_CURRENT_CONTEXT(ctx); 1612 if (is_vertex_position(ctx, index)) 1613 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1614 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1615 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1616 else 1617 ERROR(GL_INVALID_VALUE); 1618} 1619 1620static void GLAPIENTRY 1621TAG(VertexAttrib4iv)(GLuint index, const GLint * v) 1622{ 1623 GET_CURRENT_CONTEXT(ctx); 1624 if (is_vertex_position(ctx, index)) 1625 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1626 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1627 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1628 else 1629 ERROR(GL_INVALID_VALUE); 1630} 1631 1632static void GLAPIENTRY 1633TAG(VertexAttrib4ubv)(GLuint index, const GLubyte * v) 1634{ 1635 GET_CURRENT_CONTEXT(ctx); 1636 if (is_vertex_position(ctx, index)) 1637 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1638 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1639 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1640 else 1641 ERROR(GL_INVALID_VALUE); 1642} 1643 1644static void GLAPIENTRY 1645TAG(VertexAttrib4usv)(GLuint index, const GLushort * v) 1646{ 1647 GET_CURRENT_CONTEXT(ctx); 1648 if (is_vertex_position(ctx, index)) 1649 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1650 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1651 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1652 else 1653 ERROR(GL_INVALID_VALUE); 1654} 1655 1656static void GLAPIENTRY 1657TAG(VertexAttrib4uiv)(GLuint index, const GLuint * v) 1658{ 1659 GET_CURRENT_CONTEXT(ctx); 1660 if (is_vertex_position(ctx, index)) 1661 ATTR4F(0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1662 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1663 ATTR4F(VBO_ATTRIB_GENERIC0 + index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat)v[3]); 1664 else 1665 ERROR(GL_INVALID_VALUE); 1666} 1667 1668static void GLAPIENTRY 1669TAG(VertexAttrib4Nbv)(GLuint index, const GLbyte * v) 1670{ 1671 GET_CURRENT_CONTEXT(ctx); 1672 if (is_vertex_position(ctx, index)) 1673 ATTR4F(0, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3])); 1674 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1675 ATTR4F(VBO_ATTRIB_GENERIC0 + index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3])); 1676 else 1677 ERROR(GL_INVALID_VALUE); 1678} 1679 1680static void GLAPIENTRY 1681TAG(VertexAttrib4Nsv)(GLuint index, const GLshort * v) 1682{ 1683 GET_CURRENT_CONTEXT(ctx); 1684 if (is_vertex_position(ctx, index)) 1685 ATTR4F(0, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3])); 1686 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1687 ATTR4F(VBO_ATTRIB_GENERIC0 + index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3])); 1688 else 1689 ERROR(GL_INVALID_VALUE); 1690} 1691 1692static void GLAPIENTRY 1693TAG(VertexAttrib4Niv)(GLuint index, const GLint * v) 1694{ 1695 GET_CURRENT_CONTEXT(ctx); 1696 if (is_vertex_position(ctx, index)) 1697 ATTR4F(0, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3])); 1698 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1699 ATTR4F(VBO_ATTRIB_GENERIC0 + index, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3])); 1700 else 1701 ERROR(GL_INVALID_VALUE); 1702} 1703 1704static void GLAPIENTRY 1705TAG(VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) 1706{ 1707 GET_CURRENT_CONTEXT(ctx); 1708 if (is_vertex_position(ctx, index)) 1709 ATTR4F(0, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y), UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w)); 1710 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1711 ATTR4F(VBO_ATTRIB_GENERIC0 + index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y), UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w)); 1712 else 1713 ERROR(GL_INVALID_VALUE); 1714} 1715 1716static void GLAPIENTRY 1717TAG(VertexAttrib4Nubv)(GLuint index, const GLubyte * v) 1718{ 1719 GET_CURRENT_CONTEXT(ctx); 1720 if (is_vertex_position(ctx, index)) 1721 ATTR4F(0, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 1722 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1723 ATTR4F(VBO_ATTRIB_GENERIC0 + index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 1724 else 1725 ERROR(GL_INVALID_VALUE); 1726} 1727 1728static void GLAPIENTRY 1729TAG(VertexAttrib4Nusv)(GLuint index, const GLushort * v) 1730{ 1731 GET_CURRENT_CONTEXT(ctx); 1732 if (is_vertex_position(ctx, index)) 1733 ATTR4F(0, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3])); 1734 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1735 ATTR4F(VBO_ATTRIB_GENERIC0 + index, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3])); 1736 else 1737 ERROR(GL_INVALID_VALUE); 1738} 1739 1740static void GLAPIENTRY 1741TAG(VertexAttrib4Nuiv)(GLuint index, const GLuint * v) 1742{ 1743 GET_CURRENT_CONTEXT(ctx); 1744 if (is_vertex_position(ctx, index)) 1745 ATTR4F(0, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3])); 1746 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1747 ATTR4F(VBO_ATTRIB_GENERIC0 + index, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3])); 1748 else 1749 ERROR(GL_INVALID_VALUE); 1750} 1751 1752/** 1753 * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes. 1754 * Note that attribute indexes do NOT alias conventional attributes. 1755 */ 1756 1757static void GLAPIENTRY 1758TAG(VertexAttribI1iv)(GLuint index, const GLint *v) 1759{ 1760 GET_CURRENT_CONTEXT(ctx); 1761 if (is_vertex_position(ctx, index)) 1762 ATTR1I(0, v[0]); 1763 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1764 ATTR1I(VBO_ATTRIB_GENERIC0 + index, v[0]); 1765 else 1766 ERROR(GL_INVALID_VALUE); 1767} 1768 1769static void GLAPIENTRY 1770TAG(VertexAttribI1uiv)(GLuint index, const GLuint *v) 1771{ 1772 GET_CURRENT_CONTEXT(ctx); 1773 if (is_vertex_position(ctx, index)) 1774 ATTR1UI(0, v[0]); 1775 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1776 ATTR1UI(VBO_ATTRIB_GENERIC0 + index, v[0]); 1777 else 1778 ERROR(GL_INVALID_VALUE); 1779} 1780 1781static void GLAPIENTRY 1782TAG(VertexAttribI4bv)(GLuint index, const GLbyte *v) 1783{ 1784 GET_CURRENT_CONTEXT(ctx); 1785 if (is_vertex_position(ctx, index)) 1786 ATTR4I(0, v[0], v[1], v[2], v[3]); 1787 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1788 ATTR4I(VBO_ATTRIB_GENERIC0 + index, v[0], v[1], v[2], v[3]); 1789 else 1790 ERROR(GL_INVALID_VALUE); 1791} 1792 1793static void GLAPIENTRY 1794TAG(VertexAttribI4sv)(GLuint index, const GLshort *v) 1795{ 1796 GET_CURRENT_CONTEXT(ctx); 1797 if (is_vertex_position(ctx, index)) 1798 ATTR4I(0, v[0], v[1], v[2], v[3]); 1799 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1800 ATTR4I(VBO_ATTRIB_GENERIC0 + index, v[0], v[1], v[2], v[3]); 1801 else 1802 ERROR(GL_INVALID_VALUE); 1803} 1804 1805static void GLAPIENTRY 1806TAG(VertexAttribI4ubv)(GLuint index, const GLubyte *v) 1807{ 1808 GET_CURRENT_CONTEXT(ctx); 1809 if (is_vertex_position(ctx, index)) 1810 ATTR4UI(0, v[0], v[1], v[2], v[3]); 1811 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1812 ATTR4UI(VBO_ATTRIB_GENERIC0 + index, v[0], v[1], v[2], v[3]); 1813 else 1814 ERROR(GL_INVALID_VALUE); 1815} 1816 1817static void GLAPIENTRY 1818TAG(VertexAttribI4usv)(GLuint index, const GLushort *v) 1819{ 1820 GET_CURRENT_CONTEXT(ctx); 1821 if (is_vertex_position(ctx, index)) 1822 ATTR4UI(0, v[0], v[1], v[2], v[3]); 1823 else if (index < MAX_VERTEX_GENERIC_ATTRIBS) 1824 ATTR4UI(VBO_ATTRIB_GENERIC0 + index, v[0], v[1], v[2], v[3]); 1825 else 1826 ERROR(GL_INVALID_VALUE); 1827} 1828 1829/* define this macro to exclude folllowing none-vertex functions */ 1830#ifndef HW_SELECT_MODE 1831 1832static void GLAPIENTRY 1833TAG(TexCoord1f)(GLfloat x) 1834{ 1835 GET_CURRENT_CONTEXT(ctx); 1836 ATTR1F(VBO_ATTRIB_TEX0, x); 1837} 1838 1839static void GLAPIENTRY 1840TAG(TexCoord1fv)(const GLfloat * v) 1841{ 1842 GET_CURRENT_CONTEXT(ctx); 1843 ATTR1FV(VBO_ATTRIB_TEX0, v); 1844} 1845 1846static void GLAPIENTRY 1847TAG(TexCoord2f)(GLfloat x, GLfloat y) 1848{ 1849 GET_CURRENT_CONTEXT(ctx); 1850 ATTR2F(VBO_ATTRIB_TEX0, x, y); 1851} 1852 1853static void GLAPIENTRY 1854TAG(TexCoord2fv)(const GLfloat * v) 1855{ 1856 GET_CURRENT_CONTEXT(ctx); 1857 ATTR2FV(VBO_ATTRIB_TEX0, v); 1858} 1859 1860static void GLAPIENTRY 1861TAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z) 1862{ 1863 GET_CURRENT_CONTEXT(ctx); 1864 ATTR3F(VBO_ATTRIB_TEX0, x, y, z); 1865} 1866 1867static void GLAPIENTRY 1868TAG(TexCoord3fv)(const GLfloat * v) 1869{ 1870 GET_CURRENT_CONTEXT(ctx); 1871 ATTR3FV(VBO_ATTRIB_TEX0, v); 1872} 1873 1874static void GLAPIENTRY 1875TAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 1876{ 1877 GET_CURRENT_CONTEXT(ctx); 1878 ATTR4F(VBO_ATTRIB_TEX0, x, y, z, w); 1879} 1880 1881static void GLAPIENTRY 1882TAG(TexCoord4fv)(const GLfloat * v) 1883{ 1884 GET_CURRENT_CONTEXT(ctx); 1885 ATTR4FV(VBO_ATTRIB_TEX0, v); 1886} 1887 1888 1889 1890static void GLAPIENTRY 1891TAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z) 1892{ 1893 GET_CURRENT_CONTEXT(ctx); 1894 ATTR3F(VBO_ATTRIB_NORMAL, x, y, z); 1895} 1896 1897static void GLAPIENTRY 1898TAG(Normal3fv)(const GLfloat * v) 1899{ 1900 GET_CURRENT_CONTEXT(ctx); 1901 ATTR3FV(VBO_ATTRIB_NORMAL, v); 1902} 1903 1904 1905 1906static void GLAPIENTRY 1907TAG(FogCoordfEXT)(GLfloat x) 1908{ 1909 GET_CURRENT_CONTEXT(ctx); 1910 ATTR1F(VBO_ATTRIB_FOG, x); 1911} 1912 1913 1914 1915static void GLAPIENTRY 1916TAG(FogCoordfvEXT)(const GLfloat * v) 1917{ 1918 GET_CURRENT_CONTEXT(ctx); 1919 ATTR1FV(VBO_ATTRIB_FOG, v); 1920} 1921 1922static void GLAPIENTRY 1923TAG(Color3f)(GLfloat x, GLfloat y, GLfloat z) 1924{ 1925 GET_CURRENT_CONTEXT(ctx); 1926 ATTR3F(VBO_ATTRIB_COLOR0, x, y, z); 1927} 1928 1929static void GLAPIENTRY 1930TAG(Color3fv)(const GLfloat * v) 1931{ 1932 GET_CURRENT_CONTEXT(ctx); 1933 ATTR3FV(VBO_ATTRIB_COLOR0, v); 1934} 1935 1936static void GLAPIENTRY 1937TAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 1938{ 1939 GET_CURRENT_CONTEXT(ctx); 1940 ATTR4F(VBO_ATTRIB_COLOR0, x, y, z, w); 1941} 1942 1943static void GLAPIENTRY 1944TAG(Color4fv)(const GLfloat * v) 1945{ 1946 GET_CURRENT_CONTEXT(ctx); 1947 ATTR4FV(VBO_ATTRIB_COLOR0, v); 1948} 1949 1950 1951 1952static void GLAPIENTRY 1953TAG(SecondaryColor3fEXT)(GLfloat x, GLfloat y, GLfloat z) 1954{ 1955 GET_CURRENT_CONTEXT(ctx); 1956 ATTR3F(VBO_ATTRIB_COLOR1, x, y, z); 1957} 1958 1959static void GLAPIENTRY 1960TAG(SecondaryColor3fvEXT)(const GLfloat * v) 1961{ 1962 GET_CURRENT_CONTEXT(ctx); 1963 ATTR3FV(VBO_ATTRIB_COLOR1, v); 1964} 1965 1966 1967 1968static void GLAPIENTRY 1969TAG(EdgeFlag)(GLboolean b) 1970{ 1971 GET_CURRENT_CONTEXT(ctx); 1972 ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b); 1973} 1974 1975 1976 1977static void GLAPIENTRY 1978TAG(Indexf)(GLfloat f) 1979{ 1980 GET_CURRENT_CONTEXT(ctx); 1981 ATTR1F(VBO_ATTRIB_COLOR_INDEX, f); 1982} 1983 1984static void GLAPIENTRY 1985TAG(Indexfv)(const GLfloat * f) 1986{ 1987 GET_CURRENT_CONTEXT(ctx); 1988 ATTR1FV(VBO_ATTRIB_COLOR_INDEX, f); 1989} 1990 1991 1992 1993static void GLAPIENTRY 1994TAG(MultiTexCoord1fARB)(GLenum target, GLfloat x) 1995{ 1996 GET_CURRENT_CONTEXT(ctx); 1997 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 1998 ATTR1F(attr, x); 1999} 2000 2001static void GLAPIENTRY 2002TAG(MultiTexCoord1fvARB)(GLenum target, const GLfloat * v) 2003{ 2004 GET_CURRENT_CONTEXT(ctx); 2005 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2006 ATTR1FV(attr, v); 2007} 2008 2009static void GLAPIENTRY 2010TAG(MultiTexCoord2fARB)(GLenum target, GLfloat x, GLfloat y) 2011{ 2012 GET_CURRENT_CONTEXT(ctx); 2013 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2014 ATTR2F(attr, x, y); 2015} 2016 2017static void GLAPIENTRY 2018TAG(MultiTexCoord2fvARB)(GLenum target, const GLfloat * v) 2019{ 2020 GET_CURRENT_CONTEXT(ctx); 2021 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2022 ATTR2FV(attr, v); 2023} 2024 2025static void GLAPIENTRY 2026TAG(MultiTexCoord3fARB)(GLenum target, GLfloat x, GLfloat y, GLfloat z) 2027{ 2028 GET_CURRENT_CONTEXT(ctx); 2029 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2030 ATTR3F(attr, x, y, z); 2031} 2032 2033static void GLAPIENTRY 2034TAG(MultiTexCoord3fvARB)(GLenum target, const GLfloat * v) 2035{ 2036 GET_CURRENT_CONTEXT(ctx); 2037 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2038 ATTR3FV(attr, v); 2039} 2040 2041static void GLAPIENTRY 2042TAG(MultiTexCoord4fARB)(GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 2043{ 2044 GET_CURRENT_CONTEXT(ctx); 2045 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2046 ATTR4F(attr, x, y, z, w); 2047} 2048 2049static void GLAPIENTRY 2050TAG(MultiTexCoord4fvARB)(GLenum target, const GLfloat * v) 2051{ 2052 GET_CURRENT_CONTEXT(ctx); 2053 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2054 ATTR4FV(attr, v); 2055} 2056 2057static void GLAPIENTRY 2058TAG(TexCoordP1ui)(GLenum type, GLuint coords) 2059{ 2060 GET_CURRENT_CONTEXT(ctx); 2061 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP1ui"); 2062 ATTR_UI(ctx, 1, type, 0, VBO_ATTRIB_TEX0, coords); 2063} 2064 2065static void GLAPIENTRY 2066TAG(TexCoordP1uiv)(GLenum type, const GLuint *coords) 2067{ 2068 GET_CURRENT_CONTEXT(ctx); 2069 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP1uiv"); 2070 ATTR_UI(ctx, 1, type, 0, VBO_ATTRIB_TEX0, coords[0]); 2071} 2072 2073static void GLAPIENTRY 2074TAG(TexCoordP2ui)(GLenum type, GLuint coords) 2075{ 2076 GET_CURRENT_CONTEXT(ctx); 2077 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP2ui"); 2078 ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_TEX0, coords); 2079} 2080 2081static void GLAPIENTRY 2082TAG(TexCoordP2uiv)(GLenum type, const GLuint *coords) 2083{ 2084 GET_CURRENT_CONTEXT(ctx); 2085 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP2uiv"); 2086 ATTR_UI(ctx, 2, type, 0, VBO_ATTRIB_TEX0, coords[0]); 2087} 2088 2089static void GLAPIENTRY 2090TAG(TexCoordP3ui)(GLenum type, GLuint coords) 2091{ 2092 GET_CURRENT_CONTEXT(ctx); 2093 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP3ui"); 2094 ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_TEX0, coords); 2095} 2096 2097static void GLAPIENTRY 2098TAG(TexCoordP3uiv)(GLenum type, const GLuint *coords) 2099{ 2100 GET_CURRENT_CONTEXT(ctx); 2101 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP3uiv"); 2102 ATTR_UI(ctx, 3, type, 0, VBO_ATTRIB_TEX0, coords[0]); 2103} 2104 2105static void GLAPIENTRY 2106TAG(TexCoordP4ui)(GLenum type, GLuint coords) 2107{ 2108 GET_CURRENT_CONTEXT(ctx); 2109 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP4ui"); 2110 ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_TEX0, coords); 2111} 2112 2113static void GLAPIENTRY 2114TAG(TexCoordP4uiv)(GLenum type, const GLuint *coords) 2115{ 2116 GET_CURRENT_CONTEXT(ctx); 2117 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glTexCoordP4uiv"); 2118 ATTR_UI(ctx, 4, type, 0, VBO_ATTRIB_TEX0, coords[0]); 2119} 2120 2121static void GLAPIENTRY 2122TAG(MultiTexCoordP1ui)(GLenum target, GLenum type, GLuint coords) 2123{ 2124 GET_CURRENT_CONTEXT(ctx); 2125 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2126 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP1ui"); 2127 ATTR_UI(ctx, 1, type, 0, attr, coords); 2128} 2129 2130static void GLAPIENTRY 2131TAG(MultiTexCoordP1uiv)(GLenum target, GLenum type, const GLuint *coords) 2132{ 2133 GET_CURRENT_CONTEXT(ctx); 2134 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2135 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP1uiv"); 2136 ATTR_UI(ctx, 1, type, 0, attr, coords[0]); 2137} 2138 2139static void GLAPIENTRY 2140TAG(MultiTexCoordP2ui)(GLenum target, GLenum type, GLuint coords) 2141{ 2142 GET_CURRENT_CONTEXT(ctx); 2143 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2144 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP2ui"); 2145 ATTR_UI(ctx, 2, type, 0, attr, coords); 2146} 2147 2148static void GLAPIENTRY 2149TAG(MultiTexCoordP2uiv)(GLenum target, GLenum type, const GLuint *coords) 2150{ 2151 GET_CURRENT_CONTEXT(ctx); 2152 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2153 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP2uiv"); 2154 ATTR_UI(ctx, 2, type, 0, attr, coords[0]); 2155} 2156 2157static void GLAPIENTRY 2158TAG(MultiTexCoordP3ui)(GLenum target, GLenum type, GLuint coords) 2159{ 2160 GET_CURRENT_CONTEXT(ctx); 2161 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2162 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP3ui"); 2163 ATTR_UI(ctx, 3, type, 0, attr, coords); 2164} 2165 2166static void GLAPIENTRY 2167TAG(MultiTexCoordP3uiv)(GLenum target, GLenum type, const GLuint *coords) 2168{ 2169 GET_CURRENT_CONTEXT(ctx); 2170 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2171 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP3uiv"); 2172 ATTR_UI(ctx, 3, type, 0, attr, coords[0]); 2173} 2174 2175static void GLAPIENTRY 2176TAG(MultiTexCoordP4ui)(GLenum target, GLenum type, GLuint coords) 2177{ 2178 GET_CURRENT_CONTEXT(ctx); 2179 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2180 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP4ui"); 2181 ATTR_UI(ctx, 4, type, 0, attr, coords); 2182} 2183 2184static void GLAPIENTRY 2185TAG(MultiTexCoordP4uiv)(GLenum target, GLenum type, const GLuint *coords) 2186{ 2187 GET_CURRENT_CONTEXT(ctx); 2188 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2189 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glMultiTexCoordP4uiv"); 2190 ATTR_UI(ctx, 4, type, 0, attr, coords[0]); 2191} 2192 2193static void GLAPIENTRY 2194TAG(NormalP3ui)(GLenum type, GLuint coords) 2195{ 2196 GET_CURRENT_CONTEXT(ctx); 2197 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glNormalP3ui"); 2198 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_NORMAL, coords); 2199} 2200 2201static void GLAPIENTRY 2202TAG(NormalP3uiv)(GLenum type, const GLuint *coords) 2203{ 2204 GET_CURRENT_CONTEXT(ctx); 2205 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glNormalP3uiv"); 2206 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_NORMAL, coords[0]); 2207} 2208 2209static void GLAPIENTRY 2210TAG(ColorP3ui)(GLenum type, GLuint color) 2211{ 2212 GET_CURRENT_CONTEXT(ctx); 2213 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP3ui"); 2214 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR0, color); 2215} 2216 2217static void GLAPIENTRY 2218TAG(ColorP3uiv)(GLenum type, const GLuint *color) 2219{ 2220 GET_CURRENT_CONTEXT(ctx); 2221 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP3uiv"); 2222 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR0, color[0]); 2223} 2224 2225static void GLAPIENTRY 2226TAG(ColorP4ui)(GLenum type, GLuint color) 2227{ 2228 GET_CURRENT_CONTEXT(ctx); 2229 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP4ui"); 2230 ATTR_UI(ctx, 4, type, 1, VBO_ATTRIB_COLOR0, color); 2231} 2232 2233static void GLAPIENTRY 2234TAG(ColorP4uiv)(GLenum type, const GLuint *color) 2235{ 2236 GET_CURRENT_CONTEXT(ctx); 2237 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glColorP4uiv"); 2238 ATTR_UI(ctx, 4, type, 1, VBO_ATTRIB_COLOR0, color[0]); 2239} 2240 2241static void GLAPIENTRY 2242TAG(SecondaryColorP3ui)(GLenum type, GLuint color) 2243{ 2244 GET_CURRENT_CONTEXT(ctx); 2245 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glSecondaryColorP3ui"); 2246 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR1, color); 2247} 2248 2249static void GLAPIENTRY 2250TAG(SecondaryColorP3uiv)(GLenum type, const GLuint *color) 2251{ 2252 GET_CURRENT_CONTEXT(ctx); 2253 ERROR_IF_NOT_PACKED_TYPE(ctx, type, "glSecondaryColorP3uiv"); 2254 ATTR_UI(ctx, 3, type, 1, VBO_ATTRIB_COLOR1, color[0]); 2255} 2256 2257static void GLAPIENTRY 2258TAG(Normal3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z) 2259{ 2260 GET_CURRENT_CONTEXT(ctx); 2261 ATTR3H(VBO_ATTRIB_NORMAL, x, y, z); 2262} 2263 2264static void GLAPIENTRY 2265TAG(Normal3hvNV)(const GLhalfNV * v) 2266{ 2267 GET_CURRENT_CONTEXT(ctx); 2268 ATTR3HV(VBO_ATTRIB_NORMAL, v); 2269} 2270 2271 2272 2273static void GLAPIENTRY 2274TAG(Color3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z) 2275{ 2276 GET_CURRENT_CONTEXT(ctx); 2277 ATTR3H(VBO_ATTRIB_COLOR0, x, y, z); 2278} 2279 2280static void GLAPIENTRY 2281TAG(Color3hvNV)(const GLhalfNV * v) 2282{ 2283 GET_CURRENT_CONTEXT(ctx); 2284 ATTR3HV(VBO_ATTRIB_COLOR0, v); 2285} 2286 2287static void GLAPIENTRY 2288TAG(Color4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) 2289{ 2290 GET_CURRENT_CONTEXT(ctx); 2291 ATTR4H(VBO_ATTRIB_COLOR0, x, y, z, w); 2292} 2293 2294static void GLAPIENTRY 2295TAG(Color4hvNV)(const GLhalfNV * v) 2296{ 2297 GET_CURRENT_CONTEXT(ctx); 2298 ATTR4HV(VBO_ATTRIB_COLOR0, v); 2299} 2300 2301 2302 2303static void GLAPIENTRY 2304TAG(TexCoord1hNV)(GLhalfNV x) 2305{ 2306 GET_CURRENT_CONTEXT(ctx); 2307 ATTR1H(VBO_ATTRIB_TEX0, x); 2308} 2309 2310static void GLAPIENTRY 2311TAG(TexCoord1hvNV)(const GLhalfNV * v) 2312{ 2313 GET_CURRENT_CONTEXT(ctx); 2314 ATTR1HV(VBO_ATTRIB_TEX0, v); 2315} 2316 2317static void GLAPIENTRY 2318TAG(TexCoord2hNV)(GLhalfNV x, GLhalfNV y) 2319{ 2320 GET_CURRENT_CONTEXT(ctx); 2321 ATTR2H(VBO_ATTRIB_TEX0, x, y); 2322} 2323 2324static void GLAPIENTRY 2325TAG(TexCoord2hvNV)(const GLhalfNV * v) 2326{ 2327 GET_CURRENT_CONTEXT(ctx); 2328 ATTR2HV(VBO_ATTRIB_TEX0, v); 2329} 2330 2331static void GLAPIENTRY 2332TAG(TexCoord3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z) 2333{ 2334 GET_CURRENT_CONTEXT(ctx); 2335 ATTR3H(VBO_ATTRIB_TEX0, x, y, z); 2336} 2337 2338static void GLAPIENTRY 2339TAG(TexCoord3hvNV)(const GLhalfNV * v) 2340{ 2341 GET_CURRENT_CONTEXT(ctx); 2342 ATTR3HV(VBO_ATTRIB_TEX0, v); 2343} 2344 2345static void GLAPIENTRY 2346TAG(TexCoord4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) 2347{ 2348 GET_CURRENT_CONTEXT(ctx); 2349 ATTR4H(VBO_ATTRIB_TEX0, x, y, z, w); 2350} 2351 2352static void GLAPIENTRY 2353TAG(TexCoord4hvNV)(const GLhalfNV * v) 2354{ 2355 GET_CURRENT_CONTEXT(ctx); 2356 ATTR4HV(VBO_ATTRIB_TEX0, v); 2357} 2358 2359 2360 2361static void GLAPIENTRY 2362TAG(MultiTexCoord1hNV)(GLenum target, GLhalfNV x) 2363{ 2364 GET_CURRENT_CONTEXT(ctx); 2365 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2366 ATTR1H(attr, x); 2367} 2368 2369static void GLAPIENTRY 2370TAG(MultiTexCoord1hvNV)(GLenum target, const GLhalfNV * v) 2371{ 2372 GET_CURRENT_CONTEXT(ctx); 2373 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2374 ATTR1HV(attr, v); 2375} 2376 2377static void GLAPIENTRY 2378TAG(MultiTexCoord2hNV)(GLenum target, GLhalfNV x, GLhalfNV y) 2379{ 2380 GET_CURRENT_CONTEXT(ctx); 2381 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2382 ATTR2H(attr, x, y); 2383} 2384 2385static void GLAPIENTRY 2386TAG(MultiTexCoord2hvNV)(GLenum target, const GLhalfNV * v) 2387{ 2388 GET_CURRENT_CONTEXT(ctx); 2389 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2390 ATTR2HV(attr, v); 2391} 2392 2393static void GLAPIENTRY 2394TAG(MultiTexCoord3hNV)(GLenum target, GLhalfNV x, GLhalfNV y, GLhalfNV z) 2395{ 2396 GET_CURRENT_CONTEXT(ctx); 2397 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2398 ATTR3H(attr, x, y, z); 2399} 2400 2401static void GLAPIENTRY 2402TAG(MultiTexCoord3hvNV)(GLenum target, const GLhalfNV * v) 2403{ 2404 GET_CURRENT_CONTEXT(ctx); 2405 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2406 ATTR3HV(attr, v); 2407} 2408 2409static void GLAPIENTRY 2410TAG(MultiTexCoord4hNV)(GLenum target, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) 2411{ 2412 GET_CURRENT_CONTEXT(ctx); 2413 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2414 ATTR4H(attr, x, y, z, w); 2415} 2416 2417static void GLAPIENTRY 2418TAG(MultiTexCoord4hvNV)(GLenum target, const GLhalfNV * v) 2419{ 2420 GET_CURRENT_CONTEXT(ctx); 2421 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2422 ATTR4HV(attr, v); 2423} 2424 2425 2426static void GLAPIENTRY 2427TAG(FogCoordhNV)(GLhalf x) 2428{ 2429 GET_CURRENT_CONTEXT(ctx); 2430 ATTR1H(VBO_ATTRIB_FOG, x); 2431} 2432 2433static void GLAPIENTRY 2434TAG(FogCoordhvNV)(const GLhalf * v) 2435{ 2436 GET_CURRENT_CONTEXT(ctx); 2437 ATTR1HV(VBO_ATTRIB_FOG, v); 2438} 2439 2440 2441 2442static void GLAPIENTRY 2443TAG(SecondaryColor3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z) 2444{ 2445 GET_CURRENT_CONTEXT(ctx); 2446 ATTR3H(VBO_ATTRIB_COLOR1, x, y, z); 2447} 2448 2449static void GLAPIENTRY 2450TAG(SecondaryColor3hvNV)(const GLhalfNV * v) 2451{ 2452 GET_CURRENT_CONTEXT(ctx); 2453 ATTR3HV(VBO_ATTRIB_COLOR1, v); 2454} 2455 2456 2457static void GLAPIENTRY 2458TAG(Color3b)(GLbyte red, GLbyte green, GLbyte blue) 2459{ 2460 GET_CURRENT_CONTEXT(ctx); 2461 ATTR4F(VBO_ATTRIB_COLOR0, BYTE_TO_FLOAT(red), 2462 BYTE_TO_FLOAT(green), 2463 BYTE_TO_FLOAT(blue), 2464 1.0); 2465} 2466 2467static void GLAPIENTRY 2468TAG(Color3d)(GLdouble red, GLdouble green, GLdouble blue) 2469{ 2470 GET_CURRENT_CONTEXT(ctx); 2471 ATTR4F(VBO_ATTRIB_COLOR0, (GLfloat) red, (GLfloat) green, (GLfloat) blue, 1.0); 2472} 2473 2474static void GLAPIENTRY 2475TAG(Color3i)(GLint red, GLint green, GLint blue) 2476{ 2477 GET_CURRENT_CONTEXT(ctx); 2478 ATTR4F(VBO_ATTRIB_COLOR0, INT_TO_FLOAT(red), INT_TO_FLOAT(green), 2479 INT_TO_FLOAT(blue), 1.0); 2480} 2481 2482static void GLAPIENTRY 2483TAG(Color3s)(GLshort red, GLshort green, GLshort blue) 2484{ 2485 GET_CURRENT_CONTEXT(ctx); 2486 ATTR4F(VBO_ATTRIB_COLOR0, SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green), 2487 SHORT_TO_FLOAT(blue), 1.0); 2488} 2489 2490static void GLAPIENTRY 2491TAG(Color3ui)(GLuint red, GLuint green, GLuint blue) 2492{ 2493 GET_CURRENT_CONTEXT(ctx); 2494 ATTR4F(VBO_ATTRIB_COLOR0, UINT_TO_FLOAT(red), UINT_TO_FLOAT(green), 2495 UINT_TO_FLOAT(blue), 1.0); 2496} 2497 2498static void GLAPIENTRY 2499TAG(Color3us)(GLushort red, GLushort green, GLushort blue) 2500{ 2501 GET_CURRENT_CONTEXT(ctx); 2502 ATTR4F(VBO_ATTRIB_COLOR0, USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green), 2503 USHORT_TO_FLOAT(blue), 1.0); 2504} 2505 2506static void GLAPIENTRY 2507TAG(Color3ub)(GLubyte red, GLubyte green, GLubyte blue) 2508{ 2509 GET_CURRENT_CONTEXT(ctx); 2510 ATTR4F(VBO_ATTRIB_COLOR0, UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green), 2511 UBYTE_TO_FLOAT(blue), 1.0); 2512} 2513 2514 2515static void GLAPIENTRY 2516TAG(Color3bv)(const GLbyte *v) 2517{ 2518 GET_CURRENT_CONTEXT(ctx); 2519 ATTR4F(VBO_ATTRIB_COLOR0, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), 2520 BYTE_TO_FLOAT(v[2]), 1.0); 2521} 2522 2523static void GLAPIENTRY 2524TAG(Color3dv)(const GLdouble *v) 2525{ 2526 GET_CURRENT_CONTEXT(ctx); 2527 ATTR4F(VBO_ATTRIB_COLOR0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0); 2528} 2529 2530static void GLAPIENTRY 2531TAG(Color3iv)(const GLint *v) 2532{ 2533 GET_CURRENT_CONTEXT(ctx); 2534 ATTR4F(VBO_ATTRIB_COLOR0, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), 2535 INT_TO_FLOAT(v[2]), 1.0); 2536} 2537 2538static void GLAPIENTRY 2539TAG(Color3sv)(const GLshort *v) 2540{ 2541 GET_CURRENT_CONTEXT(ctx); 2542 ATTR4F(VBO_ATTRIB_COLOR0, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), 2543 SHORT_TO_FLOAT(v[2]), 1.0); 2544} 2545 2546static void GLAPIENTRY 2547TAG(Color3uiv)(const GLuint *v) 2548{ 2549 GET_CURRENT_CONTEXT(ctx); 2550 ATTR4F(VBO_ATTRIB_COLOR0, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), 2551 UINT_TO_FLOAT(v[2]), 1.0); 2552} 2553 2554static void GLAPIENTRY 2555TAG(Color3usv)(const GLushort *v) 2556{ 2557 GET_CURRENT_CONTEXT(ctx); 2558 ATTR4F(VBO_ATTRIB_COLOR0, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), 2559 USHORT_TO_FLOAT(v[2]), 1.0); 2560} 2561 2562static void GLAPIENTRY 2563TAG(Color3ubv)(const GLubyte *v) 2564{ 2565 GET_CURRENT_CONTEXT(ctx); 2566 ATTR4F(VBO_ATTRIB_COLOR0, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 2567 UBYTE_TO_FLOAT(v[2]), 1.0); 2568} 2569 2570 2571static void GLAPIENTRY 2572TAG(Color4b)(GLbyte red, GLbyte green, GLbyte blue, 2573 GLbyte alpha) 2574{ 2575 GET_CURRENT_CONTEXT(ctx); 2576 ATTR4F(VBO_ATTRIB_COLOR0, BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green), 2577 BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha)); 2578} 2579 2580static void GLAPIENTRY 2581TAG(Color4d)(GLdouble red, GLdouble green, GLdouble blue, 2582 GLdouble alpha) 2583{ 2584 GET_CURRENT_CONTEXT(ctx); 2585 ATTR4F(VBO_ATTRIB_COLOR0, (GLfloat) red, (GLfloat) green, (GLfloat) blue, (GLfloat) alpha); 2586} 2587 2588static void GLAPIENTRY 2589TAG(Color4i)(GLint red, GLint green, GLint blue, GLint alpha) 2590{ 2591 GET_CURRENT_CONTEXT(ctx); 2592 ATTR4F(VBO_ATTRIB_COLOR0, INT_TO_FLOAT(red), INT_TO_FLOAT(green), 2593 INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha)); 2594} 2595 2596static void GLAPIENTRY 2597TAG(Color4s)(GLshort red, GLshort green, GLshort blue, 2598 GLshort alpha) 2599{ 2600 GET_CURRENT_CONTEXT(ctx); 2601 ATTR4F(VBO_ATTRIB_COLOR0, SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green), 2602 SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha)); 2603} 2604 2605static void GLAPIENTRY 2606TAG(Color4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha) 2607{ 2608 GET_CURRENT_CONTEXT(ctx); 2609 ATTR4F(VBO_ATTRIB_COLOR0, UINT_TO_FLOAT(red), UINT_TO_FLOAT(green), 2610 UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha)); 2611} 2612 2613static void GLAPIENTRY 2614TAG(Color4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha) 2615{ 2616 GET_CURRENT_CONTEXT(ctx); 2617 ATTR4F(VBO_ATTRIB_COLOR0, USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green), 2618 USHORT_TO_FLOAT(blue), USHORT_TO_FLOAT(alpha)); 2619} 2620 2621static void GLAPIENTRY 2622TAG(Color4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) 2623{ 2624 GET_CURRENT_CONTEXT(ctx); 2625 ATTR4F(VBO_ATTRIB_COLOR0, UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green), 2626 UBYTE_TO_FLOAT(blue), UBYTE_TO_FLOAT(alpha)); 2627} 2628 2629 2630static void GLAPIENTRY 2631TAG(Color4iv)(const GLint *v) 2632{ 2633 GET_CURRENT_CONTEXT(ctx); 2634 ATTR4F(VBO_ATTRIB_COLOR0, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), 2635 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3])); 2636} 2637 2638 2639static void GLAPIENTRY 2640TAG(Color4bv)(const GLbyte *v) 2641{ 2642 GET_CURRENT_CONTEXT(ctx); 2643 ATTR4F(VBO_ATTRIB_COLOR0, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), 2644 BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3])); 2645} 2646 2647static void GLAPIENTRY 2648TAG(Color4dv)(const GLdouble *v) 2649{ 2650 GET_CURRENT_CONTEXT(ctx); 2651 ATTR4F(VBO_ATTRIB_COLOR0, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 2652} 2653 2654 2655static void GLAPIENTRY 2656TAG(Color4sv)(const GLshort *v) 2657{ 2658 GET_CURRENT_CONTEXT(ctx); 2659 ATTR4F(VBO_ATTRIB_COLOR0, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), 2660 SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3])); 2661} 2662 2663 2664static void GLAPIENTRY 2665TAG(Color4uiv)(const GLuint *v) 2666{ 2667 GET_CURRENT_CONTEXT(ctx); 2668 ATTR4F(VBO_ATTRIB_COLOR0, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), 2669 UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3])); 2670} 2671 2672static void GLAPIENTRY 2673TAG(Color4usv)(const GLushort *v) 2674{ 2675 GET_CURRENT_CONTEXT(ctx); 2676 ATTR4F(VBO_ATTRIB_COLOR0, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), 2677 USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3])); 2678} 2679 2680static void GLAPIENTRY 2681TAG(Color4ubv)(const GLubyte *v) 2682{ 2683 GET_CURRENT_CONTEXT(ctx); 2684 ATTR4F(VBO_ATTRIB_COLOR0, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 2685 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 2686} 2687 2688 2689static void GLAPIENTRY 2690TAG(FogCoordd)(GLdouble d) 2691{ 2692 GET_CURRENT_CONTEXT(ctx); 2693 ATTR1F(VBO_ATTRIB_FOG, (GLfloat) d); 2694} 2695 2696static void GLAPIENTRY 2697TAG(FogCoorddv)(const GLdouble *v) 2698{ 2699 GET_CURRENT_CONTEXT(ctx); 2700 ATTR1F(VBO_ATTRIB_FOG, (GLfloat) *v); 2701} 2702 2703 2704static void GLAPIENTRY 2705TAG(Indexd)(GLdouble c) 2706{ 2707 GET_CURRENT_CONTEXT(ctx); 2708 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) c); 2709} 2710 2711static void GLAPIENTRY 2712TAG(Indexi)(GLint c) 2713{ 2714 GET_CURRENT_CONTEXT(ctx); 2715 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) c); 2716} 2717 2718static void GLAPIENTRY 2719TAG(Indexs)(GLshort c) 2720{ 2721 GET_CURRENT_CONTEXT(ctx); 2722 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) c); 2723} 2724 2725static void GLAPIENTRY 2726TAG(Indexub)(GLubyte c) 2727{ 2728 GET_CURRENT_CONTEXT(ctx); 2729 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) c); 2730} 2731 2732static void GLAPIENTRY 2733TAG(Indexdv)(const GLdouble *c) 2734{ 2735 GET_CURRENT_CONTEXT(ctx); 2736 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) *c); 2737} 2738 2739static void GLAPIENTRY 2740TAG(Indexiv)(const GLint *c) 2741{ 2742 GET_CURRENT_CONTEXT(ctx); 2743 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) *c); 2744} 2745 2746static void GLAPIENTRY 2747TAG(Indexsv)(const GLshort *c) 2748{ 2749 GET_CURRENT_CONTEXT(ctx); 2750 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) *c); 2751} 2752 2753static void GLAPIENTRY 2754TAG(Indexubv)(const GLubyte *c) 2755{ 2756 GET_CURRENT_CONTEXT(ctx); 2757 ATTR1F(VBO_ATTRIB_COLOR_INDEX, (GLfloat) *c); 2758} 2759 2760 2761static void GLAPIENTRY 2762TAG(EdgeFlagv)(const GLboolean *flag) 2763{ 2764 GET_CURRENT_CONTEXT(ctx); 2765 ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat)*flag); 2766} 2767 2768 2769static void GLAPIENTRY 2770TAG(Normal3b)(GLbyte nx, GLbyte ny, GLbyte nz) 2771{ 2772 GET_CURRENT_CONTEXT(ctx); 2773 ATTR3F(VBO_ATTRIB_NORMAL, BYTE_TO_FLOAT(nx), BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz)); 2774} 2775 2776static void GLAPIENTRY 2777TAG(Normal3d)(GLdouble nx, GLdouble ny, GLdouble nz) 2778{ 2779 GET_CURRENT_CONTEXT(ctx); 2780 ATTR3F(VBO_ATTRIB_NORMAL, (GLfloat) nx, (GLfloat) ny, (GLfloat) nz); 2781} 2782 2783static void GLAPIENTRY 2784TAG(Normal3i)(GLint nx, GLint ny, GLint nz) 2785{ 2786 GET_CURRENT_CONTEXT(ctx); 2787 ATTR3F(VBO_ATTRIB_NORMAL, INT_TO_FLOAT(nx), INT_TO_FLOAT(ny), INT_TO_FLOAT(nz)); 2788} 2789 2790static void GLAPIENTRY 2791TAG(Normal3s)(GLshort nx, GLshort ny, GLshort nz) 2792{ 2793 GET_CURRENT_CONTEXT(ctx); 2794 ATTR3F(VBO_ATTRIB_NORMAL, SHORT_TO_FLOAT(nx), SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz)); 2795} 2796 2797static void GLAPIENTRY 2798TAG(Normal3bv)(const GLbyte *v) 2799{ 2800 GET_CURRENT_CONTEXT(ctx); 2801 ATTR3F(VBO_ATTRIB_NORMAL, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2])); 2802} 2803 2804static void GLAPIENTRY 2805TAG(Normal3dv)(const GLdouble *v) 2806{ 2807 GET_CURRENT_CONTEXT(ctx); 2808 ATTR3F(VBO_ATTRIB_NORMAL, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 2809} 2810 2811static void GLAPIENTRY 2812TAG(Normal3iv)(const GLint *v) 2813{ 2814 GET_CURRENT_CONTEXT(ctx); 2815 ATTR3F(VBO_ATTRIB_NORMAL, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2])); 2816} 2817 2818static void GLAPIENTRY 2819TAG(Normal3sv)(const GLshort *v) 2820{ 2821 GET_CURRENT_CONTEXT(ctx); 2822 ATTR3F(VBO_ATTRIB_NORMAL, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2])); 2823} 2824 2825static void GLAPIENTRY 2826TAG(TexCoord1d)(GLdouble s) 2827{ 2828 GET_CURRENT_CONTEXT(ctx); 2829 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) s); 2830} 2831 2832static void GLAPIENTRY 2833TAG(TexCoord1i)(GLint s) 2834{ 2835 GET_CURRENT_CONTEXT(ctx); 2836 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) s); 2837} 2838 2839static void GLAPIENTRY 2840TAG(TexCoord1s)(GLshort s) 2841{ 2842 GET_CURRENT_CONTEXT(ctx); 2843 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) s); 2844} 2845 2846static void GLAPIENTRY 2847TAG(TexCoord2d)(GLdouble s, GLdouble t) 2848{ 2849 GET_CURRENT_CONTEXT(ctx); 2850 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t); 2851} 2852 2853static void GLAPIENTRY 2854TAG(TexCoord2s)(GLshort s, GLshort t) 2855{ 2856 GET_CURRENT_CONTEXT(ctx); 2857 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t); 2858} 2859 2860static void GLAPIENTRY 2861TAG(TexCoord2i)(GLint s, GLint t) 2862{ 2863 GET_CURRENT_CONTEXT(ctx); 2864 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t); 2865} 2866 2867static void GLAPIENTRY 2868TAG(TexCoord3d)(GLdouble s, GLdouble t, GLdouble r) 2869{ 2870 GET_CURRENT_CONTEXT(ctx); 2871 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r); 2872} 2873 2874static void GLAPIENTRY 2875TAG(TexCoord3i)(GLint s, GLint t, GLint r) 2876{ 2877 GET_CURRENT_CONTEXT(ctx); 2878 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r); 2879} 2880 2881static void GLAPIENTRY 2882TAG(TexCoord3s)(GLshort s, GLshort t, GLshort r) 2883{ 2884 GET_CURRENT_CONTEXT(ctx); 2885 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r); 2886} 2887 2888static void GLAPIENTRY 2889TAG(TexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q) 2890{ 2891 GET_CURRENT_CONTEXT(ctx); 2892 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 2893} 2894 2895static void GLAPIENTRY 2896TAG(TexCoord4i)(GLint s, GLint t, GLint r, GLint q) 2897{ 2898 GET_CURRENT_CONTEXT(ctx); 2899 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 2900} 2901 2902static void GLAPIENTRY 2903TAG(TexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q) 2904{ 2905 GET_CURRENT_CONTEXT(ctx); 2906 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 2907} 2908 2909static void GLAPIENTRY 2910TAG(TexCoord1dv)(const GLdouble *v) 2911{ 2912 GET_CURRENT_CONTEXT(ctx); 2913 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) v[0]); 2914} 2915 2916static void GLAPIENTRY 2917TAG(TexCoord1iv)(const GLint *v) 2918{ 2919 GET_CURRENT_CONTEXT(ctx); 2920 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) v[0]); 2921} 2922 2923static void GLAPIENTRY 2924TAG(TexCoord1sv)(const GLshort *v) 2925{ 2926 GET_CURRENT_CONTEXT(ctx); 2927 ATTR1F(VBO_ATTRIB_TEX0, (GLfloat) v[0]); 2928} 2929 2930static void GLAPIENTRY 2931TAG(TexCoord2dv)(const GLdouble *v) 2932{ 2933 GET_CURRENT_CONTEXT(ctx); 2934 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1]); 2935} 2936 2937static void GLAPIENTRY 2938TAG(TexCoord2iv)(const GLint *v) 2939{ 2940 GET_CURRENT_CONTEXT(ctx); 2941 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1]); 2942} 2943 2944static void GLAPIENTRY 2945TAG(TexCoord2sv)(const GLshort *v) 2946{ 2947 GET_CURRENT_CONTEXT(ctx); 2948 ATTR2F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1]); 2949} 2950 2951static void GLAPIENTRY 2952TAG(TexCoord3dv)(const GLdouble *v) 2953{ 2954 GET_CURRENT_CONTEXT(ctx); 2955 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 2956} 2957 2958static void GLAPIENTRY 2959TAG(TexCoord3iv)(const GLint *v) 2960{ 2961 GET_CURRENT_CONTEXT(ctx); 2962 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 2963} 2964 2965static void GLAPIENTRY 2966TAG(TexCoord3sv)(const GLshort *v) 2967{ 2968 GET_CURRENT_CONTEXT(ctx); 2969 ATTR3F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 2970} 2971 2972static void GLAPIENTRY 2973TAG(TexCoord4dv)(const GLdouble *v) 2974{ 2975 GET_CURRENT_CONTEXT(ctx); 2976 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 2977} 2978 2979static void GLAPIENTRY 2980TAG(TexCoord4iv)(const GLint *v) 2981{ 2982 GET_CURRENT_CONTEXT(ctx); 2983 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 2984} 2985 2986static void GLAPIENTRY 2987TAG(TexCoord4sv)(const GLshort *v) 2988{ 2989 GET_CURRENT_CONTEXT(ctx); 2990 ATTR4F(VBO_ATTRIB_TEX0, (GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 2991} 2992 2993static void GLAPIENTRY 2994TAG(MultiTexCoord1d)(GLenum target, GLdouble s) 2995{ 2996 GET_CURRENT_CONTEXT(ctx); 2997 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 2998 ATTR1F(attr, (GLfloat) s); 2999} 3000 3001static void GLAPIENTRY 3002TAG(MultiTexCoord1dv)(GLenum target, const GLdouble *v) 3003{ 3004 GET_CURRENT_CONTEXT(ctx); 3005 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3006 ATTR1F(attr, (GLfloat) v[0]); 3007} 3008 3009static void GLAPIENTRY 3010TAG(MultiTexCoord1i)(GLenum target, GLint s) 3011{ 3012 GET_CURRENT_CONTEXT(ctx); 3013 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3014 ATTR1F(attr, (GLfloat) s); 3015} 3016 3017static void GLAPIENTRY 3018TAG(MultiTexCoord1iv)(GLenum target, const GLint *v) 3019{ 3020 GET_CURRENT_CONTEXT(ctx); 3021 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3022 ATTR1F(attr, (GLfloat) v[0]); 3023} 3024 3025static void GLAPIENTRY 3026TAG(MultiTexCoord1s)(GLenum target, GLshort s) 3027{ 3028 GET_CURRENT_CONTEXT(ctx); 3029 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3030 ATTR1F(attr, (GLfloat) s); 3031} 3032 3033static void GLAPIENTRY 3034TAG(MultiTexCoord1sv)(GLenum target, const GLshort *v) 3035{ 3036 GET_CURRENT_CONTEXT(ctx); 3037 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3038 ATTR1F(attr, (GLfloat) v[0]); 3039} 3040 3041static void GLAPIENTRY 3042TAG(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t) 3043{ 3044 GET_CURRENT_CONTEXT(ctx); 3045 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3046 ATTR2F(attr, (GLfloat) s, (GLfloat) t); 3047} 3048 3049static void GLAPIENTRY 3050TAG(MultiTexCoord2dv)(GLenum target, const GLdouble *v) 3051{ 3052 GET_CURRENT_CONTEXT(ctx); 3053 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3054 ATTR2F(attr, (GLfloat) v[0], (GLfloat) v[1]); 3055} 3056 3057static void GLAPIENTRY 3058TAG(MultiTexCoord2i)(GLenum target, GLint s, GLint t) 3059{ 3060 GET_CURRENT_CONTEXT(ctx); 3061 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3062 ATTR2F(attr, (GLfloat) s, (GLfloat) t); 3063} 3064 3065static void GLAPIENTRY 3066TAG(MultiTexCoord2iv)(GLenum target, const GLint *v) 3067{ 3068 GET_CURRENT_CONTEXT(ctx); 3069 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3070 ATTR2F(attr, (GLfloat) v[0], (GLfloat) v[1]); 3071} 3072 3073static void GLAPIENTRY 3074TAG(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t) 3075{ 3076 GET_CURRENT_CONTEXT(ctx); 3077 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3078 ATTR2F(attr, (GLfloat) s, (GLfloat) t); 3079} 3080 3081static void GLAPIENTRY 3082TAG(MultiTexCoord2sv)(GLenum target, const GLshort *v) 3083{ 3084 GET_CURRENT_CONTEXT(ctx); 3085 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3086 ATTR2F(attr, (GLfloat) v[0], (GLfloat) v[1]); 3087} 3088 3089static void GLAPIENTRY 3090TAG(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r) 3091{ 3092 GET_CURRENT_CONTEXT(ctx); 3093 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3094 ATTR3F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r); 3095} 3096 3097static void GLAPIENTRY 3098TAG(MultiTexCoord3dv)(GLenum target, const GLdouble *v) 3099{ 3100 GET_CURRENT_CONTEXT(ctx); 3101 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3102 ATTR3F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 3103} 3104 3105static void GLAPIENTRY 3106TAG(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r) 3107{ 3108 GET_CURRENT_CONTEXT(ctx); 3109 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3110 ATTR3F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r); 3111} 3112 3113static void GLAPIENTRY 3114TAG(MultiTexCoord3iv)(GLenum target, const GLint *v) 3115{ 3116 GET_CURRENT_CONTEXT(ctx); 3117 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3118 ATTR3F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 3119} 3120 3121static void GLAPIENTRY 3122TAG(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r) 3123{ 3124 GET_CURRENT_CONTEXT(ctx); 3125 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3126 ATTR3F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r); 3127} 3128 3129static void GLAPIENTRY 3130TAG(MultiTexCoord3sv)(GLenum target, const GLshort *v) 3131{ 3132 GET_CURRENT_CONTEXT(ctx); 3133 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3134 ATTR3F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 3135} 3136 3137static void GLAPIENTRY 3138TAG(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) 3139{ 3140 GET_CURRENT_CONTEXT(ctx); 3141 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3142 ATTR4F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r, (GLfloat) q); 3143} 3144 3145static void GLAPIENTRY 3146TAG(MultiTexCoord4dv)(GLenum target, const GLdouble *v) 3147{ 3148 GET_CURRENT_CONTEXT(ctx); 3149 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3150 ATTR4F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 3151} 3152 3153static void GLAPIENTRY 3154TAG(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q) 3155{ 3156 GET_CURRENT_CONTEXT(ctx); 3157 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3158 ATTR4F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r, (GLfloat) q); 3159} 3160 3161static void GLAPIENTRY 3162TAG(MultiTexCoord4iv)(GLenum target, const GLint *v) 3163{ 3164 GET_CURRENT_CONTEXT(ctx); 3165 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3166 ATTR4F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 3167} 3168 3169static void GLAPIENTRY 3170TAG(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) 3171{ 3172 GET_CURRENT_CONTEXT(ctx); 3173 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3174 ATTR4F(attr, (GLfloat) s, (GLfloat) t, (GLfloat) r, (GLfloat) q); 3175} 3176 3177static void GLAPIENTRY 3178TAG(MultiTexCoord4sv)(GLenum target, const GLshort *v) 3179{ 3180 GET_CURRENT_CONTEXT(ctx); 3181 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0; 3182 ATTR4F(attr, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 3183} 3184 3185 3186static void GLAPIENTRY 3187TAG(EvalCoord2dv)(const GLdouble *u) 3188{ 3189 TAG(EvalCoord2f)((GLfloat) u[0], (GLfloat) u[1]); 3190} 3191 3192static void GLAPIENTRY 3193TAG(EvalCoord2d)(GLdouble u, GLdouble v) 3194{ 3195 TAG(EvalCoord2f)((GLfloat) u, (GLfloat) v); 3196} 3197 3198static void GLAPIENTRY 3199TAG(EvalCoord1dv)(const GLdouble *u) 3200{ 3201 TAG(EvalCoord1f)((GLfloat) *u); 3202} 3203 3204static void GLAPIENTRY 3205TAG(EvalCoord1d)(GLdouble u) 3206{ 3207 TAG(EvalCoord1f)((GLfloat) u); 3208} 3209 3210 3211static void GLAPIENTRY 3212TAG(Materialf)(GLenum face, GLenum pname, GLfloat param) 3213{ 3214 GLfloat fparam[4]; 3215 fparam[0] = param; 3216 TAG(Materialfv)(face, pname, fparam); 3217} 3218 3219static void GLAPIENTRY 3220TAG(Materiali)(GLenum face, GLenum pname, GLint param) 3221{ 3222 GLfloat p[4]; 3223 p[0] = (GLfloat) param; 3224 TAG(Materialfv)(face, pname, p); 3225} 3226 3227static void GLAPIENTRY 3228TAG(Materialiv)(GLenum face, GLenum pname, const GLint *params) 3229{ 3230 GLfloat fparam[4]; 3231 switch (pname) { 3232 case GL_AMBIENT: 3233 case GL_DIFFUSE: 3234 case GL_SPECULAR: 3235 case GL_EMISSION: 3236 case GL_AMBIENT_AND_DIFFUSE: 3237 fparam[0] = INT_TO_FLOAT(params[0]); 3238 fparam[1] = INT_TO_FLOAT(params[1]); 3239 fparam[2] = INT_TO_FLOAT(params[2]); 3240 fparam[3] = INT_TO_FLOAT(params[3]); 3241 break; 3242 case GL_SHININESS: 3243 fparam[0] = (GLfloat) params[0]; 3244 break; 3245 case GL_COLOR_INDEXES: 3246 fparam[0] = (GLfloat) params[0]; 3247 fparam[1] = (GLfloat) params[1]; 3248 fparam[2] = (GLfloat) params[2]; 3249 break; 3250 default: 3251 ; 3252 } 3253 TAG(Materialfv)(face, pname, fparam); 3254} 3255 3256 3257static void GLAPIENTRY 3258TAG(SecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue) 3259{ 3260 GET_CURRENT_CONTEXT(ctx); 3261 ATTR3F(VBO_ATTRIB_COLOR1, BYTE_TO_FLOAT(red), 3262 BYTE_TO_FLOAT(green), 3263 BYTE_TO_FLOAT(blue)); 3264} 3265 3266static void GLAPIENTRY 3267TAG(SecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue) 3268{ 3269 GET_CURRENT_CONTEXT(ctx); 3270 ATTR3F(VBO_ATTRIB_COLOR1, (GLfloat) red, (GLfloat) green, (GLfloat) blue); 3271} 3272 3273static void GLAPIENTRY 3274TAG(SecondaryColor3i)(GLint red, GLint green, GLint blue) 3275{ 3276 GET_CURRENT_CONTEXT(ctx); 3277 ATTR3F(VBO_ATTRIB_COLOR1, INT_TO_FLOAT(red), 3278 INT_TO_FLOAT(green), 3279 INT_TO_FLOAT(blue)); 3280} 3281 3282static void GLAPIENTRY 3283TAG(SecondaryColor3s)(GLshort red, GLshort green, GLshort blue) 3284{ 3285 GET_CURRENT_CONTEXT(ctx); 3286 ATTR3F(VBO_ATTRIB_COLOR1, SHORT_TO_FLOAT(red), 3287 SHORT_TO_FLOAT(green), 3288 SHORT_TO_FLOAT(blue)); 3289} 3290 3291static void GLAPIENTRY 3292TAG(SecondaryColor3ui)(GLuint red, GLuint green, GLuint blue) 3293{ 3294 GET_CURRENT_CONTEXT(ctx); 3295 ATTR3F(VBO_ATTRIB_COLOR1, UINT_TO_FLOAT(red), 3296 UINT_TO_FLOAT(green), 3297 UINT_TO_FLOAT(blue)); 3298} 3299 3300static void GLAPIENTRY 3301TAG(SecondaryColor3us)(GLushort red, GLushort green, GLushort blue) 3302{ 3303 GET_CURRENT_CONTEXT(ctx); 3304 ATTR3F(VBO_ATTRIB_COLOR1, USHORT_TO_FLOAT(red), 3305 USHORT_TO_FLOAT(green), 3306 USHORT_TO_FLOAT(blue)); 3307} 3308 3309static void GLAPIENTRY 3310TAG(SecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue) 3311{ 3312 GET_CURRENT_CONTEXT(ctx); 3313 ATTR3F(VBO_ATTRIB_COLOR1, UBYTE_TO_FLOAT(red), 3314 UBYTE_TO_FLOAT(green), 3315 UBYTE_TO_FLOAT(blue)); 3316} 3317 3318static void GLAPIENTRY 3319TAG(SecondaryColor3bv)(const GLbyte *v) 3320{ 3321 GET_CURRENT_CONTEXT(ctx); 3322 ATTR3F(VBO_ATTRIB_COLOR1, BYTE_TO_FLOAT(v[0]), 3323 BYTE_TO_FLOAT(v[1]), 3324 BYTE_TO_FLOAT(v[2])); 3325} 3326 3327static void GLAPIENTRY 3328TAG(SecondaryColor3dv)(const GLdouble *v) 3329{ 3330 GET_CURRENT_CONTEXT(ctx); 3331 ATTR3F(VBO_ATTRIB_COLOR1, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 3332} 3333 3334static void GLAPIENTRY 3335TAG(SecondaryColor3iv)(const GLint *v) 3336{ 3337 GET_CURRENT_CONTEXT(ctx); 3338 ATTR3F(VBO_ATTRIB_COLOR1, INT_TO_FLOAT(v[0]), 3339 INT_TO_FLOAT(v[1]), 3340 INT_TO_FLOAT(v[2])); 3341} 3342 3343static void GLAPIENTRY 3344TAG(SecondaryColor3sv)(const GLshort *v) 3345{ 3346 GET_CURRENT_CONTEXT(ctx); 3347 ATTR3F(VBO_ATTRIB_COLOR1, SHORT_TO_FLOAT(v[0]), 3348 SHORT_TO_FLOAT(v[1]), 3349 SHORT_TO_FLOAT(v[2])); 3350} 3351 3352static void GLAPIENTRY 3353TAG(SecondaryColor3uiv)(const GLuint *v) 3354{ 3355 GET_CURRENT_CONTEXT(ctx); 3356 ATTR3F(VBO_ATTRIB_COLOR1, UINT_TO_FLOAT(v[0]), 3357 UINT_TO_FLOAT(v[1]), 3358 UINT_TO_FLOAT(v[2])); 3359} 3360 3361static void GLAPIENTRY 3362TAG(SecondaryColor3usv)(const GLushort *v) 3363{ 3364 GET_CURRENT_CONTEXT(ctx); 3365 ATTR3F(VBO_ATTRIB_COLOR1, USHORT_TO_FLOAT(v[0]), 3366 USHORT_TO_FLOAT(v[1]), 3367 USHORT_TO_FLOAT(v[2])); 3368} 3369 3370static void GLAPIENTRY 3371TAG(SecondaryColor3ubv)(const GLubyte *v) 3372{ 3373 GET_CURRENT_CONTEXT(ctx); 3374 ATTR3F(VBO_ATTRIB_COLOR1, UBYTE_TO_FLOAT(v[0]), 3375 UBYTE_TO_FLOAT(v[1]), 3376 UBYTE_TO_FLOAT(v[2])); 3377} 3378 3379#endif /* HW_SELECT_MODE */ 3380 3381#undef ATTR1FV 3382#undef ATTR2FV 3383#undef ATTR3FV 3384#undef ATTR4FV 3385 3386#undef ATTR1F 3387#undef ATTR2F 3388#undef ATTR3F 3389#undef ATTR4F 3390 3391#undef ATTR_UI 3392 3393#ifdef SUPPRESS_STATIC 3394#undef static 3395#endif 3396 3397#undef MAT 3398