1 /* $Id: eval.c,v 1.17 2000/12/26 05:09:28 keithw Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999-2000 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
*gl_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
*gl_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
*gl_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
*gl_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 gl_error( ctx
, GL_INVALID_VALUE
, "glMap1(u1,u2)" );
263 if (uorder
< 1 || uorder
> MAX_EVAL_ORDER
) {
264 gl_error( ctx
, GL_INVALID_VALUE
, "glMap1(order)" );
268 gl_error( ctx
, GL_INVALID_VALUE
, "glMap1(points)" );
272 k
= _mesa_evaluator_components( target
);
274 gl_error( ctx
, GL_INVALID_ENUM
, "glMap1(target)" );
278 gl_error( ctx
, GL_INVALID_VALUE
, "glMap1(stride)" );
283 case GL_MAP1_VERTEX_3
:
284 map
= &ctx
->EvalMap
.Map1Vertex3
;
286 case GL_MAP1_VERTEX_4
:
287 map
= &ctx
->EvalMap
.Map1Vertex4
;
290 map
= &ctx
->EvalMap
.Map1Index
;
292 case GL_MAP1_COLOR_4
:
293 map
= &ctx
->EvalMap
.Map1Color4
;
296 map
= &ctx
->EvalMap
.Map1Normal
;
298 case GL_MAP1_TEXTURE_COORD_1
:
299 map
= &ctx
->EvalMap
.Map1Texture1
;
301 case GL_MAP1_TEXTURE_COORD_2
:
302 map
= &ctx
->EvalMap
.Map1Texture2
;
304 case GL_MAP1_TEXTURE_COORD_3
:
305 map
= &ctx
->EvalMap
.Map1Texture3
;
307 case GL_MAP1_TEXTURE_COORD_4
:
308 map
= &ctx
->EvalMap
.Map1Texture4
;
311 gl_error( ctx
, GL_INVALID_ENUM
, "glMap1(target)" );
315 /* make copy of the control points */
316 if (type
== GL_FLOAT
)
317 pnts
= gl_copy_map_points1f(target
, ustride
, uorder
, (GLfloat
*) points
);
319 pnts
= gl_copy_map_points1d(target
, ustride
, uorder
, (GLdouble
*) points
);
322 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
326 map
->du
= 1.0 / (u2
- u1
);
335 _mesa_Map1f( GLenum target
, GLfloat u1
, GLfloat u2
, GLint stride
,
336 GLint order
, const GLfloat
*points
)
338 map1(target
, u1
, u2
, stride
, order
, points
, GL_FLOAT
);
343 _mesa_Map1d( GLenum target
, GLdouble u1
, GLdouble u2
, GLint stride
,
344 GLint order
, const GLdouble
*points
)
346 map1(target
, u1
, u2
, stride
, order
, points
, GL_DOUBLE
);
351 map2( GLenum target
, GLfloat u1
, GLfloat u2
, GLint ustride
, GLint uorder
,
352 GLfloat v1
, GLfloat v2
, GLint vstride
, GLint vorder
,
353 const GLvoid
*points
, GLenum type
)
355 GET_CURRENT_CONTEXT(ctx
);
358 struct gl_2d_map
*map
= 0;
359 ASSERT_OUTSIDE_BEGIN_END(ctx
);
362 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(u1,u2)" );
367 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(v1,v2)" );
371 if (uorder
<1 || uorder
>MAX_EVAL_ORDER
) {
372 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(uorder)" );
376 if (vorder
<1 || vorder
>MAX_EVAL_ORDER
) {
377 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(vorder)" );
381 k
= _mesa_evaluator_components( target
);
383 gl_error( ctx
, GL_INVALID_ENUM
, "glMap2(target)" );
387 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(ustride)" );
391 gl_error( ctx
, GL_INVALID_VALUE
, "glMap2(vstride)" );
396 case GL_MAP2_VERTEX_3
:
397 map
= &ctx
->EvalMap
.Map2Vertex3
;
399 case GL_MAP2_VERTEX_4
:
400 map
= &ctx
->EvalMap
.Map2Vertex4
;
403 map
= &ctx
->EvalMap
.Map2Index
;
405 case GL_MAP2_COLOR_4
:
406 map
= &ctx
->EvalMap
.Map2Color4
;
409 map
= &ctx
->EvalMap
.Map2Normal
;
411 case GL_MAP2_TEXTURE_COORD_1
:
412 map
= &ctx
->EvalMap
.Map2Texture1
;
414 case GL_MAP2_TEXTURE_COORD_2
:
415 map
= &ctx
->EvalMap
.Map2Texture2
;
417 case GL_MAP2_TEXTURE_COORD_3
:
418 map
= &ctx
->EvalMap
.Map2Texture3
;
420 case GL_MAP2_TEXTURE_COORD_4
:
421 map
= &ctx
->EvalMap
.Map2Texture4
;
424 gl_error( ctx
, GL_INVALID_ENUM
, "glMap2(target)" );
428 /* make copy of the control points */
429 if (type
== GL_FLOAT
)
430 pnts
= gl_copy_map_points2f(target
, ustride
, uorder
,
431 vstride
, vorder
, (GLfloat
*) points
);
433 pnts
= gl_copy_map_points2d(target
, ustride
, uorder
,
434 vstride
, vorder
, (GLdouble
*) points
);
437 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
438 map
->Uorder
= uorder
;
441 map
->du
= 1.0 / (u2
- u1
);
442 map
->Vorder
= vorder
;
445 map
->dv
= 1.0 / (v2
- v1
);
453 _mesa_Map2f( GLenum target
,
454 GLfloat u1
, GLfloat u2
, GLint ustride
, GLint uorder
,
455 GLfloat v1
, GLfloat v2
, GLint vstride
, GLint vorder
,
456 const GLfloat
*points
)
458 map2(target
, u1
, u2
, ustride
, uorder
, v1
, v2
, vstride
, vorder
,
464 _mesa_Map2d( GLenum target
,
465 GLdouble u1
, GLdouble u2
, GLint ustride
, GLint uorder
,
466 GLdouble v1
, GLdouble v2
, GLint vstride
, GLint vorder
,
467 const GLdouble
*points
)
469 map2(target
, u1
, u2
, ustride
, uorder
, v1
, v2
, vstride
, vorder
,
476 _mesa_GetMapdv( GLenum target
, GLenum query
, GLdouble
*v
)
478 GET_CURRENT_CONTEXT(ctx
);
481 ASSERT_OUTSIDE_BEGIN_END(ctx
);
486 case GL_MAP1_COLOR_4
:
487 data
= ctx
->EvalMap
.Map1Color4
.Points
;
488 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
491 data
= ctx
->EvalMap
.Map1Index
.Points
;
492 n
= ctx
->EvalMap
.Map1Index
.Order
;
495 data
= ctx
->EvalMap
.Map1Normal
.Points
;
496 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
498 case GL_MAP1_TEXTURE_COORD_1
:
499 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
500 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
502 case GL_MAP1_TEXTURE_COORD_2
:
503 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
504 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
506 case GL_MAP1_TEXTURE_COORD_3
:
507 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
508 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
510 case GL_MAP1_TEXTURE_COORD_4
:
511 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
512 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
514 case GL_MAP1_VERTEX_3
:
515 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
516 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
518 case GL_MAP1_VERTEX_4
:
519 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
520 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
522 case GL_MAP2_COLOR_4
:
523 data
= ctx
->EvalMap
.Map2Color4
.Points
;
524 n
= ctx
->EvalMap
.Map2Color4
.Uorder
525 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
528 data
= ctx
->EvalMap
.Map2Index
.Points
;
529 n
= ctx
->EvalMap
.Map2Index
.Uorder
530 * ctx
->EvalMap
.Map2Index
.Vorder
;
533 data
= ctx
->EvalMap
.Map2Normal
.Points
;
534 n
= ctx
->EvalMap
.Map2Normal
.Uorder
535 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
537 case GL_MAP2_TEXTURE_COORD_1
:
538 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
539 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
540 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
542 case GL_MAP2_TEXTURE_COORD_2
:
543 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
544 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
545 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
547 case GL_MAP2_TEXTURE_COORD_3
:
548 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
549 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
550 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
552 case GL_MAP2_TEXTURE_COORD_4
:
553 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
554 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
555 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
557 case GL_MAP2_VERTEX_3
:
558 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
559 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
560 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
562 case GL_MAP2_VERTEX_4
:
563 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
564 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
565 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
568 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
579 case GL_MAP1_COLOR_4
:
580 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
583 *v
= ctx
->EvalMap
.Map1Index
.Order
;
586 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
588 case GL_MAP1_TEXTURE_COORD_1
:
589 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
591 case GL_MAP1_TEXTURE_COORD_2
:
592 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
594 case GL_MAP1_TEXTURE_COORD_3
:
595 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
597 case GL_MAP1_TEXTURE_COORD_4
:
598 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
600 case GL_MAP1_VERTEX_3
:
601 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
603 case GL_MAP1_VERTEX_4
:
604 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
606 case GL_MAP2_COLOR_4
:
607 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
608 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
611 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
612 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
615 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
616 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
618 case GL_MAP2_TEXTURE_COORD_1
:
619 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
620 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
622 case GL_MAP2_TEXTURE_COORD_2
:
623 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
624 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
626 case GL_MAP2_TEXTURE_COORD_3
:
627 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
628 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
630 case GL_MAP2_TEXTURE_COORD_4
:
631 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
632 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
634 case GL_MAP2_VERTEX_3
:
635 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
636 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
638 case GL_MAP2_VERTEX_4
:
639 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
640 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
643 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
649 case GL_MAP1_COLOR_4
:
650 v
[0] = ctx
->EvalMap
.Map1Color4
.u1
;
651 v
[1] = ctx
->EvalMap
.Map1Color4
.u2
;
654 v
[0] = ctx
->EvalMap
.Map1Index
.u1
;
655 v
[1] = ctx
->EvalMap
.Map1Index
.u2
;
658 v
[0] = ctx
->EvalMap
.Map1Normal
.u1
;
659 v
[1] = ctx
->EvalMap
.Map1Normal
.u2
;
661 case GL_MAP1_TEXTURE_COORD_1
:
662 v
[0] = ctx
->EvalMap
.Map1Texture1
.u1
;
663 v
[1] = ctx
->EvalMap
.Map1Texture1
.u2
;
665 case GL_MAP1_TEXTURE_COORD_2
:
666 v
[0] = ctx
->EvalMap
.Map1Texture2
.u1
;
667 v
[1] = ctx
->EvalMap
.Map1Texture2
.u2
;
669 case GL_MAP1_TEXTURE_COORD_3
:
670 v
[0] = ctx
->EvalMap
.Map1Texture3
.u1
;
671 v
[1] = ctx
->EvalMap
.Map1Texture3
.u2
;
673 case GL_MAP1_TEXTURE_COORD_4
:
674 v
[0] = ctx
->EvalMap
.Map1Texture4
.u1
;
675 v
[1] = ctx
->EvalMap
.Map1Texture4
.u2
;
677 case GL_MAP1_VERTEX_3
:
678 v
[0] = ctx
->EvalMap
.Map1Vertex3
.u1
;
679 v
[1] = ctx
->EvalMap
.Map1Vertex3
.u2
;
681 case GL_MAP1_VERTEX_4
:
682 v
[0] = ctx
->EvalMap
.Map1Vertex4
.u1
;
683 v
[1] = ctx
->EvalMap
.Map1Vertex4
.u2
;
685 case GL_MAP2_COLOR_4
:
686 v
[0] = ctx
->EvalMap
.Map2Color4
.u1
;
687 v
[1] = ctx
->EvalMap
.Map2Color4
.u2
;
688 v
[2] = ctx
->EvalMap
.Map2Color4
.v1
;
689 v
[3] = ctx
->EvalMap
.Map2Color4
.v2
;
692 v
[0] = ctx
->EvalMap
.Map2Index
.u1
;
693 v
[1] = ctx
->EvalMap
.Map2Index
.u2
;
694 v
[2] = ctx
->EvalMap
.Map2Index
.v1
;
695 v
[3] = ctx
->EvalMap
.Map2Index
.v2
;
698 v
[0] = ctx
->EvalMap
.Map2Normal
.u1
;
699 v
[1] = ctx
->EvalMap
.Map2Normal
.u2
;
700 v
[2] = ctx
->EvalMap
.Map2Normal
.v1
;
701 v
[3] = ctx
->EvalMap
.Map2Normal
.v2
;
703 case GL_MAP2_TEXTURE_COORD_1
:
704 v
[0] = ctx
->EvalMap
.Map2Texture1
.u1
;
705 v
[1] = ctx
->EvalMap
.Map2Texture1
.u2
;
706 v
[2] = ctx
->EvalMap
.Map2Texture1
.v1
;
707 v
[3] = ctx
->EvalMap
.Map2Texture1
.v2
;
709 case GL_MAP2_TEXTURE_COORD_2
:
710 v
[0] = ctx
->EvalMap
.Map2Texture2
.u1
;
711 v
[1] = ctx
->EvalMap
.Map2Texture2
.u2
;
712 v
[2] = ctx
->EvalMap
.Map2Texture2
.v1
;
713 v
[3] = ctx
->EvalMap
.Map2Texture2
.v2
;
715 case GL_MAP2_TEXTURE_COORD_3
:
716 v
[0] = ctx
->EvalMap
.Map2Texture3
.u1
;
717 v
[1] = ctx
->EvalMap
.Map2Texture3
.u2
;
718 v
[2] = ctx
->EvalMap
.Map2Texture3
.v1
;
719 v
[3] = ctx
->EvalMap
.Map2Texture3
.v2
;
721 case GL_MAP2_TEXTURE_COORD_4
:
722 v
[0] = ctx
->EvalMap
.Map2Texture4
.u1
;
723 v
[1] = ctx
->EvalMap
.Map2Texture4
.u2
;
724 v
[2] = ctx
->EvalMap
.Map2Texture4
.v1
;
725 v
[3] = ctx
->EvalMap
.Map2Texture4
.v2
;
727 case GL_MAP2_VERTEX_3
:
728 v
[0] = ctx
->EvalMap
.Map2Vertex3
.u1
;
729 v
[1] = ctx
->EvalMap
.Map2Vertex3
.u2
;
730 v
[2] = ctx
->EvalMap
.Map2Vertex3
.v1
;
731 v
[3] = ctx
->EvalMap
.Map2Vertex3
.v2
;
733 case GL_MAP2_VERTEX_4
:
734 v
[0] = ctx
->EvalMap
.Map2Vertex4
.u1
;
735 v
[1] = ctx
->EvalMap
.Map2Vertex4
.u2
;
736 v
[2] = ctx
->EvalMap
.Map2Vertex4
.v1
;
737 v
[3] = ctx
->EvalMap
.Map2Vertex4
.v2
;
740 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(target)" );
744 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapdv(query)" );
750 _mesa_GetMapfv( GLenum target
, GLenum query
, GLfloat
*v
)
752 GET_CURRENT_CONTEXT(ctx
);
755 ASSERT_OUTSIDE_BEGIN_END(ctx
);
760 case GL_MAP1_COLOR_4
:
761 data
= ctx
->EvalMap
.Map1Color4
.Points
;
762 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
765 data
= ctx
->EvalMap
.Map1Index
.Points
;
766 n
= ctx
->EvalMap
.Map1Index
.Order
;
769 data
= ctx
->EvalMap
.Map1Normal
.Points
;
770 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
772 case GL_MAP1_TEXTURE_COORD_1
:
773 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
774 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
776 case GL_MAP1_TEXTURE_COORD_2
:
777 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
778 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
780 case GL_MAP1_TEXTURE_COORD_3
:
781 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
782 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
784 case GL_MAP1_TEXTURE_COORD_4
:
785 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
786 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
788 case GL_MAP1_VERTEX_3
:
789 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
790 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
792 case GL_MAP1_VERTEX_4
:
793 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
794 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
796 case GL_MAP2_COLOR_4
:
797 data
= ctx
->EvalMap
.Map2Color4
.Points
;
798 n
= ctx
->EvalMap
.Map2Color4
.Uorder
799 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
802 data
= ctx
->EvalMap
.Map2Index
.Points
;
803 n
= ctx
->EvalMap
.Map2Index
.Uorder
804 * ctx
->EvalMap
.Map2Index
.Vorder
;
807 data
= ctx
->EvalMap
.Map2Normal
.Points
;
808 n
= ctx
->EvalMap
.Map2Normal
.Uorder
809 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
811 case GL_MAP2_TEXTURE_COORD_1
:
812 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
813 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
814 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
816 case GL_MAP2_TEXTURE_COORD_2
:
817 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
818 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
819 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
821 case GL_MAP2_TEXTURE_COORD_3
:
822 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
823 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
824 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
826 case GL_MAP2_TEXTURE_COORD_4
:
827 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
828 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
829 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
831 case GL_MAP2_VERTEX_3
:
832 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
833 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
834 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
836 case GL_MAP2_VERTEX_4
:
837 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
838 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
839 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
842 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
853 case GL_MAP1_COLOR_4
:
854 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
857 *v
= ctx
->EvalMap
.Map1Index
.Order
;
860 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
862 case GL_MAP1_TEXTURE_COORD_1
:
863 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
865 case GL_MAP1_TEXTURE_COORD_2
:
866 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
868 case GL_MAP1_TEXTURE_COORD_3
:
869 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
871 case GL_MAP1_TEXTURE_COORD_4
:
872 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
874 case GL_MAP1_VERTEX_3
:
875 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
877 case GL_MAP1_VERTEX_4
:
878 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
880 case GL_MAP2_COLOR_4
:
881 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
882 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
885 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
886 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
889 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
890 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
892 case GL_MAP2_TEXTURE_COORD_1
:
893 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
894 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
896 case GL_MAP2_TEXTURE_COORD_2
:
897 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
898 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
900 case GL_MAP2_TEXTURE_COORD_3
:
901 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
902 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
904 case GL_MAP2_TEXTURE_COORD_4
:
905 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
906 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
908 case GL_MAP2_VERTEX_3
:
909 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
910 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
912 case GL_MAP2_VERTEX_4
:
913 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
914 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
917 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
923 case GL_MAP1_COLOR_4
:
924 v
[0] = ctx
->EvalMap
.Map1Color4
.u1
;
925 v
[1] = ctx
->EvalMap
.Map1Color4
.u2
;
928 v
[0] = ctx
->EvalMap
.Map1Index
.u1
;
929 v
[1] = ctx
->EvalMap
.Map1Index
.u2
;
932 v
[0] = ctx
->EvalMap
.Map1Normal
.u1
;
933 v
[1] = ctx
->EvalMap
.Map1Normal
.u2
;
935 case GL_MAP1_TEXTURE_COORD_1
:
936 v
[0] = ctx
->EvalMap
.Map1Texture1
.u1
;
937 v
[1] = ctx
->EvalMap
.Map1Texture1
.u2
;
939 case GL_MAP1_TEXTURE_COORD_2
:
940 v
[0] = ctx
->EvalMap
.Map1Texture2
.u1
;
941 v
[1] = ctx
->EvalMap
.Map1Texture2
.u2
;
943 case GL_MAP1_TEXTURE_COORD_3
:
944 v
[0] = ctx
->EvalMap
.Map1Texture3
.u1
;
945 v
[1] = ctx
->EvalMap
.Map1Texture3
.u2
;
947 case GL_MAP1_TEXTURE_COORD_4
:
948 v
[0] = ctx
->EvalMap
.Map1Texture4
.u1
;
949 v
[1] = ctx
->EvalMap
.Map1Texture4
.u2
;
951 case GL_MAP1_VERTEX_3
:
952 v
[0] = ctx
->EvalMap
.Map1Vertex3
.u1
;
953 v
[1] = ctx
->EvalMap
.Map1Vertex3
.u2
;
955 case GL_MAP1_VERTEX_4
:
956 v
[0] = ctx
->EvalMap
.Map1Vertex4
.u1
;
957 v
[1] = ctx
->EvalMap
.Map1Vertex4
.u2
;
959 case GL_MAP2_COLOR_4
:
960 v
[0] = ctx
->EvalMap
.Map2Color4
.u1
;
961 v
[1] = ctx
->EvalMap
.Map2Color4
.u2
;
962 v
[2] = ctx
->EvalMap
.Map2Color4
.v1
;
963 v
[3] = ctx
->EvalMap
.Map2Color4
.v2
;
966 v
[0] = ctx
->EvalMap
.Map2Index
.u1
;
967 v
[1] = ctx
->EvalMap
.Map2Index
.u2
;
968 v
[2] = ctx
->EvalMap
.Map2Index
.v1
;
969 v
[3] = ctx
->EvalMap
.Map2Index
.v2
;
972 v
[0] = ctx
->EvalMap
.Map2Normal
.u1
;
973 v
[1] = ctx
->EvalMap
.Map2Normal
.u2
;
974 v
[2] = ctx
->EvalMap
.Map2Normal
.v1
;
975 v
[3] = ctx
->EvalMap
.Map2Normal
.v2
;
977 case GL_MAP2_TEXTURE_COORD_1
:
978 v
[0] = ctx
->EvalMap
.Map2Texture1
.u1
;
979 v
[1] = ctx
->EvalMap
.Map2Texture1
.u2
;
980 v
[2] = ctx
->EvalMap
.Map2Texture1
.v1
;
981 v
[3] = ctx
->EvalMap
.Map2Texture1
.v2
;
983 case GL_MAP2_TEXTURE_COORD_2
:
984 v
[0] = ctx
->EvalMap
.Map2Texture2
.u1
;
985 v
[1] = ctx
->EvalMap
.Map2Texture2
.u2
;
986 v
[2] = ctx
->EvalMap
.Map2Texture2
.v1
;
987 v
[3] = ctx
->EvalMap
.Map2Texture2
.v2
;
989 case GL_MAP2_TEXTURE_COORD_3
:
990 v
[0] = ctx
->EvalMap
.Map2Texture3
.u1
;
991 v
[1] = ctx
->EvalMap
.Map2Texture3
.u2
;
992 v
[2] = ctx
->EvalMap
.Map2Texture3
.v1
;
993 v
[3] = ctx
->EvalMap
.Map2Texture3
.v2
;
995 case GL_MAP2_TEXTURE_COORD_4
:
996 v
[0] = ctx
->EvalMap
.Map2Texture4
.u1
;
997 v
[1] = ctx
->EvalMap
.Map2Texture4
.u2
;
998 v
[2] = ctx
->EvalMap
.Map2Texture4
.v1
;
999 v
[3] = ctx
->EvalMap
.Map2Texture4
.v2
;
1001 case GL_MAP2_VERTEX_3
:
1002 v
[0] = ctx
->EvalMap
.Map2Vertex3
.u1
;
1003 v
[1] = ctx
->EvalMap
.Map2Vertex3
.u2
;
1004 v
[2] = ctx
->EvalMap
.Map2Vertex3
.v1
;
1005 v
[3] = ctx
->EvalMap
.Map2Vertex3
.v2
;
1007 case GL_MAP2_VERTEX_4
:
1008 v
[0] = ctx
->EvalMap
.Map2Vertex4
.u1
;
1009 v
[1] = ctx
->EvalMap
.Map2Vertex4
.u2
;
1010 v
[2] = ctx
->EvalMap
.Map2Vertex4
.v1
;
1011 v
[3] = ctx
->EvalMap
.Map2Vertex4
.v2
;
1014 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(target)" );
1018 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapfv(query)" );
1024 _mesa_GetMapiv( GLenum target
, GLenum query
, GLint
*v
)
1026 GET_CURRENT_CONTEXT(ctx
);
1029 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1034 case GL_MAP1_COLOR_4
:
1035 data
= ctx
->EvalMap
.Map1Color4
.Points
;
1036 n
= ctx
->EvalMap
.Map1Color4
.Order
* 4;
1039 data
= ctx
->EvalMap
.Map1Index
.Points
;
1040 n
= ctx
->EvalMap
.Map1Index
.Order
;
1042 case GL_MAP1_NORMAL
:
1043 data
= ctx
->EvalMap
.Map1Normal
.Points
;
1044 n
= ctx
->EvalMap
.Map1Normal
.Order
* 3;
1046 case GL_MAP1_TEXTURE_COORD_1
:
1047 data
= ctx
->EvalMap
.Map1Texture1
.Points
;
1048 n
= ctx
->EvalMap
.Map1Texture1
.Order
* 1;
1050 case GL_MAP1_TEXTURE_COORD_2
:
1051 data
= ctx
->EvalMap
.Map1Texture2
.Points
;
1052 n
= ctx
->EvalMap
.Map1Texture2
.Order
* 2;
1054 case GL_MAP1_TEXTURE_COORD_3
:
1055 data
= ctx
->EvalMap
.Map1Texture3
.Points
;
1056 n
= ctx
->EvalMap
.Map1Texture3
.Order
* 3;
1058 case GL_MAP1_TEXTURE_COORD_4
:
1059 data
= ctx
->EvalMap
.Map1Texture4
.Points
;
1060 n
= ctx
->EvalMap
.Map1Texture4
.Order
* 4;
1062 case GL_MAP1_VERTEX_3
:
1063 data
= ctx
->EvalMap
.Map1Vertex3
.Points
;
1064 n
= ctx
->EvalMap
.Map1Vertex3
.Order
* 3;
1066 case GL_MAP1_VERTEX_4
:
1067 data
= ctx
->EvalMap
.Map1Vertex4
.Points
;
1068 n
= ctx
->EvalMap
.Map1Vertex4
.Order
* 4;
1070 case GL_MAP2_COLOR_4
:
1071 data
= ctx
->EvalMap
.Map2Color4
.Points
;
1072 n
= ctx
->EvalMap
.Map2Color4
.Uorder
1073 * ctx
->EvalMap
.Map2Color4
.Vorder
* 4;
1076 data
= ctx
->EvalMap
.Map2Index
.Points
;
1077 n
= ctx
->EvalMap
.Map2Index
.Uorder
1078 * ctx
->EvalMap
.Map2Index
.Vorder
;
1080 case GL_MAP2_NORMAL
:
1081 data
= ctx
->EvalMap
.Map2Normal
.Points
;
1082 n
= ctx
->EvalMap
.Map2Normal
.Uorder
1083 * ctx
->EvalMap
.Map2Normal
.Vorder
* 3;
1085 case GL_MAP2_TEXTURE_COORD_1
:
1086 data
= ctx
->EvalMap
.Map2Texture1
.Points
;
1087 n
= ctx
->EvalMap
.Map2Texture1
.Uorder
1088 * ctx
->EvalMap
.Map2Texture1
.Vorder
* 1;
1090 case GL_MAP2_TEXTURE_COORD_2
:
1091 data
= ctx
->EvalMap
.Map2Texture2
.Points
;
1092 n
= ctx
->EvalMap
.Map2Texture2
.Uorder
1093 * ctx
->EvalMap
.Map2Texture2
.Vorder
* 2;
1095 case GL_MAP2_TEXTURE_COORD_3
:
1096 data
= ctx
->EvalMap
.Map2Texture3
.Points
;
1097 n
= ctx
->EvalMap
.Map2Texture3
.Uorder
1098 * ctx
->EvalMap
.Map2Texture3
.Vorder
* 3;
1100 case GL_MAP2_TEXTURE_COORD_4
:
1101 data
= ctx
->EvalMap
.Map2Texture4
.Points
;
1102 n
= ctx
->EvalMap
.Map2Texture4
.Uorder
1103 * ctx
->EvalMap
.Map2Texture4
.Vorder
* 4;
1105 case GL_MAP2_VERTEX_3
:
1106 data
= ctx
->EvalMap
.Map2Vertex3
.Points
;
1107 n
= ctx
->EvalMap
.Map2Vertex3
.Uorder
1108 * ctx
->EvalMap
.Map2Vertex3
.Vorder
* 3;
1110 case GL_MAP2_VERTEX_4
:
1111 data
= ctx
->EvalMap
.Map2Vertex4
.Points
;
1112 n
= ctx
->EvalMap
.Map2Vertex4
.Uorder
1113 * ctx
->EvalMap
.Map2Vertex4
.Vorder
* 4;
1116 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1121 v
[i
] = ROUNDF(data
[i
]);
1127 case GL_MAP1_COLOR_4
:
1128 *v
= ctx
->EvalMap
.Map1Color4
.Order
;
1131 *v
= ctx
->EvalMap
.Map1Index
.Order
;
1133 case GL_MAP1_NORMAL
:
1134 *v
= ctx
->EvalMap
.Map1Normal
.Order
;
1136 case GL_MAP1_TEXTURE_COORD_1
:
1137 *v
= ctx
->EvalMap
.Map1Texture1
.Order
;
1139 case GL_MAP1_TEXTURE_COORD_2
:
1140 *v
= ctx
->EvalMap
.Map1Texture2
.Order
;
1142 case GL_MAP1_TEXTURE_COORD_3
:
1143 *v
= ctx
->EvalMap
.Map1Texture3
.Order
;
1145 case GL_MAP1_TEXTURE_COORD_4
:
1146 *v
= ctx
->EvalMap
.Map1Texture4
.Order
;
1148 case GL_MAP1_VERTEX_3
:
1149 *v
= ctx
->EvalMap
.Map1Vertex3
.Order
;
1151 case GL_MAP1_VERTEX_4
:
1152 *v
= ctx
->EvalMap
.Map1Vertex4
.Order
;
1154 case GL_MAP2_COLOR_4
:
1155 v
[0] = ctx
->EvalMap
.Map2Color4
.Uorder
;
1156 v
[1] = ctx
->EvalMap
.Map2Color4
.Vorder
;
1159 v
[0] = ctx
->EvalMap
.Map2Index
.Uorder
;
1160 v
[1] = ctx
->EvalMap
.Map2Index
.Vorder
;
1162 case GL_MAP2_NORMAL
:
1163 v
[0] = ctx
->EvalMap
.Map2Normal
.Uorder
;
1164 v
[1] = ctx
->EvalMap
.Map2Normal
.Vorder
;
1166 case GL_MAP2_TEXTURE_COORD_1
:
1167 v
[0] = ctx
->EvalMap
.Map2Texture1
.Uorder
;
1168 v
[1] = ctx
->EvalMap
.Map2Texture1
.Vorder
;
1170 case GL_MAP2_TEXTURE_COORD_2
:
1171 v
[0] = ctx
->EvalMap
.Map2Texture2
.Uorder
;
1172 v
[1] = ctx
->EvalMap
.Map2Texture2
.Vorder
;
1174 case GL_MAP2_TEXTURE_COORD_3
:
1175 v
[0] = ctx
->EvalMap
.Map2Texture3
.Uorder
;
1176 v
[1] = ctx
->EvalMap
.Map2Texture3
.Vorder
;
1178 case GL_MAP2_TEXTURE_COORD_4
:
1179 v
[0] = ctx
->EvalMap
.Map2Texture4
.Uorder
;
1180 v
[1] = ctx
->EvalMap
.Map2Texture4
.Vorder
;
1182 case GL_MAP2_VERTEX_3
:
1183 v
[0] = ctx
->EvalMap
.Map2Vertex3
.Uorder
;
1184 v
[1] = ctx
->EvalMap
.Map2Vertex3
.Vorder
;
1186 case GL_MAP2_VERTEX_4
:
1187 v
[0] = ctx
->EvalMap
.Map2Vertex4
.Uorder
;
1188 v
[1] = ctx
->EvalMap
.Map2Vertex4
.Vorder
;
1191 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1197 case GL_MAP1_COLOR_4
:
1198 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Color4
.u1
);
1199 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Color4
.u2
);
1202 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Index
.u1
);
1203 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Index
.u2
);
1205 case GL_MAP1_NORMAL
:
1206 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Normal
.u1
);
1207 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Normal
.u2
);
1209 case GL_MAP1_TEXTURE_COORD_1
:
1210 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture1
.u1
);
1211 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture1
.u2
);
1213 case GL_MAP1_TEXTURE_COORD_2
:
1214 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture2
.u1
);
1215 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture2
.u2
);
1217 case GL_MAP1_TEXTURE_COORD_3
:
1218 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture3
.u1
);
1219 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture3
.u2
);
1221 case GL_MAP1_TEXTURE_COORD_4
:
1222 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Texture4
.u1
);
1223 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Texture4
.u2
);
1225 case GL_MAP1_VERTEX_3
:
1226 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Vertex3
.u1
);
1227 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Vertex3
.u2
);
1229 case GL_MAP1_VERTEX_4
:
1230 v
[0] = ROUNDF(ctx
->EvalMap
.Map1Vertex4
.u1
);
1231 v
[1] = ROUNDF(ctx
->EvalMap
.Map1Vertex4
.u2
);
1233 case GL_MAP2_COLOR_4
:
1234 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Color4
.u1
);
1235 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Color4
.u2
);
1236 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Color4
.v1
);
1237 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Color4
.v2
);
1240 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Index
.u1
);
1241 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Index
.u2
);
1242 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Index
.v1
);
1243 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Index
.v2
);
1245 case GL_MAP2_NORMAL
:
1246 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Normal
.u1
);
1247 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Normal
.u2
);
1248 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Normal
.v1
);
1249 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Normal
.v2
);
1251 case GL_MAP2_TEXTURE_COORD_1
:
1252 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.u1
);
1253 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.u2
);
1254 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.v1
);
1255 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture1
.v2
);
1257 case GL_MAP2_TEXTURE_COORD_2
:
1258 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.u1
);
1259 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.u2
);
1260 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.v1
);
1261 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture2
.v2
);
1263 case GL_MAP2_TEXTURE_COORD_3
:
1264 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.u1
);
1265 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.u2
);
1266 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.v1
);
1267 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture3
.v2
);
1269 case GL_MAP2_TEXTURE_COORD_4
:
1270 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.u1
);
1271 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.u2
);
1272 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.v1
);
1273 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Texture4
.v2
);
1275 case GL_MAP2_VERTEX_3
:
1276 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.u1
);
1277 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.u2
);
1278 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.v1
);
1279 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Vertex3
.v2
);
1281 case GL_MAP2_VERTEX_4
:
1282 v
[0] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.u1
);
1283 v
[1] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.u2
);
1284 v
[2] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.v1
);
1285 v
[3] = ROUNDF(ctx
->EvalMap
.Map2Vertex4
.v2
);
1288 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(target)" );
1292 gl_error( ctx
, GL_INVALID_ENUM
, "glGetMapiv(query)" );
1299 _mesa_MapGrid1f( GLint un
, GLfloat u1
, GLfloat u2
)
1301 GET_CURRENT_CONTEXT(ctx
);
1302 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1305 gl_error( ctx
, GL_INVALID_VALUE
, "glMapGrid1f" );
1308 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
1309 ctx
->Eval
.MapGrid1un
= un
;
1310 ctx
->Eval
.MapGrid1u1
= u1
;
1311 ctx
->Eval
.MapGrid1u2
= u2
;
1312 ctx
->Eval
.MapGrid1du
= (u2
- u1
) / (GLfloat
) un
;
1317 _mesa_MapGrid1d( GLint un
, GLdouble u1
, GLdouble u2
)
1319 _mesa_MapGrid1f( un
, u1
, u2
);
1324 _mesa_MapGrid2f( GLint un
, GLfloat u1
, GLfloat u2
,
1325 GLint vn
, GLfloat v1
, GLfloat v2
)
1327 GET_CURRENT_CONTEXT(ctx
);
1328 ASSERT_OUTSIDE_BEGIN_END(ctx
);
1331 gl_error( ctx
, GL_INVALID_VALUE
, "glMapGrid2f(un)" );
1335 gl_error( ctx
, GL_INVALID_VALUE
, "glMapGrid2f(vn)" );
1339 FLUSH_VERTICES(ctx
, _NEW_EVAL
);
1340 ctx
->Eval
.MapGrid2un
= un
;
1341 ctx
->Eval
.MapGrid2u1
= u1
;
1342 ctx
->Eval
.MapGrid2u2
= u2
;
1343 ctx
->Eval
.MapGrid2du
= (u2
- u1
) / (GLfloat
) un
;
1344 ctx
->Eval
.MapGrid2vn
= vn
;
1345 ctx
->Eval
.MapGrid2v1
= v1
;
1346 ctx
->Eval
.MapGrid2v2
= v2
;
1347 ctx
->Eval
.MapGrid2dv
= (v2
- v1
) / (GLfloat
) vn
;
1352 _mesa_MapGrid2d( GLint un
, GLdouble u1
, GLdouble u2
,
1353 GLint vn
, GLdouble v1
, GLdouble v2
)
1355 _mesa_MapGrid2f( un
, u1
, u2
, vn
, v1
, v2
);