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