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