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