1
/**************************************************************************
3
Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas.
7
Permission is hereby granted, free of charge, to any person obtaining a
8
copy of this software and associated documentation files (the "Software"),
9
to deal in the Software without restriction, including without limitation
10
on the rights to use, copy, modify, merge, publish, distribute, sub
11
license, and/or sell copies of the Software, and to permit persons to whom
12
the Software is furnished to do so, subject to the following conditions:
14
The above copyright notice and this permission notice (including the next
15
paragraph) shall be included in all copies or substantial portions of the
18
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21
TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24
USE OR OTHER DEALINGS IN THE SOFTWARE.
26
**************************************************************************/
28
#define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
29
#define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
30
#define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
31
#define ATTR4FV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
33
#define ATTR1F( A, X ) ATTR( A, 1, X, 0, 0, 1 )
34
#define ATTR2F( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
35
#define ATTR3F( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
36
#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
38
#define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
40
static void GLAPIENTRY TAG(Vertex2f)( GLfloat x, GLfloat y )
42
GET_CURRENT_CONTEXT( ctx );
43
ATTR2F( VBO_ATTRIB_POS, x, y );
46
static void GLAPIENTRY TAG(Vertex2fv)( const GLfloat *v )
48
GET_CURRENT_CONTEXT( ctx );
49
ATTR2FV( VBO_ATTRIB_POS, v );
52
static void GLAPIENTRY TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z )
54
GET_CURRENT_CONTEXT( ctx );
55
ATTR3F( VBO_ATTRIB_POS, x, y, z );
58
static void GLAPIENTRY TAG(Vertex3fv)( const GLfloat *v )
60
GET_CURRENT_CONTEXT( ctx );
61
ATTR3FV( VBO_ATTRIB_POS, v );
64
static void GLAPIENTRY TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
66
GET_CURRENT_CONTEXT( ctx );
67
ATTR4F( VBO_ATTRIB_POS, x, y, z, w );
70
static void GLAPIENTRY TAG(Vertex4fv)( const GLfloat *v )
72
GET_CURRENT_CONTEXT( ctx );
73
ATTR4FV( VBO_ATTRIB_POS, v );
76
static void GLAPIENTRY TAG(TexCoord1f)( GLfloat x )
78
GET_CURRENT_CONTEXT( ctx );
79
ATTR1F( VBO_ATTRIB_TEX0, x );
82
static void GLAPIENTRY TAG(TexCoord1fv)( const GLfloat *v )
84
GET_CURRENT_CONTEXT( ctx );
85
ATTR1FV( VBO_ATTRIB_TEX0, v );
88
static void GLAPIENTRY TAG(TexCoord2f)( GLfloat x, GLfloat y )
90
GET_CURRENT_CONTEXT( ctx );
91
ATTR2F( VBO_ATTRIB_TEX0, x, y );
94
static void GLAPIENTRY TAG(TexCoord2fv)( const GLfloat *v )
96
GET_CURRENT_CONTEXT( ctx );
97
ATTR2FV( VBO_ATTRIB_TEX0, v );
100
static void GLAPIENTRY TAG(TexCoord3f)( GLfloat x, GLfloat y, GLfloat z )
102
GET_CURRENT_CONTEXT( ctx );
103
ATTR3F( VBO_ATTRIB_TEX0, x, y, z );
106
static void GLAPIENTRY TAG(TexCoord3fv)( const GLfloat *v )
108
GET_CURRENT_CONTEXT( ctx );
109
ATTR3FV( VBO_ATTRIB_TEX0, v );
112
static void GLAPIENTRY TAG(TexCoord4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
114
GET_CURRENT_CONTEXT( ctx );
115
ATTR4F( VBO_ATTRIB_TEX0, x, y, z, w );
118
static void GLAPIENTRY TAG(TexCoord4fv)( const GLfloat *v )
120
GET_CURRENT_CONTEXT( ctx );
121
ATTR4FV( VBO_ATTRIB_TEX0, v );
124
static void GLAPIENTRY TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z )
126
GET_CURRENT_CONTEXT( ctx );
127
ATTR3F( VBO_ATTRIB_NORMAL, x, y, z );
130
static void GLAPIENTRY TAG(Normal3fv)( const GLfloat *v )
132
GET_CURRENT_CONTEXT( ctx );
133
ATTR3FV( VBO_ATTRIB_NORMAL, v );
136
static void GLAPIENTRY TAG(FogCoordfEXT)( GLfloat x )
138
GET_CURRENT_CONTEXT( ctx );
139
ATTR1F( VBO_ATTRIB_FOG, x );
142
static void GLAPIENTRY TAG(FogCoordfvEXT)( const GLfloat *v )
144
GET_CURRENT_CONTEXT( ctx );
145
ATTR1FV( VBO_ATTRIB_FOG, v );
148
static void GLAPIENTRY TAG(Color3f)( GLfloat x, GLfloat y, GLfloat z )
150
GET_CURRENT_CONTEXT( ctx );
151
ATTR3F( VBO_ATTRIB_COLOR0, x, y, z );
154
static void GLAPIENTRY TAG(Color3fv)( const GLfloat *v )
156
GET_CURRENT_CONTEXT( ctx );
157
ATTR3FV( VBO_ATTRIB_COLOR0, v );
160
static void GLAPIENTRY TAG(Color4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
162
GET_CURRENT_CONTEXT( ctx );
163
ATTR4F( VBO_ATTRIB_COLOR0, x, y, z, w );
166
static void GLAPIENTRY TAG(Color4fv)( const GLfloat *v )
168
GET_CURRENT_CONTEXT( ctx );
169
ATTR4FV( VBO_ATTRIB_COLOR0, v );
172
static void GLAPIENTRY TAG(SecondaryColor3fEXT)( GLfloat x, GLfloat y, GLfloat z )
174
GET_CURRENT_CONTEXT( ctx );
175
ATTR3F( VBO_ATTRIB_COLOR1, x, y, z );
178
static void GLAPIENTRY TAG(SecondaryColor3fvEXT)( const GLfloat *v )
180
GET_CURRENT_CONTEXT( ctx );
181
ATTR3FV( VBO_ATTRIB_COLOR1, v );
185
static void GLAPIENTRY TAG(EdgeFlag)( GLboolean b )
187
GET_CURRENT_CONTEXT( ctx );
188
ATTR1F( VBO_ATTRIB_EDGEFLAG, (GLfloat)b );
191
static void GLAPIENTRY TAG(Indexf)( GLfloat f )
193
GET_CURRENT_CONTEXT( ctx );
194
ATTR1F( VBO_ATTRIB_INDEX, f );
197
static void GLAPIENTRY TAG(Indexfv)( const GLfloat *f )
199
GET_CURRENT_CONTEXT( ctx );
200
ATTR1FV( VBO_ATTRIB_INDEX, f );
204
static void GLAPIENTRY TAG(MultiTexCoord1f)( GLenum target, GLfloat x )
206
GET_CURRENT_CONTEXT( ctx );
207
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
211
static void GLAPIENTRY TAG(MultiTexCoord1fv)( GLenum target, const GLfloat *v )
213
GET_CURRENT_CONTEXT( ctx );
214
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
218
static void GLAPIENTRY TAG(MultiTexCoord2f)( GLenum target, GLfloat x, GLfloat y )
220
GET_CURRENT_CONTEXT( ctx );
221
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
222
ATTR2F( attr, x, y );
225
static void GLAPIENTRY TAG(MultiTexCoord2fv)( GLenum target, const GLfloat *v )
227
GET_CURRENT_CONTEXT( ctx );
228
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
232
static void GLAPIENTRY TAG(MultiTexCoord3f)( GLenum target, GLfloat x, GLfloat y,
235
GET_CURRENT_CONTEXT( ctx );
236
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
237
ATTR3F( attr, x, y, z );
240
static void GLAPIENTRY TAG(MultiTexCoord3fv)( GLenum target, const GLfloat *v )
242
GET_CURRENT_CONTEXT( ctx );
243
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
247
static void GLAPIENTRY TAG(MultiTexCoord4f)( GLenum target, GLfloat x, GLfloat y,
248
GLfloat z, GLfloat w )
250
GET_CURRENT_CONTEXT( ctx );
251
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
252
ATTR4F( attr, x, y, z, w );
255
static void GLAPIENTRY TAG(MultiTexCoord4fv)( GLenum target, const GLfloat *v )
257
GET_CURRENT_CONTEXT( ctx );
258
GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
263
static void GLAPIENTRY TAG(VertexAttrib1fARB)( GLuint index, GLfloat x )
265
GET_CURRENT_CONTEXT( ctx );
268
else if (index < MAX_VERTEX_ATTRIBS)
269
ATTR1F(VBO_ATTRIB_GENERIC0 + index, x);
274
static void GLAPIENTRY TAG(VertexAttrib1fvARB)( GLuint index,
277
GET_CURRENT_CONTEXT( ctx );
280
else if (index < MAX_VERTEX_ATTRIBS)
281
ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v);
286
static void GLAPIENTRY TAG(VertexAttrib2fARB)( GLuint index, GLfloat x,
289
GET_CURRENT_CONTEXT( ctx );
292
else if (index < MAX_VERTEX_ATTRIBS)
293
ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y);
298
static void GLAPIENTRY TAG(VertexAttrib2fvARB)( GLuint index,
301
GET_CURRENT_CONTEXT( ctx );
304
else if (index < MAX_VERTEX_ATTRIBS)
305
ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v);
310
static void GLAPIENTRY TAG(VertexAttrib3fARB)( GLuint index, GLfloat x,
311
GLfloat y, GLfloat z )
313
GET_CURRENT_CONTEXT( ctx );
316
else if (index < MAX_VERTEX_ATTRIBS)
317
ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z);
322
static void GLAPIENTRY TAG(VertexAttrib3fvARB)( GLuint index,
325
GET_CURRENT_CONTEXT( ctx );
328
else if (index < MAX_VERTEX_ATTRIBS)
329
ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v);
334
static void GLAPIENTRY TAG(VertexAttrib4fARB)( GLuint index, GLfloat x,
335
GLfloat y, GLfloat z,
338
GET_CURRENT_CONTEXT( ctx );
340
ATTR4F(0, x, y, z, w);
341
else if (index < MAX_VERTEX_ATTRIBS)
342
ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
347
static void GLAPIENTRY TAG(VertexAttrib4fvARB)( GLuint index,
350
GET_CURRENT_CONTEXT( ctx );
353
else if (index < MAX_VERTEX_ATTRIBS)
354
ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v);
360
/* In addition to supporting NV_vertex_program, these entrypoints are
361
* used by the display list and other code specifically because of
362
* their property of aliasing with other attributes. (See
363
* vbo_save_loopback.c)
365
static void GLAPIENTRY TAG(VertexAttrib1fNV)( GLuint index, GLfloat x )
367
GET_CURRENT_CONTEXT( ctx );
368
if (index < VBO_ATTRIB_MAX)
372
static void GLAPIENTRY TAG(VertexAttrib1fvNV)( GLuint index,
375
GET_CURRENT_CONTEXT( ctx );
376
if (index < VBO_ATTRIB_MAX)
380
static void GLAPIENTRY TAG(VertexAttrib2fNV)( GLuint index, GLfloat x,
383
GET_CURRENT_CONTEXT( ctx );
384
if (index < VBO_ATTRIB_MAX)
388
static void GLAPIENTRY TAG(VertexAttrib2fvNV)( GLuint index,
391
GET_CURRENT_CONTEXT( ctx );
392
if (index < VBO_ATTRIB_MAX)
396
static void GLAPIENTRY TAG(VertexAttrib3fNV)( GLuint index, GLfloat x,
397
GLfloat y, GLfloat z )
399
GET_CURRENT_CONTEXT( ctx );
400
if (index < VBO_ATTRIB_MAX)
401
ATTR3F(index, x, y, z);
404
static void GLAPIENTRY TAG(VertexAttrib3fvNV)( GLuint index,
407
GET_CURRENT_CONTEXT( ctx );
408
if (index < VBO_ATTRIB_MAX)
412
static void GLAPIENTRY TAG(VertexAttrib4fNV)( GLuint index, GLfloat x,
413
GLfloat y, GLfloat z,
416
GET_CURRENT_CONTEXT( ctx );
417
if (index < VBO_ATTRIB_MAX)
418
ATTR4F(index, x, y, z, w);
421
static void GLAPIENTRY TAG(VertexAttrib4fvNV)( GLuint index,
424
GET_CURRENT_CONTEXT( ctx );
425
if (index < VBO_ATTRIB_MAX)
430
#define MAT( ATTR, N, face, params ) \
432
if (face != GL_BACK) \
433
MAT_ATTR( ATTR, N, params ); /* front */ \
434
if (face != GL_FRONT) \
435
MAT_ATTR( ATTR + 1, N, params ); /* back */ \
439
/* Colormaterial conflicts are dealt with later.
441
static void GLAPIENTRY TAG(Materialfv)( GLenum face, GLenum pname,
442
const GLfloat *params )
444
GET_CURRENT_CONTEXT( ctx );
447
MAT( VBO_ATTRIB_MAT_FRONT_EMISSION, 4, face, params );
450
MAT( VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );
453
MAT( VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );
456
MAT( VBO_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params );
459
MAT( VBO_ATTRIB_MAT_FRONT_SHININESS, 1, face, params );
461
case GL_COLOR_INDEXES:
462
MAT( VBO_ATTRIB_MAT_FRONT_INDEXES, 3, face, params );
464
case GL_AMBIENT_AND_DIFFUSE:
465
MAT( VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );
466
MAT( VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );