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