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