e680631383ac658dc71de1ef1d74b578eb12658f
[mesa.git] / src / mesa / vbo / vbo_attrib_tmp.h
1 /**************************************************************************
2
3 Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas.
4
5 All Rights Reserved.
6
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:
13
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
16 Software.
17
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.
25
26 **************************************************************************/
27
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] )
32
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 )
37
38 #define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
39
40
41
42 static void GLAPIENTRY
43 TAG(Vertex2f)(GLfloat x, GLfloat y)
44 {
45 GET_CURRENT_CONTEXT(ctx);
46 ATTR2F(VBO_ATTRIB_POS, x, y);
47 }
48
49 static void GLAPIENTRY
50 TAG(Vertex2fv)(const GLfloat * v)
51 {
52 GET_CURRENT_CONTEXT(ctx);
53 ATTR2FV(VBO_ATTRIB_POS, v);
54 }
55
56 static void GLAPIENTRY
57 TAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
58 {
59 GET_CURRENT_CONTEXT(ctx);
60 ATTR3F(VBO_ATTRIB_POS, x, y, z);
61 }
62
63 static void GLAPIENTRY
64 TAG(Vertex3fv)(const GLfloat * v)
65 {
66 GET_CURRENT_CONTEXT(ctx);
67 ATTR3FV(VBO_ATTRIB_POS, v);
68 }
69
70 static void GLAPIENTRY
71 TAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
72 {
73 GET_CURRENT_CONTEXT(ctx);
74 ATTR4F(VBO_ATTRIB_POS, x, y, z, w);
75 }
76
77 static void GLAPIENTRY
78 TAG(Vertex4fv)(const GLfloat * v)
79 {
80 GET_CURRENT_CONTEXT(ctx);
81 ATTR4FV(VBO_ATTRIB_POS, v);
82 }
83
84
85
86 static void GLAPIENTRY
87 TAG(TexCoord1f)(GLfloat x)
88 {
89 GET_CURRENT_CONTEXT(ctx);
90 ATTR1F(VBO_ATTRIB_TEX0, x);
91 }
92
93 static void GLAPIENTRY
94 TAG(TexCoord1fv)(const GLfloat * v)
95 {
96 GET_CURRENT_CONTEXT(ctx);
97 ATTR1FV(VBO_ATTRIB_TEX0, v);
98 }
99
100 static void GLAPIENTRY
101 TAG(TexCoord2f)(GLfloat x, GLfloat y)
102 {
103 GET_CURRENT_CONTEXT(ctx);
104 ATTR2F(VBO_ATTRIB_TEX0, x, y);
105 }
106
107 static void GLAPIENTRY
108 TAG(TexCoord2fv)(const GLfloat * v)
109 {
110 GET_CURRENT_CONTEXT(ctx);
111 ATTR2FV(VBO_ATTRIB_TEX0, v);
112 }
113
114 static void GLAPIENTRY
115 TAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z)
116 {
117 GET_CURRENT_CONTEXT(ctx);
118 ATTR3F(VBO_ATTRIB_TEX0, x, y, z);
119 }
120
121 static void GLAPIENTRY
122 TAG(TexCoord3fv)(const GLfloat * v)
123 {
124 GET_CURRENT_CONTEXT(ctx);
125 ATTR3FV(VBO_ATTRIB_TEX0, v);
126 }
127
128 static void GLAPIENTRY
129 TAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
130 {
131 GET_CURRENT_CONTEXT(ctx);
132 ATTR4F(VBO_ATTRIB_TEX0, x, y, z, w);
133 }
134
135 static void GLAPIENTRY
136 TAG(TexCoord4fv)(const GLfloat * v)
137 {
138 GET_CURRENT_CONTEXT(ctx);
139 ATTR4FV(VBO_ATTRIB_TEX0, v);
140 }
141
142
143
144 static void GLAPIENTRY
145 TAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z)
146 {
147 GET_CURRENT_CONTEXT(ctx);
148 ATTR3F(VBO_ATTRIB_NORMAL, x, y, z);
149 }
150
151 static void GLAPIENTRY
152 TAG(Normal3fv)(const GLfloat * v)
153 {
154 GET_CURRENT_CONTEXT(ctx);
155 ATTR3FV(VBO_ATTRIB_NORMAL, v);
156 }
157
158
159
160 static void GLAPIENTRY
161 TAG(FogCoordfEXT)(GLfloat x)
162 {
163 GET_CURRENT_CONTEXT(ctx);
164 ATTR1F(VBO_ATTRIB_FOG, x);
165 }
166
167
168
169 static void GLAPIENTRY
170 TAG(FogCoordfvEXT)(const GLfloat * v)
171 {
172 GET_CURRENT_CONTEXT(ctx);
173 ATTR1FV(VBO_ATTRIB_FOG, v);
174 }
175
176 static void GLAPIENTRY
177 TAG(Color3f)(GLfloat x, GLfloat y, GLfloat z)
178 {
179 GET_CURRENT_CONTEXT(ctx);
180 ATTR3F(VBO_ATTRIB_COLOR0, x, y, z);
181 }
182
183 static void GLAPIENTRY
184 TAG(Color3fv)(const GLfloat * v)
185 {
186 GET_CURRENT_CONTEXT(ctx);
187 ATTR3FV(VBO_ATTRIB_COLOR0, v);
188 }
189
190 static void GLAPIENTRY
191 TAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
192 {
193 GET_CURRENT_CONTEXT(ctx);
194 ATTR4F(VBO_ATTRIB_COLOR0, x, y, z, w);
195 }
196
197 static void GLAPIENTRY
198 TAG(Color4fv)(const GLfloat * v)
199 {
200 GET_CURRENT_CONTEXT(ctx);
201 ATTR4FV(VBO_ATTRIB_COLOR0, v);
202 }
203
204
205
206 static void GLAPIENTRY
207 TAG(SecondaryColor3fEXT)(GLfloat x, GLfloat y, GLfloat z)
208 {
209 GET_CURRENT_CONTEXT(ctx);
210 ATTR3F(VBO_ATTRIB_COLOR1, x, y, z);
211 }
212
213 static void GLAPIENTRY
214 TAG(SecondaryColor3fvEXT)(const GLfloat * v)
215 {
216 GET_CURRENT_CONTEXT(ctx);
217 ATTR3FV(VBO_ATTRIB_COLOR1, v);
218 }
219
220
221
222 static void GLAPIENTRY
223 TAG(EdgeFlag)(GLboolean b)
224 {
225 GET_CURRENT_CONTEXT(ctx);
226 ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b);
227 }
228
229
230
231 static void GLAPIENTRY
232 TAG(Indexf)(GLfloat f)
233 {
234 GET_CURRENT_CONTEXT(ctx);
235 ATTR1F(VBO_ATTRIB_INDEX, f);
236 }
237
238 static void GLAPIENTRY
239 TAG(Indexfv)(const GLfloat * f)
240 {
241 GET_CURRENT_CONTEXT(ctx);
242 ATTR1FV(VBO_ATTRIB_INDEX, f);
243 }
244
245
246
247 static void GLAPIENTRY
248 TAG(MultiTexCoord1f)(GLenum target, GLfloat x)
249 {
250 GET_CURRENT_CONTEXT(ctx);
251 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
252 ATTR1F(attr, x);
253 }
254
255 static void GLAPIENTRY
256 TAG(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
257 {
258 GET_CURRENT_CONTEXT(ctx);
259 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
260 ATTR1FV(attr, v);
261 }
262
263 static void GLAPIENTRY
264 TAG(MultiTexCoord2f)(GLenum target, GLfloat x, GLfloat y)
265 {
266 GET_CURRENT_CONTEXT(ctx);
267 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
268 ATTR2F(attr, x, y);
269 }
270
271 static void GLAPIENTRY
272 TAG(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
273 {
274 GET_CURRENT_CONTEXT(ctx);
275 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
276 ATTR2FV(attr, v);
277 }
278
279 static void GLAPIENTRY
280 TAG(MultiTexCoord3f)(GLenum target, GLfloat x, GLfloat y, GLfloat z)
281 {
282 GET_CURRENT_CONTEXT(ctx);
283 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
284 ATTR3F(attr, x, y, z);
285 }
286
287 static void GLAPIENTRY
288 TAG(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
289 {
290 GET_CURRENT_CONTEXT(ctx);
291 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
292 ATTR3FV(attr, v);
293 }
294
295 static void GLAPIENTRY
296 TAG(MultiTexCoord4f)(GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
297 {
298 GET_CURRENT_CONTEXT(ctx);
299 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
300 ATTR4F(attr, x, y, z, w);
301 }
302
303 static void GLAPIENTRY
304 TAG(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
305 {
306 GET_CURRENT_CONTEXT(ctx);
307 GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
308 ATTR4FV(attr, v);
309 }
310
311
312
313 static void GLAPIENTRY
314 TAG(VertexAttrib1fARB)(GLuint index, GLfloat x)
315 {
316 GET_CURRENT_CONTEXT(ctx);
317 if (index == 0)
318 ATTR1F(0, x);
319 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
320 ATTR1F(VBO_ATTRIB_GENERIC0 + index, x);
321 else
322 ERROR();
323 }
324
325 static void GLAPIENTRY
326 TAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v)
327 {
328 GET_CURRENT_CONTEXT(ctx);
329 if (index == 0)
330 ATTR1FV(0, v);
331 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
332 ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v);
333 else
334 ERROR();
335 }
336
337 static void GLAPIENTRY
338 TAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y)
339 {
340 GET_CURRENT_CONTEXT(ctx);
341 if (index == 0)
342 ATTR2F(0, x, y);
343 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
344 ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y);
345 else
346 ERROR();
347 }
348
349 static void GLAPIENTRY
350 TAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v)
351 {
352 GET_CURRENT_CONTEXT(ctx);
353 if (index == 0)
354 ATTR2FV(0, v);
355 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
356 ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v);
357 else
358 ERROR();
359 }
360
361 static void GLAPIENTRY
362 TAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
363 {
364 GET_CURRENT_CONTEXT(ctx);
365 if (index == 0)
366 ATTR3F(0, x, y, z);
367 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
368 ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z);
369 else
370 ERROR();
371 }
372
373 static void GLAPIENTRY
374 TAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v)
375 {
376 GET_CURRENT_CONTEXT(ctx);
377 if (index == 0)
378 ATTR3FV(0, v);
379 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
380 ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v);
381 else
382 ERROR();
383 }
384
385 static void GLAPIENTRY
386 TAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
387 {
388 GET_CURRENT_CONTEXT(ctx);
389 if (index == 0)
390 ATTR4F(0, x, y, z, w);
391 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
392 ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
393 else
394 ERROR();
395 }
396
397 static void GLAPIENTRY
398 TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)
399 {
400 GET_CURRENT_CONTEXT(ctx);
401 if (index == 0)
402 ATTR4FV(0, v);
403 else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
404 ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v);
405 else
406 ERROR();
407 }
408
409
410 /* In addition to supporting NV_vertex_program, these entrypoints are
411 * used by the display list and other code specifically because of
412 * their property of aliasing with other attributes. (See
413 * vbo_save_loopback.c)
414 */
415 static void GLAPIENTRY
416 TAG(VertexAttrib1fNV)(GLuint index, GLfloat x)
417 {
418 GET_CURRENT_CONTEXT(ctx);
419 if (index < VBO_ATTRIB_MAX)
420 ATTR1F(index, x);
421 }
422
423 static void GLAPIENTRY
424 TAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
425 {
426 GET_CURRENT_CONTEXT(ctx);
427 if (index < VBO_ATTRIB_MAX)
428 ATTR1FV(index, v);
429 }
430
431 static void GLAPIENTRY
432 TAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
433 {
434 GET_CURRENT_CONTEXT(ctx);
435 if (index < VBO_ATTRIB_MAX)
436 ATTR2F(index, x, y);
437 }
438
439 static void GLAPIENTRY
440 TAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
441 {
442 GET_CURRENT_CONTEXT(ctx);
443 if (index < VBO_ATTRIB_MAX)
444 ATTR2FV(index, v);
445 }
446
447 static void GLAPIENTRY
448 TAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
449 {
450 GET_CURRENT_CONTEXT(ctx);
451 if (index < VBO_ATTRIB_MAX)
452 ATTR3F(index, x, y, z);
453 }
454
455 static void GLAPIENTRY
456 TAG(VertexAttrib3fvNV)(GLuint index,
457 const GLfloat * v)
458 {
459 GET_CURRENT_CONTEXT(ctx);
460 if (index < VBO_ATTRIB_MAX)
461 ATTR3FV(index, v);
462 }
463
464 static void GLAPIENTRY
465 TAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
466 {
467 GET_CURRENT_CONTEXT(ctx);
468 if (index < VBO_ATTRIB_MAX)
469 ATTR4F(index, x, y, z, w);
470 }
471
472 static void GLAPIENTRY
473 TAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
474 {
475 GET_CURRENT_CONTEXT(ctx);
476 if (index < VBO_ATTRIB_MAX)
477 ATTR4FV(index, v);
478 }
479
480
481
482 #define MAT( ATTR, N, face, params ) \
483 do { \
484 if (face != GL_BACK) \
485 MAT_ATTR( ATTR, N, params ); /* front */ \
486 if (face != GL_FRONT) \
487 MAT_ATTR( ATTR + 1, N, params ); /* back */ \
488 } while (0)
489
490
491 /* Colormaterial conflicts are dealt with later.
492 */
493 static void GLAPIENTRY
494 TAG(Materialfv)(GLenum face, GLenum pname,
495 const GLfloat * params)
496 {
497 GET_CURRENT_CONTEXT(ctx);
498 switch (pname) {
499 case GL_EMISSION:
500 MAT(VBO_ATTRIB_MAT_FRONT_EMISSION, 4, face, params);
501 break;
502 case GL_AMBIENT:
503 MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
504 break;
505 case GL_DIFFUSE:
506 MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
507 break;
508 case GL_SPECULAR:
509 MAT(VBO_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params);
510 break;
511 case GL_SHININESS:
512 MAT(VBO_ATTRIB_MAT_FRONT_SHININESS, 1, face, params);
513 break;
514 case GL_COLOR_INDEXES:
515 MAT(VBO_ATTRIB_MAT_FRONT_INDEXES, 3, face, params);
516 break;
517 case GL_AMBIENT_AND_DIFFUSE:
518 MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
519 MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
520 break;
521 default:
522 ERROR();
523 return;
524 }
525 }
526
527
528 #undef ATTR1FV
529 #undef ATTR2FV
530 #undef ATTR3FV
531 #undef ATTR4FV
532
533 #undef ATTR1F
534 #undef ATTR2F
535 #undef ATTR3F
536 #undef ATTR4F
537
538 #undef MAT
539 #undef MAT_ATTR