335dc32ad23f7aa0d0e2ae31f7f8fcd0fce08637
[mesa.git] / src / mesa / main / api_loopback.c
1 /*
2 * Mesa 3-D graphics library
3 * Version: 5.1
4 *
5 * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 * Authors:
25 * Keith Whitwell <keith@tungstengraphics.com>
26 */
27
28
29 #include "glheader.h"
30 #include "glapi.h"
31 #include "glapitable.h"
32 #include "macros.h"
33 #include "colormac.h"
34 #include "api_loopback.h"
35
36 /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
37 * calls to a smaller set of driver-provided formats. Currently just
38 * go back to dispatch to find these (eg. call glNormal3f directly),
39 * hence 'loopback'.
40 *
41 * The driver must supply all of the remaining entry points, which are
42 * listed in dd.h. The easiest way for a driver to do this is to
43 * install the supplied software t&l module.
44 */
45 #define COLORUBV(v) glColor4ubv(v)
46 #define COLORF(r,g,b,a) glColor4f(r,g,b,a)
47 #define VERTEX2(x,y) glVertex2f(x,y)
48 #define VERTEX3(x,y,z) glVertex3f(x,y,z)
49 #define VERTEX4(x,y,z,w) glVertex4f(x,y,z,w)
50 #define NORMAL(x,y,z) glNormal3f(x,y,z)
51 #define TEXCOORD1(s) glTexCoord1f(s)
52 #define TEXCOORD2(s,t) glTexCoord2f(s,t)
53 #define TEXCOORD3(s,t,u) glTexCoord3f(s,t,u)
54 #define TEXCOORD4(s,t,u,v) glTexCoord4f(s,t,u,v)
55 #define INDEX(c) glIndexi(c)
56 #define MULTI_TEXCOORD1(z,s) glMultiTexCoord1fARB(z,s)
57 #define MULTI_TEXCOORD2(z,s,t) glMultiTexCoord2fARB(z,s,t)
58 #define MULTI_TEXCOORD3(z,s,t,u) glMultiTexCoord3fARB(z,s,t,u)
59 #define MULTI_TEXCOORD4(z,s,t,u,v) glMultiTexCoord4fARB(z,s,t,u,v)
60 #define EVALCOORD1(x) glEvalCoord1f(x)
61 #define EVALCOORD2(x,y) glEvalCoord2f(x,y)
62 #define MATERIALFV(a,b,c) glMaterialfv(a,b,c)
63 #define RECTF(a,b,c,d) glRectf(a,b,c,d)
64
65 #define ATTRIB(index, x, y, z, w) _glapi_Dispatch->VertexAttrib4fNV(index, x, y, z, w)
66
67
68 #define FOGCOORDF(x) _glapi_Dispatch->FogCoordfEXT(x)
69 #define SECONDARYCOLORUB(a,b,c) _glapi_Dispatch->SecondaryColor3ubEXT(a,b,c)
70 #define SECONDARYCOLORF(a,b,c) _glapi_Dispatch->SecondaryColor3fEXT(a,b,c)
71
72
73 static void
74 loopback_Color3b( GLbyte red, GLbyte green, GLbyte blue )
75 {
76 GLubyte col[4];
77 col[0] = BYTE_TO_UBYTE(red);
78 col[1] = BYTE_TO_UBYTE(green);
79 col[2] = BYTE_TO_UBYTE(blue);
80 col[3] = 255;
81 COLORUBV(col);
82 }
83
84 static void
85 loopback_Color3d( GLdouble red, GLdouble green, GLdouble blue )
86 {
87 GLubyte col[4];
88 GLfloat r = (GLfloat) red;
89 GLfloat g = (GLfloat) green;
90 GLfloat b = (GLfloat) blue;
91 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
92 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
93 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
94 col[3] = 255;
95 COLORUBV( col );
96 }
97
98 static void
99 loopback_Color3i( GLint red, GLint green, GLint blue )
100 {
101 GLubyte col[4];
102 col[0] = INT_TO_UBYTE(red);
103 col[1] = INT_TO_UBYTE(green);
104 col[2] = INT_TO_UBYTE(blue);
105 col[3] = 255;
106 COLORUBV(col);
107 }
108
109 static void
110 loopback_Color3s( GLshort red, GLshort green, GLshort blue )
111 {
112 GLubyte col[4];
113 col[0] = SHORT_TO_UBYTE(red);
114 col[1] = SHORT_TO_UBYTE(green);
115 col[2] = SHORT_TO_UBYTE(blue);
116 col[3] = 255;
117 COLORUBV(col);
118 }
119
120 static void
121 loopback_Color3ui( GLuint red, GLuint green, GLuint blue )
122 {
123 GLubyte col[4];
124 col[0] = UINT_TO_UBYTE(red);
125 col[1] = UINT_TO_UBYTE(green);
126 col[2] = UINT_TO_UBYTE(blue);
127 col[3] = 255;
128 COLORUBV(col);
129 }
130
131 static void
132 loopback_Color3us( GLushort red, GLushort green, GLushort blue )
133 {
134 GLubyte col[4];
135 col[0] = USHORT_TO_UBYTE(red);
136 col[1] = USHORT_TO_UBYTE(green);
137 col[2] = USHORT_TO_UBYTE(blue);
138 col[3] = 255;
139 COLORUBV(col);
140 }
141
142 static void
143 loopback_Color4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha )
144 {
145 GLubyte col[4];
146 col[0] = BYTE_TO_UBYTE(red);
147 col[1] = BYTE_TO_UBYTE(green);
148 col[2] = BYTE_TO_UBYTE(blue);
149 col[3] = 255;
150 COLORUBV(col);
151 }
152
153 static void
154 loopback_Color4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha )
155 {
156 GLubyte col[4];
157 GLfloat r = (GLfloat) red;
158 GLfloat g = (GLfloat) green;
159 GLfloat b = (GLfloat) blue;
160 GLfloat a = (GLfloat) alpha;
161 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
162 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
163 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
164 UNCLAMPED_FLOAT_TO_UBYTE(col[3], a);
165 COLORUBV( col );
166 }
167
168 static void
169 loopback_Color4i( GLint red, GLint green, GLint blue, GLint alpha )
170 {
171 GLubyte col[4];
172 col[0] = INT_TO_UBYTE(red);
173 col[1] = INT_TO_UBYTE(green);
174 col[2] = INT_TO_UBYTE(blue);
175 col[3] = INT_TO_UBYTE(alpha);
176 COLORUBV(col);
177 }
178
179 static void
180 loopback_Color4s( GLshort red, GLshort green, GLshort blue,
181 GLshort alpha )
182 {
183 GLubyte col[4];
184 col[0] = SHORT_TO_UBYTE(red);
185 col[1] = SHORT_TO_UBYTE(green);
186 col[2] = SHORT_TO_UBYTE(blue);
187 col[3] = SHORT_TO_UBYTE(alpha);
188 COLORUBV(col);
189 }
190
191 static void
192 loopback_Color4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha )
193 {
194 GLubyte col[4];
195 col[0] = UINT_TO_UBYTE(red);
196 col[1] = UINT_TO_UBYTE(green);
197 col[2] = UINT_TO_UBYTE(blue);
198 col[3] = UINT_TO_UBYTE(alpha);
199 COLORUBV(col);
200 }
201
202 static void
203 loopback_Color4us( GLushort red, GLushort green, GLushort blue,
204 GLushort alpha )
205 {
206 GLubyte col[4];
207 col[0] = USHORT_TO_UBYTE(red);
208 col[1] = USHORT_TO_UBYTE(green);
209 col[2] = USHORT_TO_UBYTE(blue);
210 col[3] = USHORT_TO_UBYTE(alpha);
211 COLORUBV(col);
212 }
213
214 static void
215 loopback_Color3bv( const GLbyte *v )
216 {
217 GLubyte col[4];
218 col[0] = BYTE_TO_UBYTE(v[0]);
219 col[1] = BYTE_TO_UBYTE(v[1]);
220 col[2] = BYTE_TO_UBYTE(v[2]);
221 col[3] = 255;
222 COLORUBV(col);
223 }
224
225 static void
226 loopback_Color3dv( const GLdouble *v )
227 {
228 GLubyte col[4];
229 GLfloat r = (GLfloat) v[0];
230 GLfloat g = (GLfloat) v[1];
231 GLfloat b = (GLfloat) v[2];
232 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
233 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
234 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
235 col[3] = 255;
236 COLORUBV( col );
237 }
238
239 static void
240 loopback_Color3iv( const GLint *v )
241 {
242 GLubyte col[4];
243 col[0] = INT_TO_UBYTE(v[0]);
244 col[1] = INT_TO_UBYTE(v[1]);
245 col[2] = INT_TO_UBYTE(v[2]);
246 col[3] = 255;
247 COLORUBV(col);
248 }
249
250 static void
251 loopback_Color3sv( const GLshort *v )
252 {
253 GLubyte col[4];
254 col[0] = SHORT_TO_UBYTE(v[0]);
255 col[1] = SHORT_TO_UBYTE(v[1]);
256 col[2] = SHORT_TO_UBYTE(v[2]);
257 col[3] = 255;
258 COLORUBV(col);
259 }
260
261 static void
262 loopback_Color3uiv( const GLuint *v )
263 {
264 GLubyte col[4];
265 col[0] = UINT_TO_UBYTE(v[0]);
266 col[1] = UINT_TO_UBYTE(v[1]);
267 col[2] = UINT_TO_UBYTE(v[2]);
268 col[3] = 255;
269 COLORUBV(col);
270 }
271
272 static void
273 loopback_Color3usv( const GLushort *v )
274 {
275 GLubyte col[4];
276 col[0] = USHORT_TO_UBYTE(v[0]);
277 col[1] = USHORT_TO_UBYTE(v[1]);
278 col[2] = USHORT_TO_UBYTE(v[2]);
279 col[3] = 255;
280 COLORUBV(col);
281
282 }
283
284 static void
285 loopback_Color4bv( const GLbyte *v )
286 {
287 GLubyte col[4];
288 col[0] = BYTE_TO_UBYTE(v[0]);
289 col[1] = BYTE_TO_UBYTE(v[1]);
290 col[2] = BYTE_TO_UBYTE(v[2]);
291 col[3] = BYTE_TO_UBYTE(v[3]);
292 COLORUBV(col);
293 }
294
295 static void
296 loopback_Color4dv( const GLdouble *v )
297 {
298 GLubyte col[4];
299 GLfloat r = (GLfloat) v[0];
300 GLfloat g = (GLfloat) v[1];
301 GLfloat b = (GLfloat) v[2];
302 GLfloat a = (GLfloat) v[3];
303 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
304 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
305 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
306 UNCLAMPED_FLOAT_TO_UBYTE(col[3], a);
307 COLORUBV( col );
308 }
309
310 static void
311 loopback_Color4iv( const GLint *v )
312 {
313 GLubyte col[4];
314 col[0] = INT_TO_UBYTE(v[0]);
315 col[1] = INT_TO_UBYTE(v[1]);
316 col[2] = INT_TO_UBYTE(v[2]);
317 col[3] = INT_TO_UBYTE(v[3]);
318 COLORUBV(col);
319 }
320
321 static void
322 loopback_Color4sv( const GLshort *v)
323 {
324 GLubyte col[4];
325 col[0] = SHORT_TO_UBYTE(v[0]);
326 col[1] = SHORT_TO_UBYTE(v[1]);
327 col[2] = SHORT_TO_UBYTE(v[2]);
328 col[3] = SHORT_TO_UBYTE(v[3]);
329 COLORUBV(col);
330 }
331
332 static void
333 loopback_Color4uiv( const GLuint *v)
334 {
335 GLubyte col[4];
336 col[0] = UINT_TO_UBYTE(v[0]);
337 col[1] = UINT_TO_UBYTE(v[1]);
338 col[2] = UINT_TO_UBYTE(v[2]);
339 col[3] = UINT_TO_UBYTE(v[3]);
340 COLORUBV(col);
341 }
342
343 static void
344 loopback_Color4usv( const GLushort *v)
345 {
346 GLubyte col[4];
347 col[0] = USHORT_TO_UBYTE(v[0]);
348 col[1] = USHORT_TO_UBYTE(v[1]);
349 col[2] = USHORT_TO_UBYTE(v[2]);
350 col[3] = USHORT_TO_UBYTE(v[3]);
351 COLORUBV(col);
352 }
353
354 static void
355 loopback_Color3b_f( GLbyte red, GLbyte green, GLbyte blue )
356 {
357 COLORF( BYTE_TO_FLOAT(red),
358 BYTE_TO_FLOAT(green),
359 BYTE_TO_FLOAT(blue),
360 1.0 );
361 }
362
363 static void
364 loopback_Color3d_f( GLdouble red, GLdouble green, GLdouble blue )
365 {
366 COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, 1.0 );
367 }
368
369 static void
370 loopback_Color3i_f( GLint red, GLint green, GLint blue )
371 {
372 COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
373 INT_TO_FLOAT(blue), 1.0);
374 }
375
376 static void
377 loopback_Color3s_f( GLshort red, GLshort green, GLshort blue )
378 {
379 COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
380 SHORT_TO_FLOAT(blue), 1.0);
381 }
382
383 static void
384 loopback_Color3ui_f( GLuint red, GLuint green, GLuint blue )
385 {
386 COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
387 UINT_TO_FLOAT(blue), 1.0 );
388 }
389
390 static void
391 loopback_Color3us_f( GLushort red, GLushort green, GLushort blue )
392 {
393 COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
394 USHORT_TO_FLOAT(blue), 1.0 );
395 }
396
397
398 static void
399 loopback_Color3bv_f( const GLbyte *v )
400 {
401 COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
402 BYTE_TO_FLOAT(v[2]), 1.0 );
403 }
404
405 static void
406 loopback_Color3dv_f( const GLdouble *v )
407 {
408 COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0 );
409 }
410
411 static void
412 loopback_Color3iv_f( const GLint *v )
413 {
414 COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
415 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) );
416 }
417
418 static void
419 loopback_Color3sv_f( const GLshort *v )
420 {
421 COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
422 SHORT_TO_FLOAT(v[2]), 1.0 );
423 }
424
425 static void
426 loopback_Color3uiv_f( const GLuint *v )
427 {
428 COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
429 UINT_TO_FLOAT(v[2]), 1.0 );
430 }
431
432 static void
433 loopback_Color3usv_f( const GLushort *v )
434 {
435 COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
436 USHORT_TO_FLOAT(v[2]), 1.0 );
437 }
438
439
440 static void
441 loopback_Color4b_f( GLbyte red, GLbyte green, GLbyte blue,
442 GLbyte alpha )
443 {
444 COLORF( BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green),
445 BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha) );
446 }
447
448 static void
449 loopback_Color4d_f( GLdouble red, GLdouble green, GLdouble blue,
450 GLdouble alpha )
451 {
452 COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, (GLfloat) alpha );
453 }
454
455 static void
456 loopback_Color4i_f( GLint red, GLint green, GLint blue, GLint alpha )
457 {
458 COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
459 INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha) );
460 }
461
462 static void
463 loopback_Color4s_f( GLshort red, GLshort green, GLshort blue,
464 GLshort alpha )
465 {
466 COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
467 SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha) );
468 }
469
470 static void
471 loopback_Color4ui_f( GLuint red, GLuint green, GLuint blue, GLuint alpha )
472 {
473 COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
474 UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha) );
475 }
476
477 static void
478 loopback_Color4us_f( GLushort red, GLushort green, GLushort blue, GLushort alpha )
479 {
480 COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
481 USHORT_TO_FLOAT(blue), USHORT_TO_FLOAT(alpha) );
482 }
483
484
485 static void
486 loopback_Color4iv_f( const GLint *v )
487 {
488 COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
489 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) );
490 }
491
492
493 static void
494 loopback_Color4bv_f( const GLbyte *v )
495 {
496 COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
497 BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]) );
498 }
499
500 static void
501 loopback_Color4dv_f( const GLdouble *v )
502 {
503 COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3] );
504 }
505
506
507 static void
508 loopback_Color4sv_f( const GLshort *v)
509 {
510 COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
511 SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]) );
512 }
513
514
515 static void
516 loopback_Color4uiv_f( const GLuint *v)
517 {
518 COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
519 UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]) );
520 }
521
522 static void
523 loopback_Color4usv_f( const GLushort *v)
524 {
525 COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
526 USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]) );
527 }
528
529 static void
530 loopback_FogCoorddEXT( GLdouble d )
531 {
532 FOGCOORDF( (GLfloat) d );
533 }
534
535 static void
536 loopback_FogCoorddvEXT( const GLdouble *v )
537 {
538 FOGCOORDF( (GLfloat) *v );
539 }
540
541
542 static void
543 loopback_Indexd( GLdouble c )
544 {
545 INDEX( (GLint) c );
546 }
547
548 static void
549 loopback_Indexf( GLfloat c )
550 {
551 INDEX( (GLuint) (GLint) c );
552 }
553
554 static void
555 loopback_Indexs( GLshort c )
556 {
557 INDEX( (GLint) c );
558 }
559
560 static void
561 loopback_Indexub( GLubyte c )
562 {
563 INDEX( (GLint) c );
564 }
565
566 static void
567 loopback_Indexdv( const GLdouble *c )
568 {
569 INDEX( (GLint) (GLint) *c );
570 }
571
572 static void
573 loopback_Indexfv( const GLfloat *c )
574 {
575 INDEX( (GLint) (GLint) *c );
576 }
577
578 static void
579 loopback_Indexiv( const GLint *c )
580 {
581 INDEX( *c );
582 }
583
584 static void
585 loopback_Indexsv( const GLshort *c )
586 {
587 INDEX( (GLint) *c );
588 }
589
590 static void
591 loopback_Indexubv( const GLubyte *c )
592 {
593 INDEX( (GLint) *c );
594 }
595
596 static void
597 loopback_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz )
598 {
599 NORMAL( BYTE_TO_FLOAT(nx), BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) );
600 }
601
602 static void
603 loopback_Normal3d( GLdouble nx, GLdouble ny, GLdouble nz )
604 {
605 NORMAL((GLfloat) nx, (GLfloat) ny, (GLfloat) nz);
606 }
607
608 static void
609 loopback_Normal3i( GLint nx, GLint ny, GLint nz )
610 {
611 NORMAL( INT_TO_FLOAT(nx), INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) );
612 }
613
614 static void
615 loopback_Normal3s( GLshort nx, GLshort ny, GLshort nz )
616 {
617 NORMAL( SHORT_TO_FLOAT(nx), SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) );
618 }
619
620 static void
621 loopback_Normal3bv( const GLbyte *v )
622 {
623 NORMAL( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) );
624 }
625
626 static void
627 loopback_Normal3dv( const GLdouble *v )
628 {
629 NORMAL( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
630 }
631
632 static void
633 loopback_Normal3iv( const GLint *v )
634 {
635 NORMAL( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) );
636 }
637
638 static void
639 loopback_Normal3sv( const GLshort *v )
640 {
641 NORMAL( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) );
642 }
643
644 static void
645 loopback_TexCoord1d( GLdouble s )
646 {
647 TEXCOORD1((GLfloat) s);
648 }
649
650 static void
651 loopback_TexCoord1i( GLint s )
652 {
653 TEXCOORD1((GLfloat) s);
654 }
655
656 static void
657 loopback_TexCoord1s( GLshort s )
658 {
659 TEXCOORD1((GLfloat) s);
660 }
661
662 static void
663 loopback_TexCoord2d( GLdouble s, GLdouble t )
664 {
665 TEXCOORD2((GLfloat) s,(GLfloat) t);
666 }
667
668 static void
669 loopback_TexCoord2s( GLshort s, GLshort t )
670 {
671 TEXCOORD2((GLfloat) s,(GLfloat) t);
672 }
673
674 static void
675 loopback_TexCoord2i( GLint s, GLint t )
676 {
677 TEXCOORD2((GLfloat) s,(GLfloat) t);
678 }
679
680 static void
681 loopback_TexCoord3d( GLdouble s, GLdouble t, GLdouble r )
682 {
683 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
684 }
685
686 static void
687 loopback_TexCoord3i( GLint s, GLint t, GLint r )
688 {
689 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
690 }
691
692 static void
693 loopback_TexCoord3s( GLshort s, GLshort t, GLshort r )
694 {
695 TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
696 }
697
698 static void
699 loopback_TexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
700 {
701 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
702 }
703
704 static void
705 loopback_TexCoord4i( GLint s, GLint t, GLint r, GLint q )
706 {
707 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
708 }
709
710 static void
711 loopback_TexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
712 {
713 TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
714 }
715
716 static void
717 loopback_TexCoord1dv( const GLdouble *v )
718 {
719 TEXCOORD1((GLfloat) v[0]);
720 }
721
722 static void
723 loopback_TexCoord1iv( const GLint *v )
724 {
725 TEXCOORD1((GLfloat) v[0]);
726 }
727
728 static void
729 loopback_TexCoord1sv( const GLshort *v )
730 {
731 TEXCOORD1((GLfloat) v[0]);
732 }
733
734 static void
735 loopback_TexCoord2dv( const GLdouble *v )
736 {
737 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
738 }
739
740 static void
741 loopback_TexCoord2iv( const GLint *v )
742 {
743 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
744 }
745
746 static void
747 loopback_TexCoord2sv( const GLshort *v )
748 {
749 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
750 }
751
752 static void
753 loopback_TexCoord3dv( const GLdouble *v )
754 {
755 TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
756 }
757
758 static void
759 loopback_TexCoord3iv( const GLint *v )
760 {
761 TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
762 }
763
764 static void
765 loopback_TexCoord3sv( const GLshort *v )
766 {
767 TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
768 }
769
770 static void
771 loopback_TexCoord4dv( const GLdouble *v )
772 {
773 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
774 }
775
776 static void
777 loopback_TexCoord4iv( const GLint *v )
778 {
779 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
780 }
781
782 static void
783 loopback_TexCoord4sv( const GLshort *v )
784 {
785 TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
786 }
787
788 static void
789 loopback_Vertex2d( GLdouble x, GLdouble y )
790 {
791 VERTEX2( (GLfloat) x, (GLfloat) y );
792 }
793
794 static void
795 loopback_Vertex2i( GLint x, GLint y )
796 {
797 VERTEX2( (GLfloat) x, (GLfloat) y );
798 }
799
800 static void
801 loopback_Vertex2s( GLshort x, GLshort y )
802 {
803 VERTEX2( (GLfloat) x, (GLfloat) y );
804 }
805
806 static void
807 loopback_Vertex3d( GLdouble x, GLdouble y, GLdouble z )
808 {
809 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
810 }
811
812 static void
813 loopback_Vertex3i( GLint x, GLint y, GLint z )
814 {
815 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
816 }
817
818 static void
819 loopback_Vertex3s( GLshort x, GLshort y, GLshort z )
820 {
821 VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
822 }
823
824 static void
825 loopback_Vertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
826 {
827 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
828 }
829
830 static void
831 loopback_Vertex4i( GLint x, GLint y, GLint z, GLint w )
832 {
833 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
834 }
835
836 static void
837 loopback_Vertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
838 {
839 VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
840 }
841
842 static void
843 loopback_Vertex2dv( const GLdouble *v )
844 {
845 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
846 }
847
848 static void
849 loopback_Vertex2iv( const GLint *v )
850 {
851 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
852 }
853
854 static void
855 loopback_Vertex2sv( const GLshort *v )
856 {
857 VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
858 }
859
860 static void
861 loopback_Vertex3dv( const GLdouble *v )
862 {
863 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
864 }
865
866 static void
867 loopback_Vertex3iv( const GLint *v )
868 {
869 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
870 }
871
872 static void
873 loopback_Vertex3sv( const GLshort *v )
874 {
875 VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
876 }
877
878 static void
879 loopback_Vertex4dv( const GLdouble *v )
880 {
881 VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
882 (GLfloat) v[2], (GLfloat) v[3] );
883 }
884
885 static void
886 loopback_Vertex4iv( const GLint *v )
887 {
888 VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
889 (GLfloat) v[2], (GLfloat) v[3] );
890 }
891
892 static void
893 loopback_Vertex4sv( const GLshort *v )
894 {
895 VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
896 (GLfloat) v[2], (GLfloat) v[3] );
897 }
898
899 static void
900 loopback_MultiTexCoord1dARB(GLenum target, GLdouble s)
901 {
902 MULTI_TEXCOORD1( target, (GLfloat) s );
903 }
904
905 static void
906 loopback_MultiTexCoord1dvARB(GLenum target, const GLdouble *v)
907 {
908 MULTI_TEXCOORD1( target, (GLfloat) v[0] );
909 }
910
911 static void
912 loopback_MultiTexCoord1iARB(GLenum target, GLint s)
913 {
914 MULTI_TEXCOORD1( target, (GLfloat) s );
915 }
916
917 static void
918 loopback_MultiTexCoord1ivARB(GLenum target, const GLint *v)
919 {
920 MULTI_TEXCOORD1( target, (GLfloat) v[0] );
921 }
922
923 static void
924 loopback_MultiTexCoord1sARB(GLenum target, GLshort s)
925 {
926 MULTI_TEXCOORD1( target, (GLfloat) s );
927 }
928
929 static void
930 loopback_MultiTexCoord1svARB(GLenum target, const GLshort *v)
931 {
932 MULTI_TEXCOORD1( target, (GLfloat) v[0] );
933 }
934
935 static void
936 loopback_MultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t)
937 {
938 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
939 }
940
941 static void
942 loopback_MultiTexCoord2dvARB(GLenum target, const GLdouble *v)
943 {
944 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
945 }
946
947 static void
948 loopback_MultiTexCoord2iARB(GLenum target, GLint s, GLint t)
949 {
950 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
951 }
952
953 static void
954 loopback_MultiTexCoord2ivARB(GLenum target, const GLint *v)
955 {
956 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
957 }
958
959 static void
960 loopback_MultiTexCoord2sARB(GLenum target, GLshort s, GLshort t)
961 {
962 MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
963 }
964
965 static void
966 loopback_MultiTexCoord2svARB(GLenum target, const GLshort *v)
967 {
968 MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
969 }
970
971 static void
972 loopback_MultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r)
973 {
974 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
975 }
976
977 static void
978 loopback_MultiTexCoord3dvARB(GLenum target, const GLdouble *v)
979 {
980 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
981 }
982
983 static void
984 loopback_MultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r)
985 {
986 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
987 }
988
989 static void
990 loopback_MultiTexCoord3ivARB(GLenum target, const GLint *v)
991 {
992 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
993 }
994
995 static void
996 loopback_MultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r)
997 {
998 MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
999 }
1000
1001 static void
1002 loopback_MultiTexCoord3svARB(GLenum target, const GLshort *v)
1003 {
1004 MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
1005 }
1006
1007 static void
1008 loopback_MultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
1009 {
1010 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
1011 (GLfloat) r, (GLfloat) q );
1012 }
1013
1014 static void
1015 loopback_MultiTexCoord4dvARB(GLenum target, const GLdouble *v)
1016 {
1017 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
1018 (GLfloat) v[2], (GLfloat) v[3] );
1019 }
1020
1021 static void
1022 loopback_MultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q)
1023 {
1024 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
1025 (GLfloat) r, (GLfloat) q );
1026 }
1027
1028 static void
1029 loopback_MultiTexCoord4ivARB(GLenum target, const GLint *v)
1030 {
1031 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
1032 (GLfloat) v[2], (GLfloat) v[3] );
1033 }
1034
1035 static void
1036 loopback_MultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
1037 {
1038 MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
1039 (GLfloat) r, (GLfloat) q );
1040 }
1041
1042 static void
1043 loopback_MultiTexCoord4svARB(GLenum target, const GLshort *v)
1044 {
1045 MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
1046 (GLfloat) v[2], (GLfloat) v[3] );
1047 }
1048
1049 static void
1050 loopback_EvalCoord2dv( const GLdouble *u )
1051 {
1052 EVALCOORD2( (GLfloat) u[0], (GLfloat) u[1] );
1053 }
1054
1055 static void
1056 loopback_EvalCoord2fv( const GLfloat *u )
1057 {
1058 EVALCOORD2( u[0], u[1] );
1059 }
1060
1061 static void
1062 loopback_EvalCoord2d( GLdouble u, GLdouble v )
1063 {
1064 EVALCOORD2( (GLfloat) u, (GLfloat) v );
1065 }
1066
1067 static void
1068 loopback_EvalCoord1dv( const GLdouble *u )
1069 {
1070 EVALCOORD1( (GLfloat) *u );
1071 }
1072
1073 static void
1074 loopback_EvalCoord1fv( const GLfloat *u )
1075 {
1076 EVALCOORD1( (GLfloat) *u );
1077 }
1078
1079 static void
1080 loopback_EvalCoord1d( GLdouble u )
1081 {
1082 EVALCOORD1( (GLfloat) u );
1083 }
1084
1085 static void
1086 loopback_Materialf( GLenum face, GLenum pname, GLfloat param )
1087 {
1088 GLfloat fparam[4];
1089 fparam[0] = param;
1090 MATERIALFV( face, pname, fparam );
1091 }
1092
1093 static void
1094 loopback_Materiali(GLenum face, GLenum pname, GLint param )
1095 {
1096 GLfloat p = (GLfloat) param;
1097 MATERIALFV(face, pname, &p);
1098 }
1099
1100 static void
1101 loopback_Materialiv(GLenum face, GLenum pname, const GLint *params )
1102 {
1103 GLfloat fparam[4];
1104 switch (pname) {
1105 case GL_AMBIENT:
1106 case GL_DIFFUSE:
1107 case GL_SPECULAR:
1108 case GL_EMISSION:
1109 case GL_AMBIENT_AND_DIFFUSE:
1110 fparam[0] = INT_TO_FLOAT( params[0] );
1111 fparam[1] = INT_TO_FLOAT( params[1] );
1112 fparam[2] = INT_TO_FLOAT( params[2] );
1113 fparam[3] = INT_TO_FLOAT( params[3] );
1114 break;
1115 case GL_SHININESS:
1116 fparam[0] = (GLfloat) params[0];
1117 break;
1118 case GL_COLOR_INDEXES:
1119 fparam[0] = (GLfloat) params[0];
1120 fparam[1] = (GLfloat) params[1];
1121 fparam[2] = (GLfloat) params[2];
1122 break;
1123 default:
1124 ;
1125 }
1126 MATERIALFV(face, pname, fparam);
1127 }
1128
1129
1130 static void
1131 loopback_Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
1132 {
1133 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
1134 }
1135
1136 static void
1137 loopback_Rectdv(const GLdouble *v1, const GLdouble *v2)
1138 {
1139 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
1140 }
1141
1142 static void
1143 loopback_Rectfv(const GLfloat *v1, const GLfloat *v2)
1144 {
1145 RECTF(v1[0], v1[1], v2[0], v2[1]);
1146 }
1147
1148 static void
1149 loopback_Recti(GLint x1, GLint y1, GLint x2, GLint y2)
1150 {
1151 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
1152 }
1153
1154 static void
1155 loopback_Rectiv(const GLint *v1, const GLint *v2)
1156 {
1157 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
1158 }
1159
1160 static void
1161 loopback_Rects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
1162 {
1163 RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
1164 }
1165
1166 static void
1167 loopback_Rectsv(const GLshort *v1, const GLshort *v2)
1168 {
1169 RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
1170 }
1171
1172 static void
1173 loopback_SecondaryColor3bEXT( GLbyte red, GLbyte green, GLbyte blue )
1174 {
1175 SECONDARYCOLORUB( BYTE_TO_UBYTE(red),
1176 BYTE_TO_UBYTE(green),
1177 BYTE_TO_UBYTE(blue) );
1178 }
1179
1180 static void
1181 loopback_SecondaryColor3dEXT( GLdouble red, GLdouble green, GLdouble blue )
1182 {
1183 GLubyte col[3];
1184 GLfloat r = (GLfloat) red;
1185 GLfloat g = (GLfloat) green;
1186 GLfloat b = (GLfloat) blue;
1187 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
1188 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
1189 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
1190 SECONDARYCOLORUB( col[0], col[1], col[2] );
1191 }
1192
1193 static void
1194 loopback_SecondaryColor3iEXT( GLint red, GLint green, GLint blue )
1195 {
1196 SECONDARYCOLORUB( INT_TO_UBYTE(red),
1197 INT_TO_UBYTE(green),
1198 INT_TO_UBYTE(blue));
1199 }
1200
1201 static void
1202 loopback_SecondaryColor3sEXT( GLshort red, GLshort green, GLshort blue )
1203 {
1204 SECONDARYCOLORUB(SHORT_TO_UBYTE(red),
1205 SHORT_TO_UBYTE(green),
1206 SHORT_TO_UBYTE(blue));
1207 }
1208
1209 static void
1210 loopback_SecondaryColor3uiEXT( GLuint red, GLuint green, GLuint blue )
1211 {
1212 SECONDARYCOLORUB(UINT_TO_UBYTE(red),
1213 UINT_TO_UBYTE(green),
1214 UINT_TO_UBYTE(blue));
1215 }
1216
1217 static void
1218 loopback_SecondaryColor3usEXT( GLushort red, GLushort green, GLushort blue )
1219 {
1220 SECONDARYCOLORUB(USHORT_TO_UBYTE(red),
1221 USHORT_TO_UBYTE(green),
1222 USHORT_TO_UBYTE(blue));
1223 }
1224
1225 static void
1226 loopback_SecondaryColor3bvEXT( const GLbyte *v )
1227 {
1228 const GLfloat a = BYTE_TO_FLOAT(v[0]);
1229 const GLfloat b = BYTE_TO_FLOAT(v[1]);
1230 const GLfloat c = BYTE_TO_FLOAT(v[2]);
1231 SECONDARYCOLORF(a,b,c);
1232 }
1233
1234 static void
1235 loopback_SecondaryColor3dvEXT( const GLdouble *v )
1236 {
1237 GLubyte col[3];
1238 GLfloat r = (GLfloat) v[0];
1239 GLfloat g = (GLfloat) v[1];
1240 GLfloat b = (GLfloat) v[2];
1241 UNCLAMPED_FLOAT_TO_UBYTE(col[0], r);
1242 UNCLAMPED_FLOAT_TO_UBYTE(col[1], g);
1243 UNCLAMPED_FLOAT_TO_UBYTE(col[2], b);
1244 SECONDARYCOLORUB( col[0], col[1], col[2] );
1245 }
1246
1247 static void
1248 loopback_SecondaryColor3ivEXT( const GLint *v )
1249 {
1250 SECONDARYCOLORUB(INT_TO_UBYTE(v[0]),
1251 INT_TO_UBYTE(v[1]),
1252 INT_TO_UBYTE(v[2]));
1253 }
1254
1255 static void
1256 loopback_SecondaryColor3svEXT( const GLshort *v )
1257 {
1258 SECONDARYCOLORUB(SHORT_TO_UBYTE(v[0]),
1259 SHORT_TO_UBYTE(v[1]),
1260 SHORT_TO_UBYTE(v[2]));
1261 }
1262
1263 static void
1264 loopback_SecondaryColor3uivEXT( const GLuint *v )
1265 {
1266 SECONDARYCOLORUB(UINT_TO_UBYTE(v[0]),
1267 UINT_TO_UBYTE(v[1]),
1268 UINT_TO_UBYTE(v[2]));
1269 }
1270
1271 static void
1272 loopback_SecondaryColor3usvEXT( const GLushort *v )
1273 {
1274 SECONDARYCOLORUB(USHORT_TO_UBYTE(v[0]),
1275 USHORT_TO_UBYTE(v[1]),
1276 USHORT_TO_UBYTE(v[2]));
1277 }
1278
1279
1280 static void
1281 loopback_SecondaryColor3bEXT_f( GLbyte red, GLbyte green, GLbyte blue )
1282 {
1283 SECONDARYCOLORF( BYTE_TO_FLOAT(red),
1284 BYTE_TO_FLOAT(green),
1285 BYTE_TO_FLOAT(blue) );
1286 }
1287
1288 static void
1289 loopback_SecondaryColor3dEXT_f( GLdouble red, GLdouble green, GLdouble blue )
1290 {
1291 SECONDARYCOLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue );
1292 }
1293
1294 static void
1295 loopback_SecondaryColor3iEXT_f( GLint red, GLint green, GLint blue )
1296 {
1297 SECONDARYCOLORF( INT_TO_FLOAT(red),
1298 INT_TO_FLOAT(green),
1299 INT_TO_FLOAT(blue));
1300 }
1301
1302 static void
1303 loopback_SecondaryColor3sEXT_f( GLshort red, GLshort green, GLshort blue )
1304 {
1305 SECONDARYCOLORF(SHORT_TO_FLOAT(red),
1306 SHORT_TO_FLOAT(green),
1307 SHORT_TO_FLOAT(blue));
1308 }
1309
1310 static void
1311 loopback_SecondaryColor3uiEXT_f( GLuint red, GLuint green, GLuint blue )
1312 {
1313 SECONDARYCOLORF(UINT_TO_FLOAT(red),
1314 UINT_TO_FLOAT(green),
1315 UINT_TO_FLOAT(blue));
1316 }
1317
1318 static void
1319 loopback_SecondaryColor3usEXT_f( GLushort red, GLushort green, GLushort blue )
1320 {
1321 SECONDARYCOLORF(USHORT_TO_FLOAT(red),
1322 USHORT_TO_FLOAT(green),
1323 USHORT_TO_FLOAT(blue));
1324 }
1325
1326 static void
1327 loopback_SecondaryColor3bvEXT_f( const GLbyte *v )
1328 {
1329 SECONDARYCOLORF(BYTE_TO_FLOAT(v[0]),
1330 BYTE_TO_FLOAT(v[1]),
1331 BYTE_TO_FLOAT(v[2]));
1332 }
1333
1334 static void
1335 loopback_SecondaryColor3dvEXT_f( const GLdouble *v )
1336 {
1337 SECONDARYCOLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
1338 }
1339 static void
1340 loopback_SecondaryColor3ivEXT_f( const GLint *v )
1341 {
1342 SECONDARYCOLORF(INT_TO_FLOAT(v[0]),
1343 INT_TO_FLOAT(v[1]),
1344 INT_TO_FLOAT(v[2]));
1345 }
1346
1347 static void
1348 loopback_SecondaryColor3svEXT_f( const GLshort *v )
1349 {
1350 SECONDARYCOLORF(SHORT_TO_FLOAT(v[0]),
1351 SHORT_TO_FLOAT(v[1]),
1352 SHORT_TO_FLOAT(v[2]));
1353 }
1354
1355 static void
1356 loopback_SecondaryColor3uivEXT_f( const GLuint *v )
1357 {
1358 SECONDARYCOLORF(UINT_TO_FLOAT(v[0]),
1359 UINT_TO_FLOAT(v[1]),
1360 UINT_TO_FLOAT(v[2]));
1361 }
1362
1363 static void
1364 loopback_SecondaryColor3usvEXT_f( const GLushort *v )
1365 {
1366 SECONDARYCOLORF(USHORT_TO_FLOAT(v[0]),
1367 USHORT_TO_FLOAT(v[1]),
1368 USHORT_TO_FLOAT(v[2]));
1369 }
1370
1371
1372 /*
1373 * GL_NV_vertex_program
1374 */
1375
1376 static void
1377 loopback_VertexAttrib1sNV(GLuint index, GLshort x)
1378 {
1379 ATTRIB(index, (GLfloat) x, 0.0F, 0.0F, 1.0F);
1380 }
1381
1382 static void
1383 loopback_VertexAttrib1fNV(GLuint index, GLfloat x)
1384 {
1385 ATTRIB(index, x, 0.0F, 0.0F, 1.0F);
1386 }
1387
1388 static void
1389 loopback_VertexAttrib1dNV(GLuint index, GLdouble x)
1390 {
1391 ATTRIB(index, (GLfloat) x, 0.0F, 0.0F, 1.0F);
1392 }
1393
1394 static void
1395 loopback_VertexAttrib2sNV(GLuint index, GLshort x, GLshort y)
1396 {
1397 ATTRIB(index, (GLfloat) x, y, 0.0F, 1.0F);
1398 }
1399
1400 static void
1401 loopback_VertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y)
1402 {
1403 ATTRIB(index, (GLfloat) x, y, 0.0F, 1.0F);
1404 }
1405
1406 static void
1407 loopback_VertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y)
1408 {
1409 ATTRIB(index, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
1410 }
1411
1412 static void
1413 loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
1414 {
1415 ATTRIB(index, (GLfloat) x, y, z, 1.0F);
1416 }
1417
1418 static void
1419 loopback_VertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z)
1420 {
1421 ATTRIB(index, x, y, z, 1.0F);
1422 }
1423
1424 static void
1425 loopback_VertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z)
1426 {
1427 ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
1428 }
1429
1430 static void
1431 loopback_VertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
1432 {
1433 ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1434 }
1435
1436 static void
1437 loopback_VertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1438 {
1439 ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1440 }
1441
1442 static void
1443 loopback_VertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
1444 {
1445 ATTRIB(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y),
1446 UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w));
1447 }
1448
1449 static void
1450 loopback_VertexAttrib1svNV(GLuint index, const GLshort *v)
1451 {
1452 ATTRIB(index, (GLfloat) v[0], 0.0F, 0.0F, 1.0F);
1453 }
1454
1455 static void
1456 loopback_VertexAttrib1fvNV(GLuint index, const GLfloat *v)
1457 {
1458 ATTRIB(index, v[0], 0.0F, 0.0F, 1.0F);
1459 }
1460
1461 static void
1462 loopback_VertexAttrib1dvNV(GLuint index, const GLdouble *v)
1463 {
1464 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1465 }
1466
1467 static void
1468 loopback_VertexAttrib2svNV(GLuint index, const GLshort *v)
1469 {
1470 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1471 }
1472
1473 static void
1474 loopback_VertexAttrib2fvNV(GLuint index, const GLfloat *v)
1475 {
1476 ATTRIB(index, v[0], v[1], 0.0F, 1.0F);
1477 }
1478
1479 static void
1480 loopback_VertexAttrib2dvNV(GLuint index, const GLdouble *v)
1481 {
1482 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1483 }
1484
1485 static void
1486 loopback_VertexAttrib3svNV(GLuint index, const GLshort *v)
1487 {
1488 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1489 }
1490
1491 static void
1492 loopback_VertexAttrib3fvNV(GLuint index, const GLfloat *v)
1493 {
1494 ATTRIB(index, v[0], v[1], v[2], 1.0F);
1495 }
1496
1497 static void
1498 loopback_VertexAttrib3dvNV(GLuint index, const GLdouble *v)
1499 {
1500 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1501 }
1502
1503 static void
1504 loopback_VertexAttrib4svNV(GLuint index, const GLshort *v)
1505 {
1506 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2],
1507 (GLfloat)v[3]);
1508 }
1509
1510 static void
1511 loopback_VertexAttrib4fvNV(GLuint index, const GLfloat *v)
1512 {
1513 ATTRIB(index, v[0], v[1], v[2], v[3]);
1514 }
1515
1516 static void
1517 loopback_VertexAttrib4dvNV(GLuint index, const GLdouble *v)
1518 {
1519 ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
1520 }
1521
1522 static void
1523 loopback_VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
1524 {
1525 ATTRIB(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
1526 UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]));
1527 }
1528
1529
1530 static void
1531 loopback_VertexAttribs1svNV(GLuint index, GLsizei n, const GLshort *v)
1532 {
1533 GLint i;
1534 for (i = n - 1; i >= 0; i--)
1535 loopback_VertexAttrib1svNV(index + i, v + i);
1536 }
1537
1538 static void
1539 loopback_VertexAttribs1fvNV(GLuint index, GLsizei n, const GLfloat *v)
1540 {
1541 GLint i;
1542 for (i = n - 1; i >= 0; i--)
1543 loopback_VertexAttrib1fvNV(index + i, v + i);
1544 }
1545
1546 static void
1547 loopback_VertexAttribs1dvNV(GLuint index, GLsizei n, const GLdouble *v)
1548 {
1549 GLint i;
1550 for (i = n - 1; i >= 0; i--)
1551 loopback_VertexAttrib1dvNV(index + i, v + i);
1552 }
1553
1554 static void
1555 loopback_VertexAttribs2svNV(GLuint index, GLsizei n, const GLshort *v)
1556 {
1557 GLint i;
1558 for (i = n - 1; i >= 0; i--)
1559 loopback_VertexAttrib2svNV(index + i, v + 2 * i);
1560 }
1561
1562 static void
1563 loopback_VertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat *v)
1564 {
1565 GLint i;
1566 for (i = n - 1; i >= 0; i--)
1567 loopback_VertexAttrib2fvNV(index + i, v + 2 * i);
1568 }
1569
1570 static void
1571 loopback_VertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble *v)
1572 {
1573 GLint i;
1574 for (i = n - 1; i >= 0; i--)
1575 loopback_VertexAttrib2dvNV(index + i, v + 2 * i);
1576 }
1577
1578 static void
1579 loopback_VertexAttribs3svNV(GLuint index, GLsizei n, const GLshort *v)
1580 {
1581 GLint i;
1582 for (i = n - 1; i >= 0; i--)
1583 loopback_VertexAttrib3svNV(index + i, v + 3 * i);
1584 }
1585
1586 static void
1587 loopback_VertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat *v)
1588 {
1589 GLint i;
1590 for (i = n - 1; i >= 0; i--)
1591 loopback_VertexAttrib3fvNV(index + i, v + 3 * i);
1592 }
1593
1594 static void
1595 loopback_VertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble *v)
1596 {
1597 GLint i;
1598 for (i = n - 1; i >= 0; i--)
1599 loopback_VertexAttrib3dvNV(index + i, v + 3 * i);
1600 }
1601
1602 static void
1603 loopback_VertexAttribs4svNV(GLuint index, GLsizei n, const GLshort *v)
1604 {
1605 GLint i;
1606 for (i = n - 1; i >= 0; i--)
1607 loopback_VertexAttrib4svNV(index + i, v + 4 * i);
1608 }
1609
1610 static void
1611 loopback_VertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat *v)
1612 {
1613 GLint i;
1614 for (i = n - 1; i >= 0; i--)
1615 loopback_VertexAttrib4fvNV(index + i, v + 4 * i);
1616 }
1617
1618 static void
1619 loopback_VertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble *v)
1620 {
1621 GLint i;
1622 for (i = n - 1; i >= 0; i--)
1623 loopback_VertexAttrib4dvNV(index + i, v + 4 * i);
1624 }
1625
1626 static void
1627 loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)
1628 {
1629 GLint i;
1630 for (i = n - 1; i >= 0; i--)
1631 loopback_VertexAttrib4ubvNV(index + i, v + 4 * i);
1632 }
1633
1634
1635 /*
1636 * GL_ARB_vertex_program
1637 */
1638
1639 static void
1640 loopback_VertexAttrib4bvARB(GLuint index, const GLbyte * v)
1641 {
1642 ATTRIB(index, v[0], v[1], v[2], v[3]);
1643 }
1644
1645 static void
1646 loopback_VertexAttrib4ivARB(GLuint index, const GLint * v)
1647 {
1648 ATTRIB(index, v[0], v[1], v[2], v[3]);
1649 }
1650
1651 static void
1652 loopback_VertexAttrib4ubvARB(GLuint index, const GLubyte * v)
1653 {
1654 ATTRIB(index, v[0], v[1], v[2], v[3]);
1655 }
1656
1657 static void
1658 loopback_VertexAttrib4usvARB(GLuint index, const GLushort * v)
1659 {
1660 ATTRIB(index, v[0], v[1], v[2], v[3]);
1661 }
1662
1663 static void
1664 loopback_VertexAttrib4uivARB(GLuint index, const GLuint * v)
1665 {
1666 ATTRIB(index, v[0], v[1], v[2], v[3]);
1667 }
1668
1669 static void
1670 loopback_VertexAttrib4NbvARB(GLuint index, const GLbyte * v)
1671 {
1672 ATTRIB(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
1673 BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]));
1674 }
1675
1676 static void
1677 loopback_VertexAttrib4NsvARB(GLuint index, const GLshort * v)
1678 {
1679 ATTRIB(index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
1680 SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]));
1681 }
1682
1683 static void
1684 loopback_VertexAttrib4NivARB(GLuint index, const GLint * v)
1685 {
1686 ATTRIB(index, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
1687 INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]));
1688 }
1689
1690 static void
1691 loopback_VertexAttrib4NusvARB(GLuint index, const GLushort * v)
1692 {
1693 ATTRIB(index, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
1694 USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]));
1695 }
1696
1697 static void
1698 loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v)
1699 {
1700 ATTRIB(index, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
1701 UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]));
1702 }
1703
1704
1705
1706 void
1707 _mesa_loopback_prefer_float( struct _glapi_table *dest,
1708 GLboolean prefer_float_colors )
1709 {
1710 if (!prefer_float_colors) {
1711 dest->Color3b = loopback_Color3b;
1712 dest->Color3d = loopback_Color3d;
1713 dest->Color3i = loopback_Color3i;
1714 dest->Color3s = loopback_Color3s;
1715 dest->Color3ui = loopback_Color3ui;
1716 dest->Color3us = loopback_Color3us;
1717 dest->Color4b = loopback_Color4b;
1718 dest->Color4d = loopback_Color4d;
1719 dest->Color4i = loopback_Color4i;
1720 dest->Color4s = loopback_Color4s;
1721 dest->Color4ui = loopback_Color4ui;
1722 dest->Color4us = loopback_Color4us;
1723 dest->Color3bv = loopback_Color3bv;
1724 dest->Color3dv = loopback_Color3dv;
1725 dest->Color3iv = loopback_Color3iv;
1726 dest->Color3sv = loopback_Color3sv;
1727 dest->Color3uiv = loopback_Color3uiv;
1728 dest->Color3usv = loopback_Color3usv;
1729 dest->Color4bv = loopback_Color4bv;
1730 dest->Color4dv = loopback_Color4dv;
1731 dest->Color4iv = loopback_Color4iv;
1732 dest->Color4sv = loopback_Color4sv;
1733 dest->Color4uiv = loopback_Color4uiv;
1734 dest->Color4usv = loopback_Color4usv;
1735 dest->SecondaryColor3bEXT = loopback_SecondaryColor3bEXT;
1736 dest->SecondaryColor3dEXT = loopback_SecondaryColor3dEXT;
1737 dest->SecondaryColor3iEXT = loopback_SecondaryColor3iEXT;
1738 dest->SecondaryColor3sEXT = loopback_SecondaryColor3sEXT;
1739 dest->SecondaryColor3uiEXT = loopback_SecondaryColor3uiEXT;
1740 dest->SecondaryColor3usEXT = loopback_SecondaryColor3usEXT;
1741 dest->SecondaryColor3bvEXT = loopback_SecondaryColor3bvEXT;
1742 dest->SecondaryColor3dvEXT = loopback_SecondaryColor3dvEXT;
1743 dest->SecondaryColor3ivEXT = loopback_SecondaryColor3ivEXT;
1744 dest->SecondaryColor3svEXT = loopback_SecondaryColor3svEXT;
1745 dest->SecondaryColor3uivEXT = loopback_SecondaryColor3uivEXT;
1746 dest->SecondaryColor3usvEXT = loopback_SecondaryColor3usvEXT;
1747 }
1748 else {
1749 dest->Color3b = loopback_Color3b_f;
1750 dest->Color3d = loopback_Color3d_f;
1751 dest->Color3i = loopback_Color3i_f;
1752 dest->Color3s = loopback_Color3s_f;
1753 dest->Color3ui = loopback_Color3ui_f;
1754 dest->Color3us = loopback_Color3us_f;
1755 dest->Color4b = loopback_Color4b_f;
1756 dest->Color4d = loopback_Color4d_f;
1757 dest->Color4i = loopback_Color4i_f;
1758 dest->Color4s = loopback_Color4s_f;
1759 dest->Color4ui = loopback_Color4ui_f;
1760 dest->Color4us = loopback_Color4us_f;
1761 dest->Color3bv = loopback_Color3bv_f;
1762 dest->Color3dv = loopback_Color3dv_f;
1763 dest->Color3iv = loopback_Color3iv_f;
1764 dest->Color3sv = loopback_Color3sv_f;
1765 dest->Color3uiv = loopback_Color3uiv_f;
1766 dest->Color3usv = loopback_Color3usv_f;
1767 dest->Color4bv = loopback_Color4bv_f;
1768 dest->Color4dv = loopback_Color4dv_f;
1769 dest->Color4iv = loopback_Color4iv_f;
1770 dest->Color4sv = loopback_Color4sv_f;
1771 dest->Color4uiv = loopback_Color4uiv_f;
1772 dest->Color4usv = loopback_Color4usv_f;
1773 dest->SecondaryColor3bEXT = loopback_SecondaryColor3bEXT_f;
1774 dest->SecondaryColor3dEXT = loopback_SecondaryColor3dEXT_f;
1775 dest->SecondaryColor3iEXT = loopback_SecondaryColor3iEXT_f;
1776 dest->SecondaryColor3sEXT = loopback_SecondaryColor3sEXT_f;
1777 dest->SecondaryColor3uiEXT = loopback_SecondaryColor3uiEXT_f;
1778 dest->SecondaryColor3usEXT = loopback_SecondaryColor3usEXT_f;
1779 dest->SecondaryColor3bvEXT = loopback_SecondaryColor3bvEXT_f;
1780 dest->SecondaryColor3dvEXT = loopback_SecondaryColor3dvEXT_f;
1781 dest->SecondaryColor3ivEXT = loopback_SecondaryColor3ivEXT_f;
1782 dest->SecondaryColor3svEXT = loopback_SecondaryColor3svEXT_f;
1783 dest->SecondaryColor3uivEXT = loopback_SecondaryColor3uivEXT_f;
1784 dest->SecondaryColor3usvEXT = loopback_SecondaryColor3usvEXT_f;
1785 }
1786 }
1787
1788 /* Passing prefer_float_colors as true will mean that all colors
1789 * *except* Color{34}ub{v} are passed as floats. Setting it false will
1790 * mean all colors *except* Color{34}f{v} are passed as ubytes.
1791 *
1792 * This code never registers handlers for any of the entry points
1793 * listed in vtxfmt.h.
1794 */
1795 void
1796 _mesa_loopback_init_api_table( struct _glapi_table *dest,
1797 GLboolean prefer_float_colors )
1798 {
1799 _mesa_loopback_prefer_float( dest, prefer_float_colors );
1800
1801 dest->Indexd = loopback_Indexd;
1802 dest->Indexf = loopback_Indexf;
1803 dest->Indexs = loopback_Indexs;
1804 dest->Indexub = loopback_Indexub;
1805 dest->Indexdv = loopback_Indexdv;
1806 dest->Indexfv = loopback_Indexfv;
1807 dest->Indexiv = loopback_Indexiv;
1808 dest->Indexsv = loopback_Indexsv;
1809 dest->Indexubv = loopback_Indexubv;
1810 dest->Normal3b = loopback_Normal3b;
1811 dest->Normal3d = loopback_Normal3d;
1812 dest->Normal3i = loopback_Normal3i;
1813 dest->Normal3s = loopback_Normal3s;
1814 dest->Normal3bv = loopback_Normal3bv;
1815 dest->Normal3dv = loopback_Normal3dv;
1816 dest->Normal3iv = loopback_Normal3iv;
1817 dest->Normal3sv = loopback_Normal3sv;
1818 dest->TexCoord1d = loopback_TexCoord1d;
1819 dest->TexCoord1i = loopback_TexCoord1i;
1820 dest->TexCoord1s = loopback_TexCoord1s;
1821 dest->TexCoord2d = loopback_TexCoord2d;
1822 dest->TexCoord2s = loopback_TexCoord2s;
1823 dest->TexCoord2i = loopback_TexCoord2i;
1824 dest->TexCoord3d = loopback_TexCoord3d;
1825 dest->TexCoord3i = loopback_TexCoord3i;
1826 dest->TexCoord3s = loopback_TexCoord3s;
1827 dest->TexCoord4d = loopback_TexCoord4d;
1828 dest->TexCoord4i = loopback_TexCoord4i;
1829 dest->TexCoord4s = loopback_TexCoord4s;
1830 dest->TexCoord1dv = loopback_TexCoord1dv;
1831 dest->TexCoord1iv = loopback_TexCoord1iv;
1832 dest->TexCoord1sv = loopback_TexCoord1sv;
1833 dest->TexCoord2dv = loopback_TexCoord2dv;
1834 dest->TexCoord2iv = loopback_TexCoord2iv;
1835 dest->TexCoord2sv = loopback_TexCoord2sv;
1836 dest->TexCoord3dv = loopback_TexCoord3dv;
1837 dest->TexCoord3iv = loopback_TexCoord3iv;
1838 dest->TexCoord3sv = loopback_TexCoord3sv;
1839 dest->TexCoord4dv = loopback_TexCoord4dv;
1840 dest->TexCoord4iv = loopback_TexCoord4iv;
1841 dest->TexCoord4sv = loopback_TexCoord4sv;
1842 dest->Vertex2d = loopback_Vertex2d;
1843 dest->Vertex2i = loopback_Vertex2i;
1844 dest->Vertex2s = loopback_Vertex2s;
1845 dest->Vertex3d = loopback_Vertex3d;
1846 dest->Vertex3i = loopback_Vertex3i;
1847 dest->Vertex3s = loopback_Vertex3s;
1848 dest->Vertex4d = loopback_Vertex4d;
1849 dest->Vertex4i = loopback_Vertex4i;
1850 dest->Vertex4s = loopback_Vertex4s;
1851 dest->Vertex2dv = loopback_Vertex2dv;
1852 dest->Vertex2iv = loopback_Vertex2iv;
1853 dest->Vertex2sv = loopback_Vertex2sv;
1854 dest->Vertex3dv = loopback_Vertex3dv;
1855 dest->Vertex3iv = loopback_Vertex3iv;
1856 dest->Vertex3sv = loopback_Vertex3sv;
1857 dest->Vertex4dv = loopback_Vertex4dv;
1858 dest->Vertex4iv = loopback_Vertex4iv;
1859 dest->Vertex4sv = loopback_Vertex4sv;
1860 dest->MultiTexCoord1dARB = loopback_MultiTexCoord1dARB;
1861 dest->MultiTexCoord1dvARB = loopback_MultiTexCoord1dvARB;
1862 dest->MultiTexCoord1iARB = loopback_MultiTexCoord1iARB;
1863 dest->MultiTexCoord1ivARB = loopback_MultiTexCoord1ivARB;
1864 dest->MultiTexCoord1sARB = loopback_MultiTexCoord1sARB;
1865 dest->MultiTexCoord1svARB = loopback_MultiTexCoord1svARB;
1866 dest->MultiTexCoord2dARB = loopback_MultiTexCoord2dARB;
1867 dest->MultiTexCoord2dvARB = loopback_MultiTexCoord2dvARB;
1868 dest->MultiTexCoord2iARB = loopback_MultiTexCoord2iARB;
1869 dest->MultiTexCoord2ivARB = loopback_MultiTexCoord2ivARB;
1870 dest->MultiTexCoord2sARB = loopback_MultiTexCoord2sARB;
1871 dest->MultiTexCoord2svARB = loopback_MultiTexCoord2svARB;
1872 dest->MultiTexCoord3dARB = loopback_MultiTexCoord3dARB;
1873 dest->MultiTexCoord3dvARB = loopback_MultiTexCoord3dvARB;
1874 dest->MultiTexCoord3iARB = loopback_MultiTexCoord3iARB;
1875 dest->MultiTexCoord3ivARB = loopback_MultiTexCoord3ivARB;
1876 dest->MultiTexCoord3sARB = loopback_MultiTexCoord3sARB;
1877 dest->MultiTexCoord3svARB = loopback_MultiTexCoord3svARB;
1878 dest->MultiTexCoord4dARB = loopback_MultiTexCoord4dARB;
1879 dest->MultiTexCoord4dvARB = loopback_MultiTexCoord4dvARB;
1880 dest->MultiTexCoord4iARB = loopback_MultiTexCoord4iARB;
1881 dest->MultiTexCoord4ivARB = loopback_MultiTexCoord4ivARB;
1882 dest->MultiTexCoord4sARB = loopback_MultiTexCoord4sARB;
1883 dest->MultiTexCoord4svARB = loopback_MultiTexCoord4svARB;
1884 dest->EvalCoord2dv = loopback_EvalCoord2dv;
1885 dest->EvalCoord2fv = loopback_EvalCoord2fv;
1886 dest->EvalCoord2d = loopback_EvalCoord2d;
1887 dest->EvalCoord1dv = loopback_EvalCoord1dv;
1888 dest->EvalCoord1fv = loopback_EvalCoord1fv;
1889 dest->EvalCoord1d = loopback_EvalCoord1d;
1890 dest->Materialf = loopback_Materialf;
1891 dest->Materiali = loopback_Materiali;
1892 dest->Materialiv = loopback_Materialiv;
1893 dest->Rectd = loopback_Rectd;
1894 dest->Rectdv = loopback_Rectdv;
1895 dest->Rectfv = loopback_Rectfv;
1896 dest->Recti = loopback_Recti;
1897 dest->Rectiv = loopback_Rectiv;
1898 dest->Rects = loopback_Rects;
1899 dest->Rectsv = loopback_Rectsv;
1900 dest->FogCoorddEXT = loopback_FogCoorddEXT;
1901 dest->FogCoorddvEXT = loopback_FogCoorddvEXT;
1902
1903 dest->VertexAttrib1sNV = loopback_VertexAttrib1sNV;
1904 dest->VertexAttrib1fNV = loopback_VertexAttrib1fNV;
1905 dest->VertexAttrib1dNV = loopback_VertexAttrib1dNV;
1906 dest->VertexAttrib2sNV = loopback_VertexAttrib2sNV;
1907 dest->VertexAttrib2fNV = loopback_VertexAttrib2fNV;
1908 dest->VertexAttrib2dNV = loopback_VertexAttrib2dNV;
1909 dest->VertexAttrib3sNV = loopback_VertexAttrib3sNV;
1910 dest->VertexAttrib3fNV = loopback_VertexAttrib3fNV;
1911 dest->VertexAttrib3dNV = loopback_VertexAttrib3dNV;
1912 dest->VertexAttrib4sNV = loopback_VertexAttrib4sNV;
1913 dest->VertexAttrib4dNV = loopback_VertexAttrib4dNV;
1914 dest->VertexAttrib4ubNV = loopback_VertexAttrib4ubNV;
1915
1916 dest->VertexAttrib1svNV = loopback_VertexAttrib1svNV;
1917 dest->VertexAttrib1fvNV = loopback_VertexAttrib1fvNV;
1918 dest->VertexAttrib1dvNV = loopback_VertexAttrib1dvNV;
1919 dest->VertexAttrib2svNV = loopback_VertexAttrib2svNV;
1920 dest->VertexAttrib2fvNV = loopback_VertexAttrib2fvNV;
1921 dest->VertexAttrib2dvNV = loopback_VertexAttrib2dvNV;
1922 dest->VertexAttrib3svNV = loopback_VertexAttrib3svNV;
1923 dest->VertexAttrib3fvNV = loopback_VertexAttrib3fvNV;
1924 dest->VertexAttrib3dvNV = loopback_VertexAttrib3dvNV;
1925 dest->VertexAttrib4svNV = loopback_VertexAttrib4svNV;
1926 dest->VertexAttrib4fvNV = loopback_VertexAttrib4fvNV;
1927 dest->VertexAttrib4dvNV = loopback_VertexAttrib4dvNV;
1928 dest->VertexAttrib4ubvNV = loopback_VertexAttrib4ubvNV;
1929
1930 dest->VertexAttribs1svNV = loopback_VertexAttribs1svNV;
1931 dest->VertexAttribs1fvNV = loopback_VertexAttribs1fvNV;
1932 dest->VertexAttribs1dvNV = loopback_VertexAttribs1dvNV;
1933 dest->VertexAttribs2svNV = loopback_VertexAttribs2svNV;
1934 dest->VertexAttribs2fvNV = loopback_VertexAttribs2fvNV;
1935 dest->VertexAttribs2dvNV = loopback_VertexAttribs2dvNV;
1936 dest->VertexAttribs3svNV = loopback_VertexAttribs3svNV;
1937 dest->VertexAttribs3fvNV = loopback_VertexAttribs3fvNV;
1938 dest->VertexAttribs3dvNV = loopback_VertexAttribs3dvNV;
1939 dest->VertexAttribs4svNV = loopback_VertexAttribs4svNV;
1940 dest->VertexAttribs4fvNV = loopback_VertexAttribs4fvNV;
1941 dest->VertexAttribs4dvNV = loopback_VertexAttribs4dvNV;
1942 dest->VertexAttribs4ubvNV = loopback_VertexAttribs4ubvNV;
1943
1944 dest->VertexAttrib4bvARB = loopback_VertexAttrib4bvARB;
1945 dest->VertexAttrib4ivARB = loopback_VertexAttrib4ivARB;
1946 dest->VertexAttrib4ubvARB = loopback_VertexAttrib4ubvARB;
1947 dest->VertexAttrib4usvARB = loopback_VertexAttrib4usvARB;
1948 dest->VertexAttrib4uivARB = loopback_VertexAttrib4uivARB;
1949 dest->VertexAttrib4NbvARB = loopback_VertexAttrib4NbvARB;
1950 dest->VertexAttrib4NsvARB = loopback_VertexAttrib4NsvARB;
1951 dest->VertexAttrib4NivARB = loopback_VertexAttrib4NivARB;
1952 dest->VertexAttrib4NusvARB = loopback_VertexAttrib4NusvARB;
1953 dest->VertexAttrib4NuivARB = loopback_VertexAttrib4NuivARB;
1954 }