1 /* $Id: eval.c,v 1.20 2001/05/16 17:06:28 brianp Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 * eval.c was written by
30 * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and
31 * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de).
33 * My original implementation of evaluators was simplistic and didn't
34 * compute surface normal vectors properly. Bernd and Volker applied
35 * used more sophisticated methods to get better results.
56 * Return the number of components per control point for any type of
57 * evaluator. Return 0 if bad target.
58 * See table 5.1 in the OpenGL 1.2 spec.
60 GLuint
_mesa_evaluator_components( GLenum target
)
63 case GL_MAP1_VERTEX_3
: return 3;
64 case GL_MAP1_VERTEX_4
: return 4;
65 case GL_MAP1_INDEX
: return 1;
66 case GL_MAP1_COLOR_4
: return 4;
67 case GL_MAP1_NORMAL
: return 3;
68 case GL_MAP1_TEXTURE_COORD_1
: return 1;
69 case GL_MAP1_TEXTURE_COORD_2
: return 2;
70 case GL_MAP1_TEXTURE_COORD_3
: return 3;
71 case GL_MAP1_TEXTURE_COORD_4
: return 4;
72 case GL_MAP2_VERTEX_3
: return 3;
73 case GL_MAP2_VERTEX_4
: return 4;
74 case GL_MAP2_INDEX
: return 1;
75 case GL_MAP2_COLOR_4
: return 4;
76 case GL_MAP2_NORMAL
: return 3;
77 case GL_MAP2_TEXTURE_COORD_1
: return 1;
78 case GL_MAP2_TEXTURE_COORD_2
: return 2;
79 case GL_MAP2_TEXTURE_COORD_3
: return 3;
80 case GL_MAP2_TEXTURE_COORD_4
: return 4;
86 /**********************************************************************/
87 /*** Copy and deallocate control points ***/
88 /**********************************************************************/
92 * Copy 1-parametric evaluator control points from user-specified
93 * memory space to a buffer of contiguous control points.
94 * Input: see glMap1f for details
95 * Return: pointer to buffer of contiguous control points or NULL if out
98 GLfloat
*_mesa_copy_map_points1f( GLenum target
, GLint ustride
, GLint uorder
,
99 const GLfloat
*points
)
102 GLint i
, k
, size
= _mesa_evaluator_components(target
);
104 if (!points
|| size
==0) {
108 buffer
= (GLfloat
*) MALLOC(uorder
* size
* sizeof(GLfloat
));
111 for(i
=0, p
=buffer
; i
<uorder
; i
++, points
+=ustride
)
112 for(k
=0; k
<size
; k
++)
121 * Same as above but convert doubles to floats.
123 GLfloat
*_mesa_copy_map_points1d( GLenum target
, GLint ustride
, GLint uorder
,
124 const GLdouble
*points
)
127 GLint i
, k
, size
= _mesa_evaluator_components(target
);
129 if (!points
|| size
==0) {
133 buffer
= (GLfloat
*) MALLOC(uorder
* size
* sizeof(GLfloat
));
136 for(i
=0, p
=buffer
; i
<uorder
; i
++, points
+=ustride
)
137 for(k
=0; k
<size
; k
++)
138 *p
++ = (GLfloat
) points
[k
];
146 * Copy 2-parametric evaluator control points from user-specified
147 * memory space to a buffer of contiguous control points.
148 * Additional memory is allocated to be used by the horner and
149 * de Casteljau evaluation schemes.
151 * Input: see glMap2f for details
152 * Return: pointer to buffer of contiguous control points or NULL if out
155 GLfloat
*_mesa_copy_map_points2f( GLenum target
,
156 GLint ustride
, GLint uorder
,
157 GLint vstride
, GLint vorder
,
158 const GLfloat
*points
)
161 GLint i
, j
, k
, size
, dsize
, hsize
;
164 size
= _mesa_evaluator_components(target
);
166 if (!points
|| size
==0) {
170 /* max(uorder, vorder) additional points are used in */
171 /* horner evaluation and uorder*vorder additional */
172 /* values are needed for de Casteljau */
173 dsize
= (uorder
== 2 && vorder
== 2)? 0 : uorder
*vorder
;
174 hsize
= (uorder
> vorder
? uorder
: vorder
)*size
;
177 buffer
= (GLfloat
*) MALLOC((uorder
*vorder
*size
+hsize
)*sizeof(GLfloat
));
179 buffer
= (GLfloat
*) MALLOC((uorder
*vorder
*size
+dsize
)*sizeof(GLfloat
));
181 /* compute the increment value for the u-loop */
182 uinc
= ustride
- vorder
*vstride
;
185 for (i
=0, p
=buffer
; i
<uorder
; i
++, points
+= uinc
)
186 for (j
=0; j
<vorder
; j
++, points
+= vstride
)
187 for (k
=0; k
<size
; k
++)
196 * Same as above but convert doubles to floats.
198 GLfloat
*_mesa_copy_map_points2d(GLenum target
,
199 GLint ustride
, GLint uorder
,
200 GLint vstride
, GLint vorder
,
201 const GLdouble
*points
)
204 GLint i
, j
, k
, size
, hsize
, dsize
;
207 size
= _mesa_evaluator_components(target
);
209 if (!points
|| size
==0) {
213 /* max(uorder, vorder) additional points are used in */
214 /* horner evaluation and uorder*vorder additional */
215 /* values are needed for de Casteljau */
216 dsize
= (uorder
== 2 && vorder
== 2)? 0 : uorder
*vorder
;
217 hsize
= (uorder
> vorder
? uorder
: vorder
)*size
;
220 buffer
= (GLfloat
*) MALLOC((uorder
*vorder
*size
+hsize
)*sizeof(GLfloat
));
222 buffer
= (GLfloat
*) MALLOC((uorder
*vorder
*size
+dsize
)*sizeof(GLfloat
));
224 /* compute the increment value for the u-loop */
225 uinc
= ustride
- vorder
*vstride
;
228 for (i
=0, p
=buffer
; i
<uorder
; i
++, points
+= uinc
)
229 for (j
=0; j
<vorder
; j
++, points
+= vstride
)
230 for (k
=0; k
<size
; k
++)
231 *p
++ = (GLfloat
) points
[k
];
239 /**********************************************************************/
240 /*** API entry points ***/
241 /**********************************************************************/
245 * This does the work of glMap1[fd].
248 map1(GLenum target
, GLfloat u1
, GLfloat u2
, GLint ustride
,
249 GLint uorder
, const GLvoid
*points
, GLenum type
)
251 GET_CURRENT_CONTEXT(ctx
);
254 struct gl_1d_map
*map
= 0;
255 ASSERT_OUTSIDE_BEGIN_END(ctx
);
257 assert(type
== GL_FLOAT
|| type
== GL_DOUBLE
);
260 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap1(u1,u2)" );
263 if (uorder
< 1 || uorder
> MAX_EVAL_ORDER
) {
264 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap1(order)" );
268 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap1(points)" );
272 k
= _mesa_evaluator_components( target
);
274 _mesa_error( ctx
, GL_INVALID_ENUM
, "glMap1(target)" );
278 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap1(stride)" );
282 if (ctx
->Texture
.CurrentUnit
!= 0) {
283 /* See OpenGL 1.2.1 spec, section F.2.13 */
284 _mesa_error( ctx
, GL_INVALID_OPERATION
, "glMap2(ACTIVE_TEXTURE != 0)" );
289 case GL_MAP1_VERTEX_3
:
290 map
= &ctx
->EvalMap
.Map1Vertex3
;
292 case GL_MAP1_VERTEX_4
:
293 map
= &ctx
->EvalMap
.Map1Vertex4
;
296 map
= &ctx
->EvalMap
.Map1Index
;
298 case GL_MAP1_COLOR_4
:
299 map
= &ctx
->EvalMap
.Map1Color4
;
302 map
= &ctx
->EvalMap
.Map1Normal
;
304 case GL_MAP1_TEXTURE_COORD_1
:
305 map
= &ctx
->EvalMap
.Map1Texture1
;
307 case GL_MAP1_TEXTURE_COORD_2
:
308 map
= &ctx
->EvalMap
.Map1Texture2
;
310 case GL_MAP1_TEXTURE_COORD_3
:
311 map
= &ctx
->EvalMap
.Map1Texture3
;
313 case GL_MAP1_TEXTURE_COORD_4
:
314 map
= &ctx
->EvalMap
.Map1Texture4
;
317 _mesa_error( ctx
, GL_INVALID_ENUM
, "glMap1(target)" );
321 /* make copy of the control points */
322 if (type
== GL_FLOAT
)
323 pnts
= _mesa_copy_map_points1f(target
, ustride
, uorder
, (GLfloat
*) points
);
325 pnts
= _mesa_copy_map_points1d(target
, ustride
, uorder
, (GLdouble
*) points
);
328 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
332 map
->du
= 1.0 / (u2
- u1
);
341 _mesa_Map1f( GLenum target
, GLfloat u1
, GLfloat u2
, GLint stride
,
342 GLint order
, const GLfloat
*points
)
344 map1(target
, u1
, u2
, stride
, order
, points
, GL_FLOAT
);
349 _mesa_Map1d( GLenum target
, GLdouble u1
, GLdouble u2
, GLint stride
,
350 GLint order
, const GLdouble
*points
)
352 map1(target
, u1
, u2
, stride
, order
, points
, GL_DOUBLE
);
357 map2( GLenum target
, GLfloat u1
, GLfloat u2
, GLint ustride
, GLint uorder
,
358 GLfloat v1
, GLfloat v2
, GLint vstride
, GLint vorder
,
359 const GLvoid
*points
, GLenum type
)
361 GET_CURRENT_CONTEXT(ctx
);
364 struct gl_2d_map
*map
= 0;
365 ASSERT_OUTSIDE_BEGIN_END(ctx
);
368 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(u1,u2)" );
373 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(v1,v2)" );
377 if (uorder
<1 || uorder
>MAX_EVAL_ORDER
) {
378 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(uorder)" );
382 if (vorder
<1 || vorder
>MAX_EVAL_ORDER
) {
383 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(vorder)" );
387 k
= _mesa_evaluator_components( target
);
389 _mesa_error( ctx
, GL_INVALID_ENUM
, "glMap2(target)" );
393 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(ustride)" );
397 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMap2(vstride)" );
401 if (ctx
->Texture
.CurrentUnit
!= 0) {
402 /* See OpenGL 1.2.1 spec, section F.2.13 */
403 _mesa_error( ctx
, GL_INVALID_OPERATION
, "glMap2(ACTIVE_TEXTURE != 0)" );
408 case GL_MAP2_VERTEX_3
:
409 map
= &ctx
->EvalMap
.Map2Vertex3
;
411 case GL_MAP2_VERTEX_4
:
412 map
= &ctx
->EvalMap
.Map2Vertex4
;
415 map
= &ctx
->EvalMap
.Map2Index
;
417 case GL_MAP2_COLOR_4
:
418 map
= &ctx
->EvalMap
.Map2Color4
;
421 map
= &ctx
->EvalMap
.Map2Normal
;
423 case GL_MAP2_TEXTURE_COORD_1
:
424 map
= &ctx
->EvalMap
.Map2Texture1
;
426 case GL_MAP2_TEXTURE_COORD_2
:
427 map
= &ctx
->EvalMap
.Map2Texture2
;
429 case GL_MAP2_TEXTURE_COORD_3
:
430 map
= &ctx
->EvalMap
.Map2Texture3
;
432 case GL_MAP2_TEXTURE_COORD_4
:
433 map
= &ctx
->EvalMap
.Map2Texture4
;
436 _mesa_error( ctx
, GL_INVALID_ENUM
, "glMap2(target)" );
440 /* make copy of the control points */
441 if (type
== GL_FLOAT
)
442 pnts
= _mesa_copy_map_points2f(target
, ustride
, uorder
,
443 vstride
, vorder
, (GLfloat
*) points
);
445 pnts
= _mesa_copy_map_points2d(target
, ustride
, uorder
,
446 vstride
, vorder
, (GLdouble
*) points
);
449 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
450 map
->Uorder
= uorder
;
453 map
->du
= 1.0 / (u2
- u1
);
454 map
->Vorder
= vorder
;
457 map
->dv
= 1.0 / (v2
- v1
);
465 _mesa_Map2f( GLenum target
,
466 GLfloat u1
, GLfloat u2
, GLint ustride
, GLint uorder
,
467 GLfloat v1
, GLfloat v2
, GLint vstride
, GLint vorder
,
468 const GLfloat
*points
)
470 map2(target
, u1
, u2
, ustride
, uorder
, v1
, v2
, vstride
, vorder
,
476 _mesa_Map2d( GLenum target
,
477 GLdouble u1
, GLdouble u2
, GLint ustride
, GLint uorder
,
478 GLdouble v1
, GLdouble v2
, GLint vstride
, GLint vorder
,
479 const GLdouble
*points
)
481 map2(target
, u1
, u2
, ustride
, uorder
, v1
, v2
, vstride
, vorder
,
488 _mesa_GetMapdv( GLenum target
, GLenum query
, GLdouble
*v
)
490 GET_CURRENT_CONTEXT(ctx
);
493 ASSERT_OUTSIDE_BEGIN_END(ctx
);
498 case GL_MAP1_COLOR_4
:
499 data
= ctx
->EvalMap
.Map1Color4
.Points
;
500 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
503 data
= ctx
->EvalMap
.Map1Index
.Points
;
504 n
= ctx
->EvalMap
.Map1Index
.Order
;
507 data
= ctx
->EvalMap
.Map1Normal
.Points
;
508 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
510 case GL_MAP1_TEXTURE_COORD_1
:
511 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
512 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
514 case GL_MAP1_TEXTURE_COORD_2
:
515 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
516 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
518 case GL_MAP1_TEXTURE_COORD_3
:
519 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
520 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
522 case GL_MAP1_TEXTURE_COORD_4
:
523 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
524 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
526 case GL_MAP1_VERTEX_3
:
527 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
528 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
530 case GL_MAP1_VERTEX_4
:
531 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
532 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
534 case GL_MAP2_COLOR_4
:
535 data
= ctx
->EvalMap
.Map2Color4
.Points
;
536 n
= ctx
->EvalMap
.Map2Color4
.Uorder
537 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
540 data
= ctx
->EvalMap
.Map2Index
.Points
;
541 n
= ctx
->EvalMap
.Map2Index
.Uorder
542 * ctx
->EvalMap
.Map2Index
.Vorder
;
545 data
= ctx
->EvalMap
.Map2Normal
.Points
;
546 n
= ctx
->EvalMap
.Map2Normal
.Uorder
547 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
549 case GL_MAP2_TEXTURE_COORD_1
:
550 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
551 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
552 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
554 case GL_MAP2_TEXTURE_COORD_2
:
555 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
556 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
557 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
559 case GL_MAP2_TEXTURE_COORD_3
:
560 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
561 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
562 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
564 case GL_MAP2_TEXTURE_COORD_4
:
565 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
566 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
567 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
569 case GL_MAP2_VERTEX_3
:
570 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
571 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
572 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
574 case GL_MAP2_VERTEX_4
:
575 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
576 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
577 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
580 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
591 case GL_MAP1_COLOR_4
:
592 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
595 *v
= ctx
->EvalMap
.Map1Index
.Order
;
598 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
600 case GL_MAP1_TEXTURE_COORD_1
:
601 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
603 case GL_MAP1_TEXTURE_COORD_2
:
604 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
606 case GL_MAP1_TEXTURE_COORD_3
:
607 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
609 case GL_MAP1_TEXTURE_COORD_4
:
610 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
612 case GL_MAP1_VERTEX_3
:
613 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
615 case GL_MAP1_VERTEX_4
:
616 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
618 case GL_MAP2_COLOR_4
:
619 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
620 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
623 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
624 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
627 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
628 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
630 case GL_MAP2_TEXTURE_COORD_1
:
631 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
632 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
634 case GL_MAP2_TEXTURE_COORD_2
:
635 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
636 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
638 case GL_MAP2_TEXTURE_COORD_3
:
639 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
640 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
642 case GL_MAP2_TEXTURE_COORD_4
:
643 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
644 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
646 case GL_MAP2_VERTEX_3
:
647 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
648 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
650 case GL_MAP2_VERTEX_4
:
651 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
652 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
655 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
661 case GL_MAP1_COLOR_4
:
662 v
[0] = ctx
->EvalMap
.Map1Color4
.u1
;
663 v
[1] = ctx
->EvalMap
.Map1Color4
.u2
;
666 v
[0] = ctx
->EvalMap
.Map1Index
.u1
;
667 v
[1] = ctx
->EvalMap
.Map1Index
.u2
;
670 v
[0] = ctx
->EvalMap
.Map1Normal
.u1
;
671 v
[1] = ctx
->EvalMap
.Map1Normal
.u2
;
673 case GL_MAP1_TEXTURE_COORD_1
:
674 v
[0] = ctx
->EvalMap
.Map1Texture1
.u1
;
675 v
[1] = ctx
->EvalMap
.Map1Texture1
.u2
;
677 case GL_MAP1_TEXTURE_COORD_2
:
678 v
[0] = ctx
->EvalMap
.Map1Texture2
.u1
;
679 v
[1] = ctx
->EvalMap
.Map1Texture2
.u2
;
681 case GL_MAP1_TEXTURE_COORD_3
:
682 v
[0] = ctx
->EvalMap
.Map1Texture3
.u1
;
683 v
[1] = ctx
->EvalMap
.Map1Texture3
.u2
;
685 case GL_MAP1_TEXTURE_COORD_4
:
686 v
[0] = ctx
->EvalMap
.Map1Texture4
.u1
;
687 v
[1] = ctx
->EvalMap
.Map1Texture4
.u2
;
689 case GL_MAP1_VERTEX_3
:
690 v
[0] = ctx
->EvalMap
.Map1Vertex3
.u1
;
691 v
[1] = ctx
->EvalMap
.Map1Vertex3
.u2
;
693 case GL_MAP1_VERTEX_4
:
694 v
[0] = ctx
->EvalMap
.Map1Vertex4
.u1
;
695 v
[1] = ctx
->EvalMap
.Map1Vertex4
.u2
;
697 case GL_MAP2_COLOR_4
:
698 v
[0] = ctx
->EvalMap
.Map2Color4
.u1
;
699 v
[1] = ctx
->EvalMap
.Map2Color4
.u2
;
700 v
[2] = ctx
->EvalMap
.Map2Color4
.v1
;
701 v
[3] = ctx
->EvalMap
.Map2Color4
.v2
;
704 v
[0] = ctx
->EvalMap
.Map2Index
.u1
;
705 v
[1] = ctx
->EvalMap
.Map2Index
.u2
;
706 v
[2] = ctx
->EvalMap
.Map2Index
.v1
;
707 v
[3] = ctx
->EvalMap
.Map2Index
.v2
;
710 v
[0] = ctx
->EvalMap
.Map2Normal
.u1
;
711 v
[1] = ctx
->EvalMap
.Map2Normal
.u2
;
712 v
[2] = ctx
->EvalMap
.Map2Normal
.v1
;
713 v
[3] = ctx
->EvalMap
.Map2Normal
.v2
;
715 case GL_MAP2_TEXTURE_COORD_1
:
716 v
[0] = ctx
->EvalMap
.Map2Texture1
.u1
;
717 v
[1] = ctx
->EvalMap
.Map2Texture1
.u2
;
718 v
[2] = ctx
->EvalMap
.Map2Texture1
.v1
;
719 v
[3] = ctx
->EvalMap
.Map2Texture1
.v2
;
721 case GL_MAP2_TEXTURE_COORD_2
:
722 v
[0] = ctx
->EvalMap
.Map2Texture2
.u1
;
723 v
[1] = ctx
->EvalMap
.Map2Texture2
.u2
;
724 v
[2] = ctx
->EvalMap
.Map2Texture2
.v1
;
725 v
[3] = ctx
->EvalMap
.Map2Texture2
.v2
;
727 case GL_MAP2_TEXTURE_COORD_3
:
728 v
[0] = ctx
->EvalMap
.Map2Texture3
.u1
;
729 v
[1] = ctx
->EvalMap
.Map2Texture3
.u2
;
730 v
[2] = ctx
->EvalMap
.Map2Texture3
.v1
;
731 v
[3] = ctx
->EvalMap
.Map2Texture3
.v2
;
733 case GL_MAP2_TEXTURE_COORD_4
:
734 v
[0] = ctx
->EvalMap
.Map2Texture4
.u1
;
735 v
[1] = ctx
->EvalMap
.Map2Texture4
.u2
;
736 v
[2] = ctx
->EvalMap
.Map2Texture4
.v1
;
737 v
[3] = ctx
->EvalMap
.Map2Texture4
.v2
;
739 case GL_MAP2_VERTEX_3
:
740 v
[0] = ctx
->EvalMap
.Map2Vertex3
.u1
;
741 v
[1] = ctx
->EvalMap
.Map2Vertex3
.u2
;
742 v
[2] = ctx
->EvalMap
.Map2Vertex3
.v1
;
743 v
[3] = ctx
->EvalMap
.Map2Vertex3
.v2
;
745 case GL_MAP2_VERTEX_4
:
746 v
[0] = ctx
->EvalMap
.Map2Vertex4
.u1
;
747 v
[1] = ctx
->EvalMap
.Map2Vertex4
.u2
;
748 v
[2] = ctx
->EvalMap
.Map2Vertex4
.v1
;
749 v
[3] = ctx
->EvalMap
.Map2Vertex4
.v2
;
752 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
756 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(query)" );
762 _mesa_GetMapfv( GLenum target
, GLenum query
, GLfloat
*v
)
764 GET_CURRENT_CONTEXT(ctx
);
767 ASSERT_OUTSIDE_BEGIN_END(ctx
);
772 case GL_MAP1_COLOR_4
:
773 data
= ctx
->EvalMap
.Map1Color4
.Points
;
774 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
777 data
= ctx
->EvalMap
.Map1Index
.Points
;
778 n
= ctx
->EvalMap
.Map1Index
.Order
;
781 data
= ctx
->EvalMap
.Map1Normal
.Points
;
782 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
784 case GL_MAP1_TEXTURE_COORD_1
:
785 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
786 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
788 case GL_MAP1_TEXTURE_COORD_2
:
789 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
790 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
792 case GL_MAP1_TEXTURE_COORD_3
:
793 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
794 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
796 case GL_MAP1_TEXTURE_COORD_4
:
797 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
798 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
800 case GL_MAP1_VERTEX_3
:
801 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
802 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
804 case GL_MAP1_VERTEX_4
:
805 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
806 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
808 case GL_MAP2_COLOR_4
:
809 data
= ctx
->EvalMap
.Map2Color4
.Points
;
810 n
= ctx
->EvalMap
.Map2Color4
.Uorder
811 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
814 data
= ctx
->EvalMap
.Map2Index
.Points
;
815 n
= ctx
->EvalMap
.Map2Index
.Uorder
816 * ctx
->EvalMap
.Map2Index
.Vorder
;
819 data
= ctx
->EvalMap
.Map2Normal
.Points
;
820 n
= ctx
->EvalMap
.Map2Normal
.Uorder
821 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
823 case GL_MAP2_TEXTURE_COORD_1
:
824 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
825 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
826 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
828 case GL_MAP2_TEXTURE_COORD_2
:
829 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
830 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
831 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
833 case GL_MAP2_TEXTURE_COORD_3
:
834 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
835 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
836 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
838 case GL_MAP2_TEXTURE_COORD_4
:
839 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
840 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
841 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
843 case GL_MAP2_VERTEX_3
:
844 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
845 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
846 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
848 case GL_MAP2_VERTEX_4
:
849 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
850 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
851 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
854 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
865 case GL_MAP1_COLOR_4
:
866 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
869 *v
= ctx
->EvalMap
.Map1Index
.Order
;
872 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
874 case GL_MAP1_TEXTURE_COORD_1
:
875 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
877 case GL_MAP1_TEXTURE_COORD_2
:
878 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
880 case GL_MAP1_TEXTURE_COORD_3
:
881 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
883 case GL_MAP1_TEXTURE_COORD_4
:
884 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
886 case GL_MAP1_VERTEX_3
:
887 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
889 case GL_MAP1_VERTEX_4
:
890 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
892 case GL_MAP2_COLOR_4
:
893 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
894 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
897 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
898 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
901 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
902 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
904 case GL_MAP2_TEXTURE_COORD_1
:
905 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
906 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
908 case GL_MAP2_TEXTURE_COORD_2
:
909 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
910 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
912 case GL_MAP2_TEXTURE_COORD_3
:
913 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
914 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
916 case GL_MAP2_TEXTURE_COORD_4
:
917 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
918 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
920 case GL_MAP2_VERTEX_3
:
921 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
922 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
924 case GL_MAP2_VERTEX_4
:
925 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
926 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
929 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
935 case GL_MAP1_COLOR_4
:
936 v
[0] = ctx
->EvalMap
.Map1Color4
.u1
;
937 v
[1] = ctx
->EvalMap
.Map1Color4
.u2
;
940 v
[0] = ctx
->EvalMap
.Map1Index
.u1
;
941 v
[1] = ctx
->EvalMap
.Map1Index
.u2
;
944 v
[0] = ctx
->EvalMap
.Map1Normal
.u1
;
945 v
[1] = ctx
->EvalMap
.Map1Normal
.u2
;
947 case GL_MAP1_TEXTURE_COORD_1
:
948 v
[0] = ctx
->EvalMap
.Map1Texture1
.u1
;
949 v
[1] = ctx
->EvalMap
.Map1Texture1
.u2
;
951 case GL_MAP1_TEXTURE_COORD_2
:
952 v
[0] = ctx
->EvalMap
.Map1Texture2
.u1
;
953 v
[1] = ctx
->EvalMap
.Map1Texture2
.u2
;
955 case GL_MAP1_TEXTURE_COORD_3
:
956 v
[0] = ctx
->EvalMap
.Map1Texture3
.u1
;
957 v
[1] = ctx
->EvalMap
.Map1Texture3
.u2
;
959 case GL_MAP1_TEXTURE_COORD_4
:
960 v
[0] = ctx
->EvalMap
.Map1Texture4
.u1
;
961 v
[1] = ctx
->EvalMap
.Map1Texture4
.u2
;
963 case GL_MAP1_VERTEX_3
:
964 v
[0] = ctx
->EvalMap
.Map1Vertex3
.u1
;
965 v
[1] = ctx
->EvalMap
.Map1Vertex3
.u2
;
967 case GL_MAP1_VERTEX_4
:
968 v
[0] = ctx
->EvalMap
.Map1Vertex4
.u1
;
969 v
[1] = ctx
->EvalMap
.Map1Vertex4
.u2
;
971 case GL_MAP2_COLOR_4
:
972 v
[0] = ctx
->EvalMap
.Map2Color4
.u1
;
973 v
[1] = ctx
->EvalMap
.Map2Color4
.u2
;
974 v
[2] = ctx
->EvalMap
.Map2Color4
.v1
;
975 v
[3] = ctx
->EvalMap
.Map2Color4
.v2
;
978 v
[0] = ctx
->EvalMap
.Map2Index
.u1
;
979 v
[1] = ctx
->EvalMap
.Map2Index
.u2
;
980 v
[2] = ctx
->EvalMap
.Map2Index
.v1
;
981 v
[3] = ctx
->EvalMap
.Map2Index
.v2
;
984 v
[0] = ctx
->EvalMap
.Map2Normal
.u1
;
985 v
[1] = ctx
->EvalMap
.Map2Normal
.u2
;
986 v
[2] = ctx
->EvalMap
.Map2Normal
.v1
;
987 v
[3] = ctx
->EvalMap
.Map2Normal
.v2
;
989 case GL_MAP2_TEXTURE_COORD_1
:
990 v
[0] = ctx
->EvalMap
.Map2Texture1
.u1
;
991 v
[1] = ctx
->EvalMap
.Map2Texture1
.u2
;
992 v
[2] = ctx
->EvalMap
.Map2Texture1
.v1
;
993 v
[3] = ctx
->EvalMap
.Map2Texture1
.v2
;
995 case GL_MAP2_TEXTURE_COORD_2
:
996 v
[0] = ctx
->EvalMap
.Map2Texture2
.u1
;
997 v
[1] = ctx
->EvalMap
.Map2Texture2
.u2
;
998 v
[2] = ctx
->EvalMap
.Map2Texture2
.v1
;
999 v
[3] = ctx
->EvalMap
.Map2Texture2
.v2
;
1001 case GL_MAP2_TEXTURE_COORD_3
:
1002 v
[0] = ctx
->EvalMap
.Map2Texture3
.u1
;
1003 v
[1] = ctx
->EvalMap
.Map2Texture3
.u2
;
1004 v
[2] = ctx
->EvalMap
.Map2Texture3
.v1
;
1005 v
[3] = ctx
->EvalMap
.Map2Texture3
.v2
;
1007 case GL_MAP2_TEXTURE_COORD_4
:
1008 v
[0] = ctx
->EvalMap
.Map2Texture4
.u1
;
1009 v
[1] = ctx
->EvalMap
.Map2Texture4
.u2
;
1010 v
[2] = ctx
->EvalMap
.Map2Texture4
.v1
;
1011 v
[3] = ctx
->EvalMap
.Map2Texture4
.v2
;
1013 case GL_MAP2_VERTEX_3
:
1014 v
[0] = ctx
->EvalMap
.Map2Vertex3
.u1
;
1015 v
[1] = ctx
->EvalMap
.Map2Vertex3
.u2
;
1016 v
[2] = ctx
->EvalMap
.Map2Vertex3
.v1
;
1017 v
[3] = ctx
->EvalMap
.Map2Vertex3
.v2
;
1019 case GL_MAP2_VERTEX_4
:
1020 v
[0] = ctx
->EvalMap
.Map2Vertex4
.u1
;
1021 v
[1] = ctx
->EvalMap
.Map2Vertex4
.u2
;
1022 v
[2] = ctx
->EvalMap
.Map2Vertex4
.v1
;
1023 v
[3] = ctx
->EvalMap
.Map2Vertex4
.v2
;
1026 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
1030 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(query)" );
1036 _mesa_GetMapiv( GLenum target
, GLenum query
, GLint
*v
)
1038 GET_CURRENT_CONTEXT(ctx
);
1041 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1046 case GL_MAP1_COLOR_4
:
1047 data
= ctx
->EvalMap
.Map1Color4
.Points
;
1048 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
1051 data
= ctx
->EvalMap
.Map1Index
.Points
;
1052 n
= ctx
->EvalMap
.Map1Index
.Order
;
1054 case GL_MAP1_NORMAL
:
1055 data
= ctx
->EvalMap
.Map1Normal
.Points
;
1056 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
1058 case GL_MAP1_TEXTURE_COORD_1
:
1059 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
1060 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
1062 case GL_MAP1_TEXTURE_COORD_2
:
1063 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
1064 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
1066 case GL_MAP1_TEXTURE_COORD_3
:
1067 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
1068 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
1070 case GL_MAP1_TEXTURE_COORD_4
:
1071 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
1072 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
1074 case GL_MAP1_VERTEX_3
:
1075 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
1076 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
1078 case GL_MAP1_VERTEX_4
:
1079 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
1080 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
1082 case GL_MAP2_COLOR_4
:
1083 data
= ctx
->EvalMap
.Map2Color4
.Points
;
1084 n
= ctx
->EvalMap
.Map2Color4
.Uorder
1085 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
1088 data
= ctx
->EvalMap
.Map2Index
.Points
;
1089 n
= ctx
->EvalMap
.Map2Index
.Uorder
1090 * ctx
->EvalMap
.Map2Index
.Vorder
;
1092 case GL_MAP2_NORMAL
:
1093 data
= ctx
->EvalMap
.Map2Normal
.Points
;
1094 n
= ctx
->EvalMap
.Map2Normal
.Uorder
1095 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
1097 case GL_MAP2_TEXTURE_COORD_1
:
1098 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
1099 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
1100 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
1102 case GL_MAP2_TEXTURE_COORD_2
:
1103 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
1104 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
1105 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
1107 case GL_MAP2_TEXTURE_COORD_3
:
1108 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
1109 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
1110 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
1112 case GL_MAP2_TEXTURE_COORD_4
:
1113 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
1114 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
1115 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
1117 case GL_MAP2_VERTEX_3
:
1118 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
1119 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
1120 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
1122 case GL_MAP2_VERTEX_4
:
1123 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
1124 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
1125 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
1128 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1133 v
[i
] = ROUNDF(data
[i
]);
1139 case GL_MAP1_COLOR_4
:
1140 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
1143 *v
= ctx
->EvalMap
.Map1Index
.Order
;
1145 case GL_MAP1_NORMAL
:
1146 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
1148 case GL_MAP1_TEXTURE_COORD_1
:
1149 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
1151 case GL_MAP1_TEXTURE_COORD_2
:
1152 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
1154 case GL_MAP1_TEXTURE_COORD_3
:
1155 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
1157 case GL_MAP1_TEXTURE_COORD_4
:
1158 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
1160 case GL_MAP1_VERTEX_3
:
1161 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
1163 case GL_MAP1_VERTEX_4
:
1164 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
1166 case GL_MAP2_COLOR_4
:
1167 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
1168 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
1171 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
1172 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
1174 case GL_MAP2_NORMAL
:
1175 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
1176 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
1178 case GL_MAP2_TEXTURE_COORD_1
:
1179 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
1180 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
1182 case GL_MAP2_TEXTURE_COORD_2
:
1183 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
1184 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
1186 case GL_MAP2_TEXTURE_COORD_3
:
1187 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
1188 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
1190 case GL_MAP2_TEXTURE_COORD_4
:
1191 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
1192 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
1194 case GL_MAP2_VERTEX_3
:
1195 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
1196 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
1198 case GL_MAP2_VERTEX_4
:
1199 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
1200 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
1203 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1209 case GL_MAP1_COLOR_4
:
1210 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Color4
.u1
);
1211 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Color4
.u2
);
1214 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Index
.u1
);
1215 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Index
.u2
);
1217 case GL_MAP1_NORMAL
:
1218 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Normal
.u1
);
1219 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Normal
.u2
);
1221 case GL_MAP1_TEXTURE_COORD_1
:
1222 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture1
.u1
);
1223 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture1
.u2
);
1225 case GL_MAP1_TEXTURE_COORD_2
:
1226 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture2
.u1
);
1227 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture2
.u2
);
1229 case GL_MAP1_TEXTURE_COORD_3
:
1230 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture3
.u1
);
1231 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture3
.u2
);
1233 case GL_MAP1_TEXTURE_COORD_4
:
1234 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture4
.u1
);
1235 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture4
.u2
);
1237 case GL_MAP1_VERTEX_3
:
1238 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Vertex3
.u1
);
1239 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Vertex3
.u2
);
1241 case GL_MAP1_VERTEX_4
:
1242 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Vertex4
.u1
);
1243 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Vertex4
.u2
);
1245 case GL_MAP2_COLOR_4
:
1246 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Color4
.u1
);
1247 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Color4
.u2
);
1248 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Color4
.v1
);
1249 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Color4
.v2
);
1252 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Index
.u1
);
1253 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Index
.u2
);
1254 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Index
.v1
);
1255 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Index
.v2
);
1257 case GL_MAP2_NORMAL
:
1258 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Normal
.u1
);
1259 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Normal
.u2
);
1260 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Normal
.v1
);
1261 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Normal
.v2
);
1263 case GL_MAP2_TEXTURE_COORD_1
:
1264 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.u1
);
1265 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.u2
);
1266 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.v1
);
1267 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.v2
);
1269 case GL_MAP2_TEXTURE_COORD_2
:
1270 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.u1
);
1271 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.u2
);
1272 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.v1
);
1273 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.v2
);
1275 case GL_MAP2_TEXTURE_COORD_3
:
1276 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.u1
);
1277 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.u2
);
1278 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.v1
);
1279 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.v2
);
1281 case GL_MAP2_TEXTURE_COORD_4
:
1282 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.u1
);
1283 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.u2
);
1284 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.v1
);
1285 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.v2
);
1287 case GL_MAP2_VERTEX_3
:
1288 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.u1
);
1289 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.u2
);
1290 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.v1
);
1291 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.v2
);
1293 case GL_MAP2_VERTEX_4
:
1294 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.u1
);
1295 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.u2
);
1296 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.v1
);
1297 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.v2
);
1300 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1304 _mesa_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(query)" );
1311 _mesa_MapGrid1f( GLint un
, GLfloat u1
, GLfloat u2
)
1313 GET_CURRENT_CONTEXT(ctx
);
1314 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1317 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMapGrid1f" );
1320 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
1321 ctx
->Eval
.MapGrid1un
= un
;
1322 ctx
->Eval
.MapGrid1u1
= u1
;
1323 ctx
->Eval
.MapGrid1u2
= u2
;
1324 ctx
->Eval
.MapGrid1du
= (u2
- u1
) / (GLfloat
) un
;
1329 _mesa_MapGrid1d( GLint un
, GLdouble u1
, GLdouble u2
)
1331 _mesa_MapGrid1f( un
, u1
, u2
);
1336 _mesa_MapGrid2f( GLint un
, GLfloat u1
, GLfloat u2
,
1337 GLint vn
, GLfloat v1
, GLfloat v2
)
1339 GET_CURRENT_CONTEXT(ctx
);
1340 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1343 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMapGrid2f(un)" );
1347 _mesa_error( ctx
, GL_INVALID_VALUE
, "glMapGrid2f(vn)" );
1351 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
1352 ctx
->Eval
.MapGrid2un
= un
;
1353 ctx
->Eval
.MapGrid2u1
= u1
;
1354 ctx
->Eval
.MapGrid2u2
= u2
;
1355 ctx
->Eval
.MapGrid2du
= (u2
- u1
) / (GLfloat
) un
;
1356 ctx
->Eval
.MapGrid2vn
= vn
;
1357 ctx
->Eval
.MapGrid2v1
= v1
;
1358 ctx
->Eval
.MapGrid2v2
= v2
;
1359 ctx
->Eval
.MapGrid2dv
= (v2
- v1
) / (GLfloat
) vn
;
1364 _mesa_MapGrid2d( GLint un
, GLdouble u1
, GLdouble u2
,
1365 GLint vn
, GLdouble v1
, GLdouble v2
)
1367 _mesa_MapGrid2f( un
, u1
, u2
, vn
, v1
, v2
);