1 /** 2 * \file api_loopback.c 3 * 4 * \author Keith Whitwell <keith (at) tungstengraphics.com> 5 */ 6 7 /* 8 * Mesa 3-D graphics library 9 * Version: 6.3 10 * 11 * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a 14 * copy of this software and associated documentation files (the "Software"), 15 * to deal in the Software without restriction, including without limitation 16 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17 * and/or sell copies of the Software, and to permit persons to whom the 18 * Software is furnished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included 21 * in all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 24 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 27 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 */ 30 31 32 #include "glheader.h" 33 #include "macros.h" 34 #include "api_loopback.h" 35 #include "mtypes.h" 36 #include "glapi/glapi.h" 37 #include "glapi/glthread.h" 38 #include "main/dispatch.h" 39 #include "mfeatures.h" 40 41 /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc 42 * calls to a smaller set of driver-provided formats. Currently just 43 * go back to dispatch to find these (eg. call glNormal3f directly), 44 * hence 'loopback'. 45 * 46 * The driver must supply all of the remaining entry points, which are 47 * listed in dd.h. The easiest way for a driver to do this is to 48 * install the supplied software t&l module. 49 */ 50 #define COLORF(r,g,b,a) CALL_Color4f(GET_DISPATCH(), (r,g,b,a)) 51 #define VERTEX2(x,y) CALL_Vertex2f(GET_DISPATCH(), (x,y)) 52 #define VERTEX3(x,y,z) CALL_Vertex3f(GET_DISPATCH(), (x,y,z)) 53 #define VERTEX4(x,y,z,w) CALL_Vertex4f(GET_DISPATCH(), (x,y,z,w)) 54 #define NORMAL(x,y,z) CALL_Normal3f(GET_DISPATCH(), (x,y,z)) 55 #define TEXCOORD1(s) CALL_TexCoord1f(GET_DISPATCH(), (s)) 56 #define TEXCOORD2(s,t) CALL_TexCoord2f(GET_DISPATCH(), (s,t)) 57 #define TEXCOORD3(s,t,u) CALL_TexCoord3f(GET_DISPATCH(), (s,t,u)) 58 #define TEXCOORD4(s,t,u,v) CALL_TexCoord4f(GET_DISPATCH(), (s,t,u,v)) 59 #define INDEX(c) CALL_Indexf(GET_DISPATCH(), (c)) 60 #define MULTI_TEXCOORD1(z,s) CALL_MultiTexCoord1fARB(GET_DISPATCH(), (z,s)) 61 #define MULTI_TEXCOORD2(z,s,t) CALL_MultiTexCoord2fARB(GET_DISPATCH(), (z,s,t)) 62 #define MULTI_TEXCOORD3(z,s,t,u) CALL_MultiTexCoord3fARB(GET_DISPATCH(), (z,s,t,u)) 63 #define MULTI_TEXCOORD4(z,s,t,u,v) CALL_MultiTexCoord4fARB(GET_DISPATCH(), (z,s,t,u,v)) 64 #define EVALCOORD1(x) CALL_EvalCoord1f(GET_DISPATCH(), (x)) 65 #define EVALCOORD2(x,y) CALL_EvalCoord2f(GET_DISPATCH(), (x,y)) 66 #define MATERIALFV(a,b,c) CALL_Materialfv(GET_DISPATCH(), (a,b,c)) 67 #define RECTF(a,b,c,d) CALL_Rectf(GET_DISPATCH(), (a,b,c,d)) 68 69 #define FOGCOORDF(x) CALL_FogCoordfEXT(GET_DISPATCH(), (x)) 70 #define SECONDARYCOLORF(a,b,c) CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) 71 72 #define ATTRIB1NV(index,x) CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x)) 73 #define ATTRIB2NV(index,x,y) CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y)) 74 #define ATTRIB3NV(index,x,y,z) CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z)) 75 #define ATTRIB4NV(index,x,y,z,w) CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w)) 76 77 #define ATTRIB1ARB(index,x) CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x)) 78 #define ATTRIB2ARB(index,x,y) CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y)) 79 #define ATTRIB3ARB(index,x,y,z) CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z)) 80 #define ATTRIB4ARB(index,x,y,z,w) CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w)) 81 82 #define ATTRIBI_1I(index,x) CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index,x)) 83 #define ATTRIBI_1UI(index,x) CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index,x)) 84 #define ATTRIBI_4I(index,x,y,z,w) CALL_VertexAttribI4iEXT(GET_DISPATCH(), (index,x,y,z,w)) 85 86 #define ATTRIBI_4UI(index,x,y,z,w) CALL_VertexAttribI4uiEXT(GET_DISPATCH(), (index,x,y,z,w)) 87 88 89 #if FEATURE_beginend 90 91 92 static void GLAPIENTRY 93 loopback_Color3b_f( GLbyte red, GLbyte green, GLbyte blue ) 94 { 95 COLORF( BYTE_TO_FLOAT(red), 96 BYTE_TO_FLOAT(green), 97 BYTE_TO_FLOAT(blue), 98 1.0 ); 99 } 100 101 static void GLAPIENTRY 102 loopback_Color3d_f( GLdouble red, GLdouble green, GLdouble blue ) 103 { 104 COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, 1.0 ); 105 } 106 107 static void GLAPIENTRY 108 loopback_Color3i_f( GLint red, GLint green, GLint blue ) 109 { 110 COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green), 111 INT_TO_FLOAT(blue), 1.0); 112 } 113 114 static void GLAPIENTRY 115 loopback_Color3s_f( GLshort red, GLshort green, GLshort blue ) 116 { 117 COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green), 118 SHORT_TO_FLOAT(blue), 1.0); 119 } 120 121 static void GLAPIENTRY 122 loopback_Color3ui_f( GLuint red, GLuint green, GLuint blue ) 123 { 124 COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green), 125 UINT_TO_FLOAT(blue), 1.0 ); 126 } 127 128 static void GLAPIENTRY 129 loopback_Color3us_f( GLushort red, GLushort green, GLushort blue ) 130 { 131 COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green), 132 USHORT_TO_FLOAT(blue), 1.0 ); 133 } 134 135 static void GLAPIENTRY 136 loopback_Color3ub_f( GLubyte red, GLubyte green, GLubyte blue ) 137 { 138 COLORF( UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green), 139 UBYTE_TO_FLOAT(blue), 1.0 ); 140 } 141 142 143 static void GLAPIENTRY 144 loopback_Color3bv_f( const GLbyte *v ) 145 { 146 COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), 147 BYTE_TO_FLOAT(v[2]), 1.0 ); 148 } 149 150 static void GLAPIENTRY 151 loopback_Color3dv_f( const GLdouble *v ) 152 { 153 COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0 ); 154 } 155 156 static void GLAPIENTRY 157 loopback_Color3iv_f( const GLint *v ) 158 { 159 COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), 160 INT_TO_FLOAT(v[2]), 1.0 ); 161 } 162 163 static void GLAPIENTRY 164 loopback_Color3sv_f( const GLshort *v ) 165 { 166 COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), 167 SHORT_TO_FLOAT(v[2]), 1.0 ); 168 } 169 170 static void GLAPIENTRY 171 loopback_Color3uiv_f( const GLuint *v ) 172 { 173 COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), 174 UINT_TO_FLOAT(v[2]), 1.0 ); 175 } 176 177 static void GLAPIENTRY 178 loopback_Color3usv_f( const GLushort *v ) 179 { 180 COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), 181 USHORT_TO_FLOAT(v[2]), 1.0 ); 182 } 183 184 static void GLAPIENTRY 185 loopback_Color3ubv_f( const GLubyte *v ) 186 { 187 COLORF( UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 188 UBYTE_TO_FLOAT(v[2]), 1.0 ); 189 } 190 191 192 static void GLAPIENTRY 193 loopback_Color4b_f( GLbyte red, GLbyte green, GLbyte blue, 194 GLbyte alpha ) 195 { 196 COLORF( BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green), 197 BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha) ); 198 } 199 200 static void GLAPIENTRY 201 loopback_Color4d_f( GLdouble red, GLdouble green, GLdouble blue, 202 GLdouble alpha ) 203 { 204 COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, (GLfloat) alpha ); 205 } 206 207 static void GLAPIENTRY 208 loopback_Color4i_f( GLint red, GLint green, GLint blue, GLint alpha ) 209 { 210 COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green), 211 INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha) ); 212 } 213 214 static void GLAPIENTRY 215 loopback_Color4s_f( GLshort red, GLshort green, GLshort blue, 216 GLshort alpha ) 217 { 218 COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green), 219 SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha) ); 220 } 221 222 static void GLAPIENTRY 223 loopback_Color4ui_f( GLuint red, GLuint green, GLuint blue, GLuint alpha ) 224 { 225 COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green), 226 UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha) ); 227 } 228 229 static void GLAPIENTRY 230 loopback_Color4us_f( GLushort red, GLushort green, GLushort blue, GLushort alpha ) 231 { 232 COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green), 233 USHORT_TO_FLOAT(blue), USHORT_TO_FLOAT(alpha) ); 234 } 235 236 static void GLAPIENTRY 237 loopback_Color4ub_f( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) 238 { 239 COLORF( UBYTE_TO_FLOAT(red), UBYTE_TO_FLOAT(green), 240 UBYTE_TO_FLOAT(blue), UBYTE_TO_FLOAT(alpha) ); 241 } 242 243 244 static void GLAPIENTRY 245 loopback_Color4iv_f( const GLint *v ) 246 { 247 COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), 248 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) ); 249 } 250 251 252 static void GLAPIENTRY 253 loopback_Color4bv_f( const GLbyte *v ) 254 { 255 COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), 256 BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]) ); 257 } 258 259 static void GLAPIENTRY 260 loopback_Color4dv_f( const GLdouble *v ) 261 { 262 COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3] ); 263 } 264 265 266 static void GLAPIENTRY 267 loopback_Color4sv_f( const GLshort *v) 268 { 269 COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), 270 SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]) ); 271 } 272 273 274 static void GLAPIENTRY 275 loopback_Color4uiv_f( const GLuint *v) 276 { 277 COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), 278 UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]) ); 279 } 280 281 static void GLAPIENTRY 282 loopback_Color4usv_f( const GLushort *v) 283 { 284 COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), 285 USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]) ); 286 } 287 288 static void GLAPIENTRY 289 loopback_Color4ubv_f( const GLubyte *v) 290 { 291 COLORF( UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 292 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]) ); 293 } 294 295 296 static void GLAPIENTRY 297 loopback_FogCoorddEXT( GLdouble d ) 298 { 299 FOGCOORDF( (GLfloat) d ); 300 } 301 302 static void GLAPIENTRY 303 loopback_FogCoorddvEXT( const GLdouble *v ) 304 { 305 FOGCOORDF( (GLfloat) *v ); 306 } 307 308 309 static void GLAPIENTRY 310 loopback_Indexd( GLdouble c ) 311 { 312 INDEX( (GLfloat) c ); 313 } 314 315 static void GLAPIENTRY 316 loopback_Indexi( GLint c ) 317 { 318 INDEX( (GLfloat) c ); 319 } 320 321 static void GLAPIENTRY 322 loopback_Indexs( GLshort c ) 323 { 324 INDEX( (GLfloat) c ); 325 } 326 327 static void GLAPIENTRY 328 loopback_Indexub( GLubyte c ) 329 { 330 INDEX( (GLfloat) c ); 331 } 332 333 static void GLAPIENTRY 334 loopback_Indexdv( const GLdouble *c ) 335 { 336 INDEX( (GLfloat) *c ); 337 } 338 339 static void GLAPIENTRY 340 loopback_Indexiv( const GLint *c ) 341 { 342 INDEX( (GLfloat) *c ); 343 } 344 345 static void GLAPIENTRY 346 loopback_Indexsv( const GLshort *c ) 347 { 348 INDEX( (GLfloat) *c ); 349 } 350 351 static void GLAPIENTRY 352 loopback_Indexubv( const GLubyte *c ) 353 { 354 INDEX( (GLfloat) *c ); 355 } 356 357 358 static void GLAPIENTRY 359 loopback_EdgeFlagv(const GLboolean *flag) 360 { 361 CALL_EdgeFlag(GET_DISPATCH(), (*flag)); 362 } 363 364 365 static void GLAPIENTRY 366 loopback_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz ) 367 { 368 NORMAL( BYTE_TO_FLOAT(nx), BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) ); 369 } 370 371 static void GLAPIENTRY 372 loopback_Normal3d( GLdouble nx, GLdouble ny, GLdouble nz ) 373 { 374 NORMAL((GLfloat) nx, (GLfloat) ny, (GLfloat) nz); 375 } 376 377 static void GLAPIENTRY 378 loopback_Normal3i( GLint nx, GLint ny, GLint nz ) 379 { 380 NORMAL( INT_TO_FLOAT(nx), INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) ); 381 } 382 383 static void GLAPIENTRY 384 loopback_Normal3s( GLshort nx, GLshort ny, GLshort nz ) 385 { 386 NORMAL( SHORT_TO_FLOAT(nx), SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) ); 387 } 388 389 static void GLAPIENTRY 390 loopback_Normal3bv( const GLbyte *v ) 391 { 392 NORMAL( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) ); 393 } 394 395 static void GLAPIENTRY 396 loopback_Normal3dv( const GLdouble *v ) 397 { 398 NORMAL( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 399 } 400 401 static void GLAPIENTRY 402 loopback_Normal3iv( const GLint *v ) 403 { 404 NORMAL( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) ); 405 } 406 407 static void GLAPIENTRY 408 loopback_Normal3sv( const GLshort *v ) 409 { 410 NORMAL( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) ); 411 } 412 413 static void GLAPIENTRY 414 loopback_TexCoord1d( GLdouble s ) 415 { 416 TEXCOORD1((GLfloat) s); 417 } 418 419 static void GLAPIENTRY 420 loopback_TexCoord1i( GLint s ) 421 { 422 TEXCOORD1((GLfloat) s); 423 } 424 425 static void GLAPIENTRY 426 loopback_TexCoord1s( GLshort s ) 427 { 428 TEXCOORD1((GLfloat) s); 429 } 430 431 static void GLAPIENTRY 432 loopback_TexCoord2d( GLdouble s, GLdouble t ) 433 { 434 TEXCOORD2((GLfloat) s,(GLfloat) t); 435 } 436 437 static void GLAPIENTRY 438 loopback_TexCoord2s( GLshort s, GLshort t ) 439 { 440 TEXCOORD2((GLfloat) s,(GLfloat) t); 441 } 442 443 static void GLAPIENTRY 444 loopback_TexCoord2i( GLint s, GLint t ) 445 { 446 TEXCOORD2((GLfloat) s,(GLfloat) t); 447 } 448 449 static void GLAPIENTRY 450 loopback_TexCoord3d( GLdouble s, GLdouble t, GLdouble r ) 451 { 452 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r); 453 } 454 455 static void GLAPIENTRY 456 loopback_TexCoord3i( GLint s, GLint t, GLint r ) 457 { 458 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r); 459 } 460 461 static void GLAPIENTRY 462 loopback_TexCoord3s( GLshort s, GLshort t, GLshort r ) 463 { 464 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r); 465 } 466 467 static void GLAPIENTRY 468 loopback_TexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ) 469 { 470 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 471 } 472 473 static void GLAPIENTRY 474 loopback_TexCoord4i( GLint s, GLint t, GLint r, GLint q ) 475 { 476 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 477 } 478 479 static void GLAPIENTRY 480 loopback_TexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ) 481 { 482 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q); 483 } 484 485 static void GLAPIENTRY 486 loopback_TexCoord1dv( const GLdouble *v ) 487 { 488 TEXCOORD1((GLfloat) v[0]); 489 } 490 491 static void GLAPIENTRY 492 loopback_TexCoord1iv( const GLint *v ) 493 { 494 TEXCOORD1((GLfloat) v[0]); 495 } 496 497 static void GLAPIENTRY 498 loopback_TexCoord1sv( const GLshort *v ) 499 { 500 TEXCOORD1((GLfloat) v[0]); 501 } 502 503 static void GLAPIENTRY 504 loopback_TexCoord2dv( const GLdouble *v ) 505 { 506 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]); 507 } 508 509 static void GLAPIENTRY 510 loopback_TexCoord2iv( const GLint *v ) 511 { 512 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]); 513 } 514 515 static void GLAPIENTRY 516 loopback_TexCoord2sv( const GLshort *v ) 517 { 518 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]); 519 } 520 521 static void GLAPIENTRY 522 loopback_TexCoord3dv( const GLdouble *v ) 523 { 524 TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 525 } 526 527 static void GLAPIENTRY 528 loopback_TexCoord3iv( const GLint *v ) 529 { 530 TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 531 } 532 533 static void GLAPIENTRY 534 loopback_TexCoord3sv( const GLshort *v ) 535 { 536 TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); 537 } 538 539 static void GLAPIENTRY 540 loopback_TexCoord4dv( const GLdouble *v ) 541 { 542 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 543 } 544 545 static void GLAPIENTRY 546 loopback_TexCoord4iv( const GLint *v ) 547 { 548 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 549 } 550 551 static void GLAPIENTRY 552 loopback_TexCoord4sv( const GLshort *v ) 553 { 554 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]); 555 } 556 557 static void GLAPIENTRY 558 loopback_Vertex2d( GLdouble x, GLdouble y ) 559 { 560 VERTEX2( (GLfloat) x, (GLfloat) y ); 561 } 562 563 static void GLAPIENTRY 564 loopback_Vertex2i( GLint x, GLint y ) 565 { 566 VERTEX2( (GLfloat) x, (GLfloat) y ); 567 } 568 569 static void GLAPIENTRY 570 loopback_Vertex2s( GLshort x, GLshort y ) 571 { 572 VERTEX2( (GLfloat) x, (GLfloat) y ); 573 } 574 575 static void GLAPIENTRY 576 loopback_Vertex3d( GLdouble x, GLdouble y, GLdouble z ) 577 { 578 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z ); 579 } 580 581 static void GLAPIENTRY 582 loopback_Vertex3i( GLint x, GLint y, GLint z ) 583 { 584 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z ); 585 } 586 587 static void GLAPIENTRY 588 loopback_Vertex3s( GLshort x, GLshort y, GLshort z ) 589 { 590 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z ); 591 } 592 593 static void GLAPIENTRY 594 loopback_Vertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ) 595 { 596 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w ); 597 } 598 599 static void GLAPIENTRY 600 loopback_Vertex4i( GLint x, GLint y, GLint z, GLint w ) 601 { 602 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w ); 603 } 604 605 static void GLAPIENTRY 606 loopback_Vertex4s( GLshort x, GLshort y, GLshort z, GLshort w ) 607 { 608 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w ); 609 } 610 611 static void GLAPIENTRY 612 loopback_Vertex2dv( const GLdouble *v ) 613 { 614 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] ); 615 } 616 617 static void GLAPIENTRY 618 loopback_Vertex2iv( const GLint *v ) 619 { 620 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] ); 621 } 622 623 static void GLAPIENTRY 624 loopback_Vertex2sv( const GLshort *v ) 625 { 626 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] ); 627 } 628 629 static void GLAPIENTRY 630 loopback_Vertex3dv( const GLdouble *v ) 631 { 632 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 633 } 634 635 static void GLAPIENTRY 636 loopback_Vertex3iv( const GLint *v ) 637 { 638 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 639 } 640 641 static void GLAPIENTRY 642 loopback_Vertex3sv( const GLshort *v ) 643 { 644 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 645 } 646 647 static void GLAPIENTRY 648 loopback_Vertex4dv( const GLdouble *v ) 649 { 650 VERTEX4( (GLfloat) v[0], (GLfloat) v[1], 651 (GLfloat) v[2], (GLfloat) v[3] ); 652 } 653 654 static void GLAPIENTRY 655 loopback_Vertex4iv( const GLint *v ) 656 { 657 VERTEX4( (GLfloat) v[0], (GLfloat) v[1], 658 (GLfloat) v[2], (GLfloat) v[3] ); 659 } 660 661 static void GLAPIENTRY 662 loopback_Vertex4sv( const GLshort *v ) 663 { 664 VERTEX4( (GLfloat) v[0], (GLfloat) v[1], 665 (GLfloat) v[2], (GLfloat) v[3] ); 666 } 667 668 static void GLAPIENTRY 669 loopback_MultiTexCoord1dARB(GLenum target, GLdouble s) 670 { 671 MULTI_TEXCOORD1( target, (GLfloat) s ); 672 } 673 674 static void GLAPIENTRY 675 loopback_MultiTexCoord1dvARB(GLenum target, const GLdouble *v) 676 { 677 MULTI_TEXCOORD1( target, (GLfloat) v[0] ); 678 } 679 680 static void GLAPIENTRY 681 loopback_MultiTexCoord1iARB(GLenum target, GLint s) 682 { 683 MULTI_TEXCOORD1( target, (GLfloat) s ); 684 } 685 686 static void GLAPIENTRY 687 loopback_MultiTexCoord1ivARB(GLenum target, const GLint *v) 688 { 689 MULTI_TEXCOORD1( target, (GLfloat) v[0] ); 690 } 691 692 static void GLAPIENTRY 693 loopback_MultiTexCoord1sARB(GLenum target, GLshort s) 694 { 695 MULTI_TEXCOORD1( target, (GLfloat) s ); 696 } 697 698 static void GLAPIENTRY 699 loopback_MultiTexCoord1svARB(GLenum target, const GLshort *v) 700 { 701 MULTI_TEXCOORD1( target, (GLfloat) v[0] ); 702 } 703 704 static void GLAPIENTRY 705 loopback_MultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t) 706 { 707 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t ); 708 } 709 710 static void GLAPIENTRY 711 loopback_MultiTexCoord2dvARB(GLenum target, const GLdouble *v) 712 { 713 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] ); 714 } 715 716 static void GLAPIENTRY 717 loopback_MultiTexCoord2iARB(GLenum target, GLint s, GLint t) 718 { 719 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t ); 720 } 721 722 static void GLAPIENTRY 723 loopback_MultiTexCoord2ivARB(GLenum target, const GLint *v) 724 { 725 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] ); 726 } 727 728 static void GLAPIENTRY 729 loopback_MultiTexCoord2sARB(GLenum target, GLshort s, GLshort t) 730 { 731 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t ); 732 } 733 734 static void GLAPIENTRY 735 loopback_MultiTexCoord2svARB(GLenum target, const GLshort *v) 736 { 737 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] ); 738 } 739 740 static void GLAPIENTRY 741 loopback_MultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r) 742 { 743 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r ); 744 } 745 746 static void GLAPIENTRY 747 loopback_MultiTexCoord3dvARB(GLenum target, const GLdouble *v) 748 { 749 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 750 } 751 752 static void GLAPIENTRY 753 loopback_MultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r) 754 { 755 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r ); 756 } 757 758 static void GLAPIENTRY 759 loopback_MultiTexCoord3ivARB(GLenum target, const GLint *v) 760 { 761 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 762 } 763 764 static void GLAPIENTRY 765 loopback_MultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r) 766 { 767 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r ); 768 } 769 770 static void GLAPIENTRY 771 loopback_MultiTexCoord3svARB(GLenum target, const GLshort *v) 772 { 773 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 774 } 775 776 static void GLAPIENTRY 777 loopback_MultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) 778 { 779 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t, 780 (GLfloat) r, (GLfloat) q ); 781 } 782 783 static void GLAPIENTRY 784 loopback_MultiTexCoord4dvARB(GLenum target, const GLdouble *v) 785 { 786 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1], 787 (GLfloat) v[2], (GLfloat) v[3] ); 788 } 789 790 static void GLAPIENTRY 791 loopback_MultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q) 792 { 793 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t, 794 (GLfloat) r, (GLfloat) q ); 795 } 796 797 static void GLAPIENTRY 798 loopback_MultiTexCoord4ivARB(GLenum target, const GLint *v) 799 { 800 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1], 801 (GLfloat) v[2], (GLfloat) v[3] ); 802 } 803 804 static void GLAPIENTRY 805 loopback_MultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) 806 { 807 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t, 808 (GLfloat) r, (GLfloat) q ); 809 } 810 811 static void GLAPIENTRY 812 loopback_MultiTexCoord4svARB(GLenum target, const GLshort *v) 813 { 814 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1], 815 (GLfloat) v[2], (GLfloat) v[3] ); 816 } 817 818 static void GLAPIENTRY 819 loopback_EvalCoord2dv( const GLdouble *u ) 820 { 821 EVALCOORD2( (GLfloat) u[0], (GLfloat) u[1] ); 822 } 823 824 static void GLAPIENTRY 825 loopback_EvalCoord2fv( const GLfloat *u ) 826 { 827 EVALCOORD2( u[0], u[1] ); 828 } 829 830 static void GLAPIENTRY 831 loopback_EvalCoord2d( GLdouble u, GLdouble v ) 832 { 833 EVALCOORD2( (GLfloat) u, (GLfloat) v ); 834 } 835 836 static void GLAPIENTRY 837 loopback_EvalCoord1dv( const GLdouble *u ) 838 { 839 EVALCOORD1( (GLfloat) *u ); 840 } 841 842 static void GLAPIENTRY 843 loopback_EvalCoord1fv( const GLfloat *u ) 844 { 845 EVALCOORD1( (GLfloat) *u ); 846 } 847 848 static void GLAPIENTRY 849 loopback_EvalCoord1d( GLdouble u ) 850 { 851 EVALCOORD1( (GLfloat) u ); 852 } 853 854 static void GLAPIENTRY 855 loopback_Materialf( GLenum face, GLenum pname, GLfloat param ) 856 { 857 GLfloat fparam[4]; 858 fparam[0] = param; 859 MATERIALFV( face, pname, fparam ); 860 } 861 862 static void GLAPIENTRY 863 loopback_Materiali(GLenum face, GLenum pname, GLint param ) 864 { 865 GLfloat p = (GLfloat) param; 866 MATERIALFV(face, pname, &p); 867 } 868 869 static void GLAPIENTRY 870 loopback_Materialiv(GLenum face, GLenum pname, const GLint *params ) 871 { 872 GLfloat fparam[4]; 873 switch (pname) { 874 case GL_AMBIENT: 875 case GL_DIFFUSE: 876 case GL_SPECULAR: 877 case GL_EMISSION: 878 case GL_AMBIENT_AND_DIFFUSE: 879 fparam[0] = INT_TO_FLOAT( params[0] ); 880 fparam[1] = INT_TO_FLOAT( params[1] ); 881 fparam[2] = INT_TO_FLOAT( params[2] ); 882 fparam[3] = INT_TO_FLOAT( params[3] ); 883 break; 884 case GL_SHININESS: 885 fparam[0] = (GLfloat) params[0]; 886 break; 887 case GL_COLOR_INDEXES: 888 fparam[0] = (GLfloat) params[0]; 889 fparam[1] = (GLfloat) params[1]; 890 fparam[2] = (GLfloat) params[2]; 891 break; 892 default: 893 ; 894 } 895 MATERIALFV(face, pname, fparam); 896 } 897 898 899 static void GLAPIENTRY 900 loopback_Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) 901 { 902 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2); 903 } 904 905 static void GLAPIENTRY 906 loopback_Rectdv(const GLdouble *v1, const GLdouble *v2) 907 { 908 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]); 909 } 910 911 static void GLAPIENTRY 912 loopback_Rectfv(const GLfloat *v1, const GLfloat *v2) 913 { 914 RECTF(v1[0], v1[1], v2[0], v2[1]); 915 } 916 917 static void GLAPIENTRY 918 loopback_Recti(GLint x1, GLint y1, GLint x2, GLint y2) 919 { 920 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2); 921 } 922 923 static void GLAPIENTRY 924 loopback_Rectiv(const GLint *v1, const GLint *v2) 925 { 926 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]); 927 } 928 929 static void GLAPIENTRY 930 loopback_Rects(GLshort x1, GLshort y1, GLshort x2, GLshort y2) 931 { 932 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2); 933 } 934 935 static void GLAPIENTRY 936 loopback_Rectsv(const GLshort *v1, const GLshort *v2) 937 { 938 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]); 939 } 940 941 static void GLAPIENTRY 942 loopback_SecondaryColor3bEXT_f( GLbyte red, GLbyte green, GLbyte blue ) 943 { 944 SECONDARYCOLORF( BYTE_TO_FLOAT(red), 945 BYTE_TO_FLOAT(green), 946 BYTE_TO_FLOAT(blue) ); 947 } 948 949 static void GLAPIENTRY 950 loopback_SecondaryColor3dEXT_f( GLdouble red, GLdouble green, GLdouble blue ) 951 { 952 SECONDARYCOLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue ); 953 } 954 955 static void GLAPIENTRY 956 loopback_SecondaryColor3iEXT_f( GLint red, GLint green, GLint blue ) 957 { 958 SECONDARYCOLORF( INT_TO_FLOAT(red), 959 INT_TO_FLOAT(green), 960 INT_TO_FLOAT(blue)); 961 } 962 963 static void GLAPIENTRY 964 loopback_SecondaryColor3sEXT_f( GLshort red, GLshort green, GLshort blue ) 965 { 966 SECONDARYCOLORF(SHORT_TO_FLOAT(red), 967 SHORT_TO_FLOAT(green), 968 SHORT_TO_FLOAT(blue)); 969 } 970 971 static void GLAPIENTRY 972 loopback_SecondaryColor3uiEXT_f( GLuint red, GLuint green, GLuint blue ) 973 { 974 SECONDARYCOLORF(UINT_TO_FLOAT(red), 975 UINT_TO_FLOAT(green), 976 UINT_TO_FLOAT(blue)); 977 } 978 979 static void GLAPIENTRY 980 loopback_SecondaryColor3usEXT_f( GLushort red, GLushort green, GLushort blue ) 981 { 982 SECONDARYCOLORF(USHORT_TO_FLOAT(red), 983 USHORT_TO_FLOAT(green), 984 USHORT_TO_FLOAT(blue)); 985 } 986 987 static void GLAPIENTRY 988 loopback_SecondaryColor3ubEXT_f( GLubyte red, GLubyte green, GLubyte blue ) 989 { 990 SECONDARYCOLORF(UBYTE_TO_FLOAT(red), 991 UBYTE_TO_FLOAT(green), 992 UBYTE_TO_FLOAT(blue)); 993 } 994 995 static void GLAPIENTRY 996 loopback_SecondaryColor3bvEXT_f( const GLbyte *v ) 997 { 998 SECONDARYCOLORF(BYTE_TO_FLOAT(v[0]), 999 BYTE_TO_FLOAT(v[1]), 1000 BYTE_TO_FLOAT(v[2])); 1001 } 1002 1003 static void GLAPIENTRY 1004 loopback_SecondaryColor3dvEXT_f( const GLdouble *v ) 1005 { 1006 SECONDARYCOLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] ); 1007 } 1008 static void GLAPIENTRY 1009 loopback_SecondaryColor3ivEXT_f( const GLint *v ) 1010 { 1011 SECONDARYCOLORF(INT_TO_FLOAT(v[0]), 1012 INT_TO_FLOAT(v[1]), 1013 INT_TO_FLOAT(v[2])); 1014 } 1015 1016 static void GLAPIENTRY 1017 loopback_SecondaryColor3svEXT_f( const GLshort *v ) 1018 { 1019 SECONDARYCOLORF(SHORT_TO_FLOAT(v[0]), 1020 SHORT_TO_FLOAT(v[1]), 1021 SHORT_TO_FLOAT(v[2])); 1022 } 1023 1024 static void GLAPIENTRY 1025 loopback_SecondaryColor3uivEXT_f( const GLuint *v ) 1026 { 1027 SECONDARYCOLORF(UINT_TO_FLOAT(v[0]), 1028 UINT_TO_FLOAT(v[1]), 1029 UINT_TO_FLOAT(v[2])); 1030 } 1031 1032 static void GLAPIENTRY 1033 loopback_SecondaryColor3usvEXT_f( const GLushort *v ) 1034 { 1035 SECONDARYCOLORF(USHORT_TO_FLOAT(v[0]), 1036 USHORT_TO_FLOAT(v[1]), 1037 USHORT_TO_FLOAT(v[2])); 1038 } 1039 1040 static void GLAPIENTRY 1041 loopback_SecondaryColor3ubvEXT_f( const GLubyte *v ) 1042 { 1043 SECONDARYCOLORF(UBYTE_TO_FLOAT(v[0]), 1044 UBYTE_TO_FLOAT(v[1]), 1045 UBYTE_TO_FLOAT(v[2])); 1046 } 1047 1048 1049 /* 1050 * GL_NV_vertex_program: 1051 * Always loop-back to one of the VertexAttrib[1234]f[v]NV functions. 1052 * Note that attribute indexes DO alias conventional vertex attributes. 1053 */ 1054 1055 static void GLAPIENTRY 1056 loopback_VertexAttrib1sNV(GLuint index, GLshort x) 1057 { 1058 ATTRIB1NV(index, (GLfloat) x); 1059 } 1060 1061 static void GLAPIENTRY 1062 loopback_VertexAttrib1dNV(GLuint index, GLdouble x) 1063 { 1064 ATTRIB1NV(index, (GLfloat) x); 1065 } 1066 1067 static void GLAPIENTRY 1068 loopback_VertexAttrib2sNV(GLuint index, GLshort x, GLshort y) 1069 { 1070 ATTRIB2NV(index, (GLfloat) x, y); 1071 } 1072 1073 static void GLAPIENTRY 1074 loopback_VertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y) 1075 { 1076 ATTRIB2NV(index, (GLfloat) x, (GLfloat) y); 1077 } 1078 1079 static void GLAPIENTRY 1080 loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z) 1081 { 1082 ATTRIB3NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1083 } 1084 1085 static void GLAPIENTRY 1086 loopback_VertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z) 1087 { 1088 ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); 1089 } 1090 1091 static void GLAPIENTRY 1092 loopback_VertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) 1093 { 1094 ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1095 } 1096 1097 static void GLAPIENTRY 1098 loopback_VertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1099 { 1100 ATTRIB4NV(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1101 } 1102 1103 static void GLAPIENTRY 1104 loopback_VertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) 1105 { 1106 ATTRIB4NV(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y), 1107 UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w)); 1108 } 1109 1110 static void GLAPIENTRY 1111 loopback_VertexAttrib1svNV(GLuint index, const GLshort *v) 1112 { 1113 ATTRIB1NV(index, (GLfloat) v[0]); 1114 } 1115 1116 static void GLAPIENTRY 1117 loopback_VertexAttrib1dvNV(GLuint index, const GLdouble *v) 1118 { 1119 ATTRIB1NV(index, (GLfloat) v[0]); 1120 } 1121 1122 static void GLAPIENTRY 1123 loopback_VertexAttrib2svNV(GLuint index, const GLshort *v) 1124 { 1125 ATTRIB2NV(index, (GLfloat) v[0], (GLfloat) v[1]); 1126 } 1127 1128 static void GLAPIENTRY 1129 loopback_VertexAttrib2dvNV(GLuint index, const GLdouble *v) 1130 { 1131 ATTRIB2NV(index, (GLfloat) v[0], (GLfloat) v[1]); 1132 } 1133 1134 static void GLAPIENTRY 1135 loopback_VertexAttrib3svNV(GLuint index, const GLshort *v) 1136 { 1137 ATTRIB3NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1138 } 1139 1140 static void GLAPIENTRY 1141 loopback_VertexAttrib3dvNV(GLuint index, const GLdouble *v) 1142 { 1143 ATTRIB3NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1144 } 1145 1146 static void GLAPIENTRY 1147 loopback_VertexAttrib4svNV(GLuint index, const GLshort *v) 1148 { 1149 ATTRIB4NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1150 (GLfloat)v[3]); 1151 } 1152 1153 static void GLAPIENTRY 1154 loopback_VertexAttrib4dvNV(GLuint index, const GLdouble *v) 1155 { 1156 ATTRIB4NV(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1157 } 1158 1159 static void GLAPIENTRY 1160 loopback_VertexAttrib4ubvNV(GLuint index, const GLubyte *v) 1161 { 1162 ATTRIB4NV(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 1163 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 1164 } 1165 1166 1167 static void GLAPIENTRY 1168 loopback_VertexAttribs1svNV(GLuint index, GLsizei n, const GLshort *v) 1169 { 1170 GLint i; 1171 for (i = n - 1; i >= 0; i--) 1172 loopback_VertexAttrib1svNV(index + i, v + i); 1173 } 1174 1175 static void GLAPIENTRY 1176 loopback_VertexAttribs1fvNV(GLuint index, GLsizei n, const GLfloat *v) 1177 { 1178 GLint i; 1179 for (i = n - 1; i >= 0; i--) 1180 ATTRIB1NV(index + i, v[i]); 1181 } 1182 1183 static void GLAPIENTRY 1184 loopback_VertexAttribs1dvNV(GLuint index, GLsizei n, const GLdouble *v) 1185 { 1186 GLint i; 1187 for (i = n - 1; i >= 0; i--) 1188 loopback_VertexAttrib1dvNV(index + i, v + i); 1189 } 1190 1191 static void GLAPIENTRY 1192 loopback_VertexAttribs2svNV(GLuint index, GLsizei n, const GLshort *v) 1193 { 1194 GLint i; 1195 for (i = n - 1; i >= 0; i--) 1196 loopback_VertexAttrib2svNV(index + i, v + 2 * i); 1197 } 1198 1199 static void GLAPIENTRY 1200 loopback_VertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat *v) 1201 { 1202 GLint i; 1203 for (i = n - 1; i >= 0; i--) 1204 ATTRIB2NV(index + i, v[2 * i], v[2 * i + 1]); 1205 } 1206 1207 static void GLAPIENTRY 1208 loopback_VertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble *v) 1209 { 1210 GLint i; 1211 for (i = n - 1; i >= 0; i--) 1212 loopback_VertexAttrib2dvNV(index + i, v + 2 * i); 1213 } 1214 1215 static void GLAPIENTRY 1216 loopback_VertexAttribs3svNV(GLuint index, GLsizei n, const GLshort *v) 1217 { 1218 GLint i; 1219 for (i = n - 1; i >= 0; i--) 1220 loopback_VertexAttrib3svNV(index + i, v + 3 * i); 1221 } 1222 1223 static void GLAPIENTRY 1224 loopback_VertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat *v) 1225 { 1226 GLint i; 1227 for (i = n - 1; i >= 0; i--) 1228 ATTRIB3NV(index + i, v[3 * i], v[3 * i + 1], v[3 * i + 2]); 1229 } 1230 1231 static void GLAPIENTRY 1232 loopback_VertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble *v) 1233 { 1234 GLint i; 1235 for (i = n - 1; i >= 0; i--) 1236 loopback_VertexAttrib3dvNV(index + i, v + 3 * i); 1237 } 1238 1239 static void GLAPIENTRY 1240 loopback_VertexAttribs4svNV(GLuint index, GLsizei n, const GLshort *v) 1241 { 1242 GLint i; 1243 for (i = n - 1; i >= 0; i--) 1244 loopback_VertexAttrib4svNV(index + i, v + 4 * i); 1245 } 1246 1247 static void GLAPIENTRY 1248 loopback_VertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat *v) 1249 { 1250 GLint i; 1251 for (i = n - 1; i >= 0; i--) 1252 ATTRIB4NV(index + i, v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3]); 1253 } 1254 1255 static void GLAPIENTRY 1256 loopback_VertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble *v) 1257 { 1258 GLint i; 1259 for (i = n - 1; i >= 0; i--) 1260 loopback_VertexAttrib4dvNV(index + i, v + 4 * i); 1261 } 1262 1263 static void GLAPIENTRY 1264 loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v) 1265 { 1266 GLint i; 1267 for (i = n - 1; i >= 0; i--) 1268 loopback_VertexAttrib4ubvNV(index + i, v + 4 * i); 1269 } 1270 1271 1272 /* 1273 * GL_ARB_vertex_program 1274 * Always loop-back to one of the VertexAttrib[1234]f[v]ARB functions. 1275 * Note that attribute indexes do NOT alias conventional attributes. 1276 */ 1277 1278 static void GLAPIENTRY 1279 loopback_VertexAttrib1sARB(GLuint index, GLshort x) 1280 { 1281 ATTRIB1ARB(index, (GLfloat) x); 1282 } 1283 1284 static void GLAPIENTRY 1285 loopback_VertexAttrib1dARB(GLuint index, GLdouble x) 1286 { 1287 ATTRIB1ARB(index, (GLfloat) x); 1288 } 1289 1290 static void GLAPIENTRY 1291 loopback_VertexAttrib2sARB(GLuint index, GLshort x, GLshort y) 1292 { 1293 ATTRIB2ARB(index, (GLfloat) x, y); 1294 } 1295 1296 static void GLAPIENTRY 1297 loopback_VertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y) 1298 { 1299 ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y); 1300 } 1301 1302 static void GLAPIENTRY 1303 loopback_VertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z) 1304 { 1305 ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); 1306 } 1307 1308 static void GLAPIENTRY 1309 loopback_VertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z) 1310 { 1311 ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); 1312 } 1313 1314 static void GLAPIENTRY 1315 loopback_VertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) 1316 { 1317 ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1318 } 1319 1320 static void GLAPIENTRY 1321 loopback_VertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) 1322 { 1323 ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); 1324 } 1325 1326 static void GLAPIENTRY 1327 loopback_VertexAttrib1svARB(GLuint index, const GLshort *v) 1328 { 1329 ATTRIB1ARB(index, (GLfloat) v[0]); 1330 } 1331 1332 static void GLAPIENTRY 1333 loopback_VertexAttrib1dvARB(GLuint index, const GLdouble *v) 1334 { 1335 ATTRIB1ARB(index, (GLfloat) v[0]); 1336 } 1337 1338 static void GLAPIENTRY 1339 loopback_VertexAttrib2svARB(GLuint index, const GLshort *v) 1340 { 1341 ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); 1342 } 1343 1344 static void GLAPIENTRY 1345 loopback_VertexAttrib2dvARB(GLuint index, const GLdouble *v) 1346 { 1347 ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); 1348 } 1349 1350 static void GLAPIENTRY 1351 loopback_VertexAttrib3svARB(GLuint index, const GLshort *v) 1352 { 1353 ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1354 } 1355 1356 static void GLAPIENTRY 1357 loopback_VertexAttrib3dvARB(GLuint index, const GLdouble *v) 1358 { 1359 ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); 1360 } 1361 1362 static void GLAPIENTRY 1363 loopback_VertexAttrib4svARB(GLuint index, const GLshort *v) 1364 { 1365 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1366 (GLfloat)v[3]); 1367 } 1368 1369 static void GLAPIENTRY 1370 loopback_VertexAttrib4dvARB(GLuint index, const GLdouble *v) 1371 { 1372 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1373 } 1374 1375 static void GLAPIENTRY 1376 loopback_VertexAttrib4bvARB(GLuint index, const GLbyte * v) 1377 { 1378 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1379 } 1380 1381 static void GLAPIENTRY 1382 loopback_VertexAttrib4ivARB(GLuint index, const GLint * v) 1383 { 1384 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1385 } 1386 1387 static void GLAPIENTRY 1388 loopback_VertexAttrib4ubvARB(GLuint index, const GLubyte * v) 1389 { 1390 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1391 } 1392 1393 static void GLAPIENTRY 1394 loopback_VertexAttrib4usvARB(GLuint index, const GLushort * v) 1395 { 1396 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1397 } 1398 1399 static void GLAPIENTRY 1400 loopback_VertexAttrib4uivARB(GLuint index, const GLuint * v) 1401 { 1402 ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]); 1403 } 1404 1405 static void GLAPIENTRY 1406 loopback_VertexAttrib4NbvARB(GLuint index, const GLbyte * v) 1407 { 1408 ATTRIB4ARB(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), 1409 BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3])); 1410 } 1411 1412 static void GLAPIENTRY 1413 loopback_VertexAttrib4NsvARB(GLuint index, const GLshort * v) 1414 { 1415 ATTRIB4ARB(index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), 1416 SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3])); 1417 } 1418 1419 static void GLAPIENTRY 1420 loopback_VertexAttrib4NivARB(GLuint index, const GLint * v) 1421 { 1422 ATTRIB4ARB(index, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), 1423 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3])); 1424 } 1425 1426 static void GLAPIENTRY 1427 loopback_VertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) 1428 { 1429 ATTRIB4ARB(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y), 1430 UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w)); 1431 } 1432 1433 static void GLAPIENTRY 1434 loopback_VertexAttrib4NubvARB(GLuint index, const GLubyte * v) 1435 { 1436 ATTRIB4ARB(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), 1437 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3])); 1438 } 1439 1440 static void GLAPIENTRY 1441 loopback_VertexAttrib4NusvARB(GLuint index, const GLushort * v) 1442 { 1443 ATTRIB4ARB(index, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]), 1444 USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3])); 1445 } 1446 1447 static void GLAPIENTRY 1448 loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v) 1449 { 1450 ATTRIB4ARB(index, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]), 1451 UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3])); 1452 } 1453 1454 1455 1456 /** 1457 * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes. 1458 * Note that attribute indexes do NOT alias conventional attributes. 1459 */ 1460 1461 static void GLAPIENTRY 1462 loopback_VertexAttribI1iv(GLuint index, const GLint *v) 1463 { 1464 ATTRIBI_1I(index, v[0]); 1465 } 1466 1467 static void GLAPIENTRY 1468 loopback_VertexAttribI1uiv(GLuint index, const GLuint *v) 1469 { 1470 ATTRIBI_1UI(index, v[0]); 1471 } 1472 1473 static void GLAPIENTRY 1474 loopback_VertexAttribI4bv(GLuint index, const GLbyte *v) 1475 { 1476 ATTRIBI_4I(index, v[0], v[1], v[2], v[3]); 1477 } 1478 1479 static void GLAPIENTRY 1480 loopback_VertexAttribI4sv(GLuint index, const GLshort *v) 1481 { 1482 ATTRIBI_4I(index, v[0], v[1], v[2], v[3]); 1483 } 1484 1485 static void GLAPIENTRY 1486 loopback_VertexAttribI4ubv(GLuint index, const GLubyte *v) 1487 { 1488 ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]); 1489 } 1490 1491 static void GLAPIENTRY 1492 loopback_VertexAttribI4usv(GLuint index, const GLushort *v) 1493 { 1494 ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]); 1495 } 1496 1497 1498 1499 1500 /* 1501 * This code never registers handlers for any of the entry points 1502 * listed in vtxfmt.h. 1503 */ 1504 void 1505 _mesa_loopback_init_api_table(const struct gl_context *ctx, 1506 struct _glapi_table *dest) 1507 { 1508 if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) { 1509 SET_Color3b(dest, loopback_Color3b_f); 1510 SET_Color3d(dest, loopback_Color3d_f); 1511 SET_Color3i(dest, loopback_Color3i_f); 1512 SET_Color3s(dest, loopback_Color3s_f); 1513 SET_Color3ui(dest, loopback_Color3ui_f); 1514 SET_Color3us(dest, loopback_Color3us_f); 1515 SET_Color3ub(dest, loopback_Color3ub_f); 1516 SET_Color4b(dest, loopback_Color4b_f); 1517 SET_Color4d(dest, loopback_Color4d_f); 1518 SET_Color4i(dest, loopback_Color4i_f); 1519 SET_Color4s(dest, loopback_Color4s_f); 1520 SET_Color4ui(dest, loopback_Color4ui_f); 1521 SET_Color4us(dest, loopback_Color4us_f); 1522 SET_Color4ub(dest, loopback_Color4ub_f); 1523 SET_Color3bv(dest, loopback_Color3bv_f); 1524 SET_Color3dv(dest, loopback_Color3dv_f); 1525 SET_Color3iv(dest, loopback_Color3iv_f); 1526 SET_Color3sv(dest, loopback_Color3sv_f); 1527 SET_Color3uiv(dest, loopback_Color3uiv_f); 1528 SET_Color3usv(dest, loopback_Color3usv_f); 1529 SET_Color3ubv(dest, loopback_Color3ubv_f); 1530 SET_Color4bv(dest, loopback_Color4bv_f); 1531 SET_Color4dv(dest, loopback_Color4dv_f); 1532 SET_Color4iv(dest, loopback_Color4iv_f); 1533 SET_Color4sv(dest, loopback_Color4sv_f); 1534 SET_Color4uiv(dest, loopback_Color4uiv_f); 1535 SET_Color4usv(dest, loopback_Color4usv_f); 1536 SET_Color4ubv(dest, loopback_Color4ubv_f); 1537 1538 SET_SecondaryColor3bEXT(dest, loopback_SecondaryColor3bEXT_f); 1539 SET_SecondaryColor3dEXT(dest, loopback_SecondaryColor3dEXT_f); 1540 SET_SecondaryColor3iEXT(dest, loopback_SecondaryColor3iEXT_f); 1541 SET_SecondaryColor3sEXT(dest, loopback_SecondaryColor3sEXT_f); 1542 SET_SecondaryColor3uiEXT(dest, loopback_SecondaryColor3uiEXT_f); 1543 SET_SecondaryColor3usEXT(dest, loopback_SecondaryColor3usEXT_f); 1544 SET_SecondaryColor3ubEXT(dest, loopback_SecondaryColor3ubEXT_f); 1545 SET_SecondaryColor3bvEXT(dest, loopback_SecondaryColor3bvEXT_f); 1546 SET_SecondaryColor3dvEXT(dest, loopback_SecondaryColor3dvEXT_f); 1547 SET_SecondaryColor3ivEXT(dest, loopback_SecondaryColor3ivEXT_f); 1548 SET_SecondaryColor3svEXT(dest, loopback_SecondaryColor3svEXT_f); 1549 SET_SecondaryColor3uivEXT(dest, loopback_SecondaryColor3uivEXT_f); 1550 SET_SecondaryColor3usvEXT(dest, loopback_SecondaryColor3usvEXT_f); 1551 SET_SecondaryColor3ubvEXT(dest, loopback_SecondaryColor3ubvEXT_f); 1552 1553 SET_EdgeFlagv(dest, loopback_EdgeFlagv); 1554 1555 SET_Indexd(dest, loopback_Indexd); 1556 SET_Indexi(dest, loopback_Indexi); 1557 SET_Indexs(dest, loopback_Indexs); 1558 SET_Indexub(dest, loopback_Indexub); 1559 SET_Indexdv(dest, loopback_Indexdv); 1560 SET_Indexiv(dest, loopback_Indexiv); 1561 SET_Indexsv(dest, loopback_Indexsv); 1562 SET_Indexubv(dest, loopback_Indexubv); 1563 SET_Normal3b(dest, loopback_Normal3b); 1564 SET_Normal3d(dest, loopback_Normal3d); 1565 SET_Normal3i(dest, loopback_Normal3i); 1566 SET_Normal3s(dest, loopback_Normal3s); 1567 SET_Normal3bv(dest, loopback_Normal3bv); 1568 SET_Normal3dv(dest, loopback_Normal3dv); 1569 SET_Normal3iv(dest, loopback_Normal3iv); 1570 SET_Normal3sv(dest, loopback_Normal3sv); 1571 SET_TexCoord1d(dest, loopback_TexCoord1d); 1572 SET_TexCoord1i(dest, loopback_TexCoord1i); 1573 SET_TexCoord1s(dest, loopback_TexCoord1s); 1574 SET_TexCoord2d(dest, loopback_TexCoord2d); 1575 SET_TexCoord2s(dest, loopback_TexCoord2s); 1576 SET_TexCoord2i(dest, loopback_TexCoord2i); 1577 SET_TexCoord3d(dest, loopback_TexCoord3d); 1578 SET_TexCoord3i(dest, loopback_TexCoord3i); 1579 SET_TexCoord3s(dest, loopback_TexCoord3s); 1580 SET_TexCoord4d(dest, loopback_TexCoord4d); 1581 SET_TexCoord4i(dest, loopback_TexCoord4i); 1582 SET_TexCoord4s(dest, loopback_TexCoord4s); 1583 SET_TexCoord1dv(dest, loopback_TexCoord1dv); 1584 SET_TexCoord1iv(dest, loopback_TexCoord1iv); 1585 SET_TexCoord1sv(dest, loopback_TexCoord1sv); 1586 SET_TexCoord2dv(dest, loopback_TexCoord2dv); 1587 SET_TexCoord2iv(dest, loopback_TexCoord2iv); 1588 SET_TexCoord2sv(dest, loopback_TexCoord2sv); 1589 SET_TexCoord3dv(dest, loopback_TexCoord3dv); 1590 SET_TexCoord3iv(dest, loopback_TexCoord3iv); 1591 SET_TexCoord3sv(dest, loopback_TexCoord3sv); 1592 SET_TexCoord4dv(dest, loopback_TexCoord4dv); 1593 SET_TexCoord4iv(dest, loopback_TexCoord4iv); 1594 SET_TexCoord4sv(dest, loopback_TexCoord4sv); 1595 SET_Vertex2d(dest, loopback_Vertex2d); 1596 SET_Vertex2i(dest, loopback_Vertex2i); 1597 SET_Vertex2s(dest, loopback_Vertex2s); 1598 SET_Vertex3d(dest, loopback_Vertex3d); 1599 SET_Vertex3i(dest, loopback_Vertex3i); 1600 SET_Vertex3s(dest, loopback_Vertex3s); 1601 SET_Vertex4d(dest, loopback_Vertex4d); 1602 SET_Vertex4i(dest, loopback_Vertex4i); 1603 SET_Vertex4s(dest, loopback_Vertex4s); 1604 SET_Vertex2dv(dest, loopback_Vertex2dv); 1605 SET_Vertex2iv(dest, loopback_Vertex2iv); 1606 SET_Vertex2sv(dest, loopback_Vertex2sv); 1607 SET_Vertex3dv(dest, loopback_Vertex3dv); 1608 SET_Vertex3iv(dest, loopback_Vertex3iv); 1609 SET_Vertex3sv(dest, loopback_Vertex3sv); 1610 SET_Vertex4dv(dest, loopback_Vertex4dv); 1611 SET_Vertex4iv(dest, loopback_Vertex4iv); 1612 SET_Vertex4sv(dest, loopback_Vertex4sv); 1613 SET_MultiTexCoord1dARB(dest, loopback_MultiTexCoord1dARB); 1614 SET_MultiTexCoord1dvARB(dest, loopback_MultiTexCoord1dvARB); 1615 SET_MultiTexCoord1iARB(dest, loopback_MultiTexCoord1iARB); 1616 SET_MultiTexCoord1ivARB(dest, loopback_MultiTexCoord1ivARB); 1617 SET_MultiTexCoord1sARB(dest, loopback_MultiTexCoord1sARB); 1618 SET_MultiTexCoord1svARB(dest, loopback_MultiTexCoord1svARB); 1619 SET_MultiTexCoord2dARB(dest, loopback_MultiTexCoord2dARB); 1620 SET_MultiTexCoord2dvARB(dest, loopback_MultiTexCoord2dvARB); 1621 SET_MultiTexCoord2iARB(dest, loopback_MultiTexCoord2iARB); 1622 SET_MultiTexCoord2ivARB(dest, loopback_MultiTexCoord2ivARB); 1623 SET_MultiTexCoord2sARB(dest, loopback_MultiTexCoord2sARB); 1624 SET_MultiTexCoord2svARB(dest, loopback_MultiTexCoord2svARB); 1625 SET_MultiTexCoord3dARB(dest, loopback_MultiTexCoord3dARB); 1626 SET_MultiTexCoord3dvARB(dest, loopback_MultiTexCoord3dvARB); 1627 SET_MultiTexCoord3iARB(dest, loopback_MultiTexCoord3iARB); 1628 SET_MultiTexCoord3ivARB(dest, loopback_MultiTexCoord3ivARB); 1629 SET_MultiTexCoord3sARB(dest, loopback_MultiTexCoord3sARB); 1630 SET_MultiTexCoord3svARB(dest, loopback_MultiTexCoord3svARB); 1631 SET_MultiTexCoord4dARB(dest, loopback_MultiTexCoord4dARB); 1632 SET_MultiTexCoord4dvARB(dest, loopback_MultiTexCoord4dvARB); 1633 SET_MultiTexCoord4iARB(dest, loopback_MultiTexCoord4iARB); 1634 SET_MultiTexCoord4ivARB(dest, loopback_MultiTexCoord4ivARB); 1635 SET_MultiTexCoord4sARB(dest, loopback_MultiTexCoord4sARB); 1636 SET_MultiTexCoord4svARB(dest, loopback_MultiTexCoord4svARB); 1637 SET_EvalCoord2dv(dest, loopback_EvalCoord2dv); 1638 SET_EvalCoord2fv(dest, loopback_EvalCoord2fv); 1639 SET_EvalCoord2d(dest, loopback_EvalCoord2d); 1640 SET_EvalCoord1dv(dest, loopback_EvalCoord1dv); 1641 SET_EvalCoord1fv(dest, loopback_EvalCoord1fv); 1642 SET_EvalCoord1d(dest, loopback_EvalCoord1d); 1643 SET_Materialf(dest, loopback_Materialf); 1644 SET_Materiali(dest, loopback_Materiali); 1645 SET_Materialiv(dest, loopback_Materialiv); 1646 SET_Rectd(dest, loopback_Rectd); 1647 SET_Rectdv(dest, loopback_Rectdv); 1648 SET_Rectfv(dest, loopback_Rectfv); 1649 SET_Recti(dest, loopback_Recti); 1650 SET_Rectiv(dest, loopback_Rectiv); 1651 SET_Rects(dest, loopback_Rects); 1652 SET_Rectsv(dest, loopback_Rectsv); 1653 SET_FogCoorddEXT(dest, loopback_FogCoorddEXT); 1654 SET_FogCoorddvEXT(dest, loopback_FogCoorddvEXT); 1655 } 1656 1657 if (ctx->API == API_OPENGL) { 1658 SET_VertexAttrib1sNV(dest, loopback_VertexAttrib1sNV); 1659 SET_VertexAttrib1dNV(dest, loopback_VertexAttrib1dNV); 1660 SET_VertexAttrib2sNV(dest, loopback_VertexAttrib2sNV); 1661 SET_VertexAttrib2dNV(dest, loopback_VertexAttrib2dNV); 1662 SET_VertexAttrib3sNV(dest, loopback_VertexAttrib3sNV); 1663 SET_VertexAttrib3dNV(dest, loopback_VertexAttrib3dNV); 1664 SET_VertexAttrib4sNV(dest, loopback_VertexAttrib4sNV); 1665 SET_VertexAttrib4dNV(dest, loopback_VertexAttrib4dNV); 1666 SET_VertexAttrib4ubNV(dest, loopback_VertexAttrib4ubNV); 1667 SET_VertexAttrib1svNV(dest, loopback_VertexAttrib1svNV); 1668 SET_VertexAttrib1dvNV(dest, loopback_VertexAttrib1dvNV); 1669 SET_VertexAttrib2svNV(dest, loopback_VertexAttrib2svNV); 1670 SET_VertexAttrib2dvNV(dest, loopback_VertexAttrib2dvNV); 1671 SET_VertexAttrib3svNV(dest, loopback_VertexAttrib3svNV); 1672 SET_VertexAttrib3dvNV(dest, loopback_VertexAttrib3dvNV); 1673 SET_VertexAttrib4svNV(dest, loopback_VertexAttrib4svNV); 1674 SET_VertexAttrib4dvNV(dest, loopback_VertexAttrib4dvNV); 1675 SET_VertexAttrib4ubvNV(dest, loopback_VertexAttrib4ubvNV); 1676 SET_VertexAttribs1svNV(dest, loopback_VertexAttribs1svNV); 1677 SET_VertexAttribs1fvNV(dest, loopback_VertexAttribs1fvNV); 1678 SET_VertexAttribs1dvNV(dest, loopback_VertexAttribs1dvNV); 1679 SET_VertexAttribs2svNV(dest, loopback_VertexAttribs2svNV); 1680 SET_VertexAttribs2fvNV(dest, loopback_VertexAttribs2fvNV); 1681 SET_VertexAttribs2dvNV(dest, loopback_VertexAttribs2dvNV); 1682 SET_VertexAttribs3svNV(dest, loopback_VertexAttribs3svNV); 1683 SET_VertexAttribs3fvNV(dest, loopback_VertexAttribs3fvNV); 1684 SET_VertexAttribs3dvNV(dest, loopback_VertexAttribs3dvNV); 1685 SET_VertexAttribs4svNV(dest, loopback_VertexAttribs4svNV); 1686 SET_VertexAttribs4fvNV(dest, loopback_VertexAttribs4fvNV); 1687 SET_VertexAttribs4dvNV(dest, loopback_VertexAttribs4dvNV); 1688 SET_VertexAttribs4ubvNV(dest, loopback_VertexAttribs4ubvNV); 1689 } 1690 1691 if (ctx->API != API_OPENGLES2) { 1692 SET_VertexAttrib1sARB(dest, loopback_VertexAttrib1sARB); 1693 SET_VertexAttrib1dARB(dest, loopback_VertexAttrib1dARB); 1694 SET_VertexAttrib2sARB(dest, loopback_VertexAttrib2sARB); 1695 SET_VertexAttrib2dARB(dest, loopback_VertexAttrib2dARB); 1696 SET_VertexAttrib3sARB(dest, loopback_VertexAttrib3sARB); 1697 SET_VertexAttrib3dARB(dest, loopback_VertexAttrib3dARB); 1698 SET_VertexAttrib4sARB(dest, loopback_VertexAttrib4sARB); 1699 SET_VertexAttrib4dARB(dest, loopback_VertexAttrib4dARB); 1700 SET_VertexAttrib1svARB(dest, loopback_VertexAttrib1svARB); 1701 SET_VertexAttrib1dvARB(dest, loopback_VertexAttrib1dvARB); 1702 SET_VertexAttrib2svARB(dest, loopback_VertexAttrib2svARB); 1703 SET_VertexAttrib2dvARB(dest, loopback_VertexAttrib2dvARB); 1704 SET_VertexAttrib3svARB(dest, loopback_VertexAttrib3svARB); 1705 SET_VertexAttrib3dvARB(dest, loopback_VertexAttrib3dvARB); 1706 SET_VertexAttrib4svARB(dest, loopback_VertexAttrib4svARB); 1707 SET_VertexAttrib4dvARB(dest, loopback_VertexAttrib4dvARB); 1708 SET_VertexAttrib4NubARB(dest, loopback_VertexAttrib4NubARB); 1709 SET_VertexAttrib4NubvARB(dest, loopback_VertexAttrib4NubvARB); 1710 SET_VertexAttrib4bvARB(dest, loopback_VertexAttrib4bvARB); 1711 SET_VertexAttrib4ivARB(dest, loopback_VertexAttrib4ivARB); 1712 SET_VertexAttrib4ubvARB(dest, loopback_VertexAttrib4ubvARB); 1713 SET_VertexAttrib4usvARB(dest, loopback_VertexAttrib4usvARB); 1714 SET_VertexAttrib4uivARB(dest, loopback_VertexAttrib4uivARB); 1715 SET_VertexAttrib4NbvARB(dest, loopback_VertexAttrib4NbvARB); 1716 SET_VertexAttrib4NsvARB(dest, loopback_VertexAttrib4NsvARB); 1717 SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB); 1718 SET_VertexAttrib4NivARB(dest, loopback_VertexAttrib4NivARB); 1719 SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB); 1720 1721 /* GL_EXT_gpu_shader4, GL 3.0 */ 1722 SET_VertexAttribI1ivEXT(dest, loopback_VertexAttribI1iv); 1723 SET_VertexAttribI1uivEXT(dest, loopback_VertexAttribI1uiv); 1724 SET_VertexAttribI4bvEXT(dest, loopback_VertexAttribI4bv); 1725 SET_VertexAttribI4svEXT(dest, loopback_VertexAttribI4sv); 1726 SET_VertexAttribI4ubvEXT(dest, loopback_VertexAttribI4ubv); 1727 SET_VertexAttribI4usvEXT(dest, loopback_VertexAttribI4usv); 1728 } 1729 } 1730 1731 1732 #endif /* FEATURE_beginend */ 1733