eval.c revision 2cf44390d1e819f23e1d7ceb3199276c9148c647
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Mesa 3-D graphics library
427558a160a9fe91745728d7626995cd88f8fe339Brian Paul * Version:  5.1
55e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
627558a160a9fe91745728d7626995cd88f8fe339Brian Paul * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
75e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Permission is hereby granted, free of charge, to any person obtaining a
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * copy of this software and associated documentation files (the "Software"),
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * to deal in the Software without restriction, including without limitation
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * and/or sell copies of the Software, and to permit persons to whom the
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Software is furnished to do so, subject to the following conditions:
145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The above copyright notice and this permission notice shall be included
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * in all copies or substantial portions of the Software.
175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * eval.c was written by
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and
30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de).
31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * My original implementation of evaluators was simplistic and didn't
33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * compute surface normal vectors properly.  Bernd and Volker applied
34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * used more sophisticated methods to get better results.
35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Thanks guys!
37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
40fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h"
413c63452e64df7e10aa073c6c3b9492b1d7dabbb8Brian Paul#include "imports.h"
42c893a015d8a50a38cd3f727d99835e7e7e2ccea9Brian Paul#include "colormac.h"
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "context.h"
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "eval.h"
45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "macros.h"
465e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h"
472cf44390d1e819f23e1d7ceb3199276c9148c647Chia-I Wu#include "main/dispatch.h"
48aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
49aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
50aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu#if FEATURE_evaluators
51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Return the number of components per control point for any type of
55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * evaluator.  Return 0 if bad target.
56fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * See table 5.1 in the OpenGL 1.2 spec.
57afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
58fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian PaulGLuint _mesa_evaluator_components( GLenum target )
59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (target) {
61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_VERTEX_3:		return 3;
62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_VERTEX_4:		return 4;
63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_INDEX:		return 1;
64afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_COLOR_4:		return 4;
65afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_NORMAL:		return 3;
66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_1:	return 1;
67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_2:	return 2;
68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_3:	return 3;
69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_4:	return 4;
70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_VERTEX_3:		return 3;
71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_VERTEX_4:		return 4;
72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_INDEX:		return 1;
73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_COLOR_4:		return 4;
74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_NORMAL:		return 3;
75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_1:	return 1;
76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_2:	return 2;
77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_3:	return 3;
78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_4:	return 4;
79bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      default:				break;
80bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   }
81bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
82bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   /* XXX need to check for the vertex program extension
83bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!ctx->Extensions.NV_vertex_program)
84bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return 0;
85bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   */
86bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
87bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (target >= GL_MAP1_VERTEX_ATTRIB0_4_NV &&
88bc42c19f22c3b719712529d86faea818f34150a2Brian Paul       target <= GL_MAP1_VERTEX_ATTRIB15_4_NV)
89bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return 4;
90bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
91bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (target >= GL_MAP2_VERTEX_ATTRIB0_4_NV &&
92bc42c19f22c3b719712529d86faea818f34150a2Brian Paul       target <= GL_MAP2_VERTEX_ATTRIB15_4_NV)
93bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return 4;
94bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
95bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   return 0;
96bc42c19f22c3b719712529d86faea818f34150a2Brian Paul}
97bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
98bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
99bc42c19f22c3b719712529d86faea818f34150a2Brian Paul/*
100bc42c19f22c3b719712529d86faea818f34150a2Brian Paul * Return pointer to the gl_1d_map struct for the named target.
101bc42c19f22c3b719712529d86faea818f34150a2Brian Paul */
102bc42c19f22c3b719712529d86faea818f34150a2Brian Paulstatic struct gl_1d_map *
103bc42c19f22c3b719712529d86faea818f34150a2Brian Paulget_1d_map( GLcontext *ctx, GLenum target )
104bc42c19f22c3b719712529d86faea818f34150a2Brian Paul{
105bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   switch (target) {
106bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_3:
107bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Vertex3;
108bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_4:
109bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Vertex4;
110bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_INDEX:
111bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Index;
112bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_COLOR_4:
113bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Color4;
114bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_NORMAL:
115bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Normal;
116bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_TEXTURE_COORD_1:
117bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Texture1;
118bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_TEXTURE_COORD_2:
119bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Texture2;
120bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_TEXTURE_COORD_3:
121bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Texture3;
122bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_TEXTURE_COORD_4:
123bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Texture4;
124bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
125bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
126bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
127bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
128bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
129bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
130bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
131bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
132bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
133bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
134bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
135bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
136bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
137bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
138bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
139bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
140bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (!ctx->Extensions.NV_vertex_program)
141bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return NULL;
142bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map1Attrib[target - GL_MAP1_VERTEX_ATTRIB0_4_NV];
143bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      default:
144bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return NULL;
145bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   }
146bc42c19f22c3b719712529d86faea818f34150a2Brian Paul}
147bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
148bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
149bc42c19f22c3b719712529d86faea818f34150a2Brian Paul/*
150bc42c19f22c3b719712529d86faea818f34150a2Brian Paul * Return pointer to the gl_2d_map struct for the named target.
151bc42c19f22c3b719712529d86faea818f34150a2Brian Paul */
152bc42c19f22c3b719712529d86faea818f34150a2Brian Paulstatic struct gl_2d_map *
153bc42c19f22c3b719712529d86faea818f34150a2Brian Paulget_2d_map( GLcontext *ctx, GLenum target )
154bc42c19f22c3b719712529d86faea818f34150a2Brian Paul{
155bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   switch (target) {
156bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_3:
157bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Vertex3;
158bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_4:
159bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Vertex4;
160bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_INDEX:
161bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Index;
162bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_COLOR_4:
163bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Color4;
164bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_NORMAL:
165bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Normal;
166bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_TEXTURE_COORD_1:
167bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Texture1;
168bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_TEXTURE_COORD_2:
169bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Texture2;
170bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_TEXTURE_COORD_3:
171bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Texture3;
172bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_TEXTURE_COORD_4:
173bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Texture4;
174bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB0_4_NV:
175bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB1_4_NV:
176bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB2_4_NV:
177bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB3_4_NV:
178bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB4_4_NV:
179bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB5_4_NV:
180bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB6_4_NV:
181bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB7_4_NV:
182bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB8_4_NV:
183bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB9_4_NV:
184bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB10_4_NV:
185bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB11_4_NV:
186bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB12_4_NV:
187bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB13_4_NV:
188bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB14_4_NV:
189bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      case GL_MAP2_VERTEX_ATTRIB15_4_NV:
190bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (!ctx->Extensions.NV_vertex_program)
191bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return NULL;
192bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return &ctx->EvalMap.Map2Attrib[target - GL_MAP2_VERTEX_ATTRIB0_4_NV];
193bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      default:
194bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         return NULL;
195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/
200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/***            Copy and deallocate control points                  ***/
201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/
202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
2055e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Copy 1-parametric evaluator control points from user-specified
206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * memory space to a buffer of contiguous control points.
2076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param see glMap1f for details
2086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \return pointer to buffer of contiguous control points or NULL if out
209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *          of memory.
210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
21108836341788a9f9d638d9dc8328510ccd18ddeb5Brian PaulGLfloat *_mesa_copy_map_points1f( GLenum target, GLint ustride, GLint uorder,
212bc42c19f22c3b719712529d86faea818f34150a2Brian Paul                                  const GLfloat *points )
213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *buffer, *p;
215fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GLint i, k, size = _mesa_evaluator_components(target);
216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
217bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!points || !size)
218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return NULL;
219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
220bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul   buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat));
221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
222bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (buffer)
223bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      for (i = 0, p = buffer; i < uorder; i++, points += ustride)
224bc42c19f22c3b719712529d86faea818f34150a2Brian Paul	for (k = 0; k < size; k++)
225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	  *p++ = points[k];
226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return buffer;
228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Same as above but convert doubles to floats.
234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
23508836341788a9f9d638d9dc8328510ccd18ddeb5Brian PaulGLfloat *_mesa_copy_map_points1d( GLenum target, GLint ustride, GLint uorder,
236bc42c19f22c3b719712529d86faea818f34150a2Brian Paul                                  const GLdouble *points )
237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *buffer, *p;
239fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GLint i, k, size = _mesa_evaluator_components(target);
240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
241bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!points || !size)
242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return NULL;
243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
244bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul   buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat));
245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
246bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (buffer)
247bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      for (i = 0, p = buffer; i < uorder; i++, points += ustride)
248bc42c19f22c3b719712529d86faea818f34150a2Brian Paul	for (k = 0; k < size; k++)
249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	  *p++ = (GLfloat) points[k];
250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return buffer;
252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
2575e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Copy 2-parametric evaluator control points from user-specified
258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * memory space to a buffer of contiguous control points.
259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Additional memory is allocated to be used by the horner and
260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * de Casteljau evaluation schemes.
261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
2626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param see glMap2f for details
2636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \return pointer to buffer of contiguous control points or NULL if out
264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *          of memory.
265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
26608836341788a9f9d638d9dc8328510ccd18ddeb5Brian PaulGLfloat *_mesa_copy_map_points2f( GLenum target,
267e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                  GLint ustride, GLint uorder,
268e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                  GLint vstride, GLint vorder,
269e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                  const GLfloat *points )
270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *buffer, *p;
272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint i, j, k, size, dsize, hsize;
273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint uinc;
274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
275fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   size = _mesa_evaluator_components(target);
276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (!points || size==0) {
278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return NULL;
279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* max(uorder, vorder) additional points are used in      */
282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* horner evaluation and uorder*vorder additional */
283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* values are needed for de Casteljau                     */
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder;
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   hsize = (uorder > vorder ? uorder : vorder)*size;
286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if(hsize>dsize)
288bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul     buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat));
289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   else
290bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul     buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat));
291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* compute the increment value for the u-loop */
293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   uinc = ustride - vorder*vstride;
294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
2955e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   if (buffer)
296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      for (i=0, p=buffer; i<uorder; i++, points += uinc)
297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 for (j=0; j<vorder; j++, points += vstride)
298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    for (k=0; k<size; k++)
299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	       *p++ = points[k];
300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return buffer;
302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Same as above but convert doubles to floats.
308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
30908836341788a9f9d638d9dc8328510ccd18ddeb5Brian PaulGLfloat *_mesa_copy_map_points2d(GLenum target,
310e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                 GLint ustride, GLint uorder,
311e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                 GLint vstride, GLint vorder,
312e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul                                 const GLdouble *points )
313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *buffer, *p;
315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint i, j, k, size, hsize, dsize;
316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint uinc;
317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
318fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   size = _mesa_evaluator_components(target);
319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (!points || size==0) {
321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return NULL;
322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* max(uorder, vorder) additional points are used in      */
325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* horner evaluation and uorder*vorder additional */
326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* values are needed for de Casteljau                     */
327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder;
328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   hsize = (uorder > vorder ? uorder : vorder)*size;
329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if(hsize>dsize)
331bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul     buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat));
332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   else
333bd5cdaf4442872d3cd2ff94eeafadd481d27fcfbBrian Paul     buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat));
334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   /* compute the increment value for the u-loop */
336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   uinc = ustride - vorder*vstride;
337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
3385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   if (buffer)
339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      for (i=0, p=buffer; i<uorder; i++, points += uinc)
340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 for (j=0; j<vorder; j++, points += vstride)
341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    for (k=0; k<size; k++)
342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	       *p++ = (GLfloat) points[k];
343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return buffer;
345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/
351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/***                      API entry points                          ***/
352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/
353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
356fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * This does the work of glMap1[fd].
357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
358fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulstatic void
359fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulmap1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride,
360fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul     GLint uorder, const GLvoid *points, GLenum type )
361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
362fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint k;
364fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GLfloat *pnts;
365e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul   struct gl_1d_map *map = NULL;
366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
367bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
368e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul   ASSERT(type == GL_FLOAT || type == GL_DOUBLE);
369fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
370fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   if (u1 == u2) {
37108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(u1,u2)" );
372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
374fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   if (uorder < 1 || uorder > MAX_EVAL_ORDER) {
37508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(order)" );
376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
378fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   if (!points) {
37908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(points)" );
380fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      return;
381fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   }
382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
383fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   k = _mesa_evaluator_components( target );
384fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   if (k == 0) {
38508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" );
386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
388fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   if (ustride < k) {
38908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(stride)" );
390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
393441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul   if (ctx->Texture.CurrentUnit != 0) {
394441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      /* See OpenGL 1.2.1 spec, section F.2.13 */
395441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" );
396441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      return;
397441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul   }
398441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul
399bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map = get_1d_map(ctx, target);
400bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!map) {
401bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" );
402bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return;
403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
404a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell
405cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   /* make copy of the control points */
406cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (type == GL_FLOAT)
40708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      pnts = _mesa_copy_map_points1f(target, ustride, uorder, (GLfloat*) points);
408cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   else
40908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      pnts = _mesa_copy_map_points1d(target, ustride, uorder, (GLdouble*) points);
410cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
411cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
412cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_EVAL);
413cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->Order = uorder;
414cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->u1 = u1;
415cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->u2 = u2;
41694a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   map->du = 1.0F / (u2 - u1);
417cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (map->Points)
418cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      FREE( map->Points );
419cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->Points = pnts;
420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
424aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
425fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
426fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLint order, const GLfloat *points )
427fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
428fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   map1(target, u1, u2, stride, order, points, GL_FLOAT);
429fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
431fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
432aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
433fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
434fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLint order, const GLdouble *points )
435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
43694a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   map1(target, (GLfloat) u1, (GLfloat) u2, stride, order, points, GL_DOUBLE);
437fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
438fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
439fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
440fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulstatic void
441fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulmap2( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
442fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
443fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      const GLvoid *points, GLenum type )
444fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
445fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint k;
447fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GLfloat *pnts;
448e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul   struct gl_2d_map *map = NULL;
449e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul
450cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
451e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul   ASSERT(type == GL_FLOAT || type == GL_DOUBLE);
452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (u1==u2) {
45408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(u1,u2)" );
455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (v1==v2) {
45908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(v1,v2)" );
460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (uorder<1 || uorder>MAX_EVAL_ORDER) {
46408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(uorder)" );
465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (vorder<1 || vorder>MAX_EVAL_ORDER) {
46908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vorder)" );
470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
473fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   k = _mesa_evaluator_components( target );
474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (k==0) {
47508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" );
476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (ustride < k) {
47908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(ustride)" );
480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (vstride < k) {
48308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vstride)" );
484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
487441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul   if (ctx->Texture.CurrentUnit != 0) {
488441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      /* See OpenGL 1.2.1 spec, section F.2.13 */
489441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" );
490441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul      return;
491441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul   }
492441a4af435b46e1b475318fbaf4e80b774390cb0Brian Paul
493bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map = get_2d_map(ctx, target);
494bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!map) {
495bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" );
496bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return;
497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
498a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell
499cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   /* make copy of the control points */
500cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (type == GL_FLOAT)
50108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      pnts = _mesa_copy_map_points2f(target, ustride, uorder,
502cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell                                  vstride, vorder, (GLfloat*) points);
503cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   else
50408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      pnts = _mesa_copy_map_points2d(target, ustride, uorder,
505cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell                                  vstride, vorder, (GLdouble*) points);
50622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
50722144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
508cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_EVAL);
509cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->Uorder = uorder;
510cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->u1 = u1;
511cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->u2 = u2;
51294a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   map->du = 1.0F / (u2 - u1);
513cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->Vorder = vorder;
514cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->v1 = v1;
515cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->v2 = v2;
51694a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   map->dv = 1.0F / (v2 - v1);
517cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (map->Points)
518cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      FREE( map->Points );
519cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   map->Points = pnts;
520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
523aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
524fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Map2f( GLenum target,
525fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
526fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
527fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             const GLfloat *points)
528fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
529fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
530fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul        points, GL_FLOAT);
531fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
532afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
533afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
534aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
535fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Map2d( GLenum target,
536fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
537fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
538fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul             const GLdouble *points )
539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
54094a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   map2(target, (GLfloat) u1, (GLfloat) u2, ustride, uorder,
54194a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz	(GLfloat) v1, (GLfloat) v2, vstride, vorder, points, GL_DOUBLE);
542fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
543fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
544fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
5455e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
546aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
547fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v )
548fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
549fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
550bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_1d_map *map1d;
551bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_2d_map *map2d;
552afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint i, n;
553afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *data;
554bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   GLuint comps;
555bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
556cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
558bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   comps = _mesa_evaluator_components(target);
559bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!comps) {
560bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" );
561bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return;
562bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   }
563bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
564bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map1d = get_1d_map(ctx, target);
565bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map2d = get_2d_map(ctx, target);
566bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   ASSERT(map1d || map2d);
567bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
568afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (query) {
569afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COEFF:
570bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
571bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map1d->Points;
572bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map1d->Order * comps;
573bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
574bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
575bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map2d->Points;
576bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map2d->Uorder * map2d->Vorder * comps;
577bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 if (data) {
579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    for (i=0;i<n;i++) {
580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	       v[i] = data[i];
581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    }
582afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 }
583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_ORDER:
585bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
586bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLdouble) map1d->Order;
587bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
588bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
589bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLdouble) map2d->Uorder;
590bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = (GLdouble) map2d->Vorder;
591bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
592afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_DOMAIN:
594bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
595bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLdouble) map1d->u1;
596bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = (GLdouble) map1d->u2;
597bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
598bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
599bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLdouble) map2d->u1;
600bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = (GLdouble) map2d->u2;
601bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[2] = (GLdouble) map2d->v1;
602bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[3] = (GLdouble) map2d->v2;
603bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      default:
60608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(query)" );
607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
611aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
612fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v )
613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
614fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
615bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_1d_map *map1d;
616bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_2d_map *map2d;
617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLint i, n;
618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *data;
619bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   GLuint comps;
620bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
621cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
623bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   comps = _mesa_evaluator_components(target);
624bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!comps) {
625e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" );
626bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return;
627bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   }
628bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
629bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map1d = get_1d_map(ctx, target);
630bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map2d = get_2d_map(ctx, target);
631bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   ASSERT(map1d || map2d);
632bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (query) {
634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COEFF:
635bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
636bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map1d->Points;
637bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map1d->Order * comps;
638bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
639bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
640bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map2d->Points;
641bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map2d->Uorder * map2d->Vorder * comps;
642bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 if (data) {
644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    for (i=0;i<n;i++) {
645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	       v[i] = data[i];
646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    }
647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 }
648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_ORDER:
650bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
651bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLfloat) map1d->Order;
652bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
653bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
654bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = (GLfloat) map2d->Uorder;
655bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = (GLfloat) map2d->Vorder;
656bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_DOMAIN:
659bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
660bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = map1d->u1;
661bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = map1d->u2;
662bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
663bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
664bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = map2d->u1;
665bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = map2d->u2;
666bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[2] = map2d->v1;
667bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[3] = map2d->v2;
668bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      default:
67108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(query)" );
672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
676aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
677fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_GetMapiv( GLenum target, GLenum query, GLint *v )
678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
679fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
680bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_1d_map *map1d;
681bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   struct gl_2d_map *map2d;
682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLuint i, n;
683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   GLfloat *data;
684bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   GLuint comps;
685bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
686cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
688bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   comps = _mesa_evaluator_components(target);
689bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   if (!comps) {
690e2053d16901732f4947c702cdc5ef72993d8d130Brian Paul      _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" );
691bc42c19f22c3b719712529d86faea818f34150a2Brian Paul      return;
692bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   }
693bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
694bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map1d = get_1d_map(ctx, target);
695bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   map2d = get_2d_map(ctx, target);
696bc42c19f22c3b719712529d86faea818f34150a2Brian Paul   ASSERT(map1d || map2d);
697bc42c19f22c3b719712529d86faea818f34150a2Brian Paul
698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (query) {
699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COEFF:
700bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
701bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map1d->Points;
702bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map1d->Order * comps;
703bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
704bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
705bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            data = map2d->Points;
706bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            n = map2d->Uorder * map2d->Vorder * comps;
707bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 if (data) {
709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    for (i=0;i<n;i++) {
71027558a160a9fe91745728d7626995cd88f8fe339Brian Paul	       v[i] = IROUND(data[i]);
711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	    }
712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 }
713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_ORDER:
715bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
716bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = map1d->Order;
717bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
718bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
719bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[0] = map2d->Uorder;
720bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            v[1] = map2d->Vorder;
721bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_DOMAIN:
724bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         if (map1d) {
72527558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[0] = IROUND(map1d->u1);
72627558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[1] = IROUND(map1d->u2);
727bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
728bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         else {
72927558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[0] = IROUND(map2d->u1);
73027558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[1] = IROUND(map2d->u2);
73127558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[2] = IROUND(map2d->v1);
73227558a160a9fe91745728d7626995cd88f8fe339Brian Paul            v[3] = IROUND(map2d->v2);
733bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         break;
735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      default:
73608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(query)" );
737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
742aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
743fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
745fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
746cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
748afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (un<1) {
74908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid1f" );
750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
752cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_EVAL);
753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid1un = un;
754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid1u1 = u1;
755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid1u2 = u2;
756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid1du = (u2 - u1) / (GLfloat) un;
757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
760aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
761fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
762fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
76394a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   _mesa_MapGrid1f( un, (GLfloat) u1, (GLfloat) u2 );
764fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
765fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
766fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
767aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
768fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
769fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul                 GLint vn, GLfloat v1, GLfloat v2 )
770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
771fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
772cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
773cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
774afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (un<1) {
77508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(un)" );
776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
778afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (vn<1) {
77908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(vn)" );
780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return;
781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
782cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
783cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_EVAL);
784afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2un = un;
785afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2u1 = u1;
786afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2u2 = u2;
787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2du = (u2 - u1) / (GLfloat) un;
788afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2vn = vn;
789afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2v1 = v1;
790afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2v2 = v2;
791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   ctx->Eval.MapGrid2dv = (v2 - v1) / (GLfloat) vn;
792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
795aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wustatic void GLAPIENTRY
796fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
797fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul                 GLint vn, GLdouble v1, GLdouble v2 )
798fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
79994a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz   _mesa_MapGrid2f( un, (GLfloat) u1, (GLfloat) u2,
80094a6ec8f0c8a25aeeb5880e2285ae6042cfb99dbKarl Schultz		    vn, (GLfloat) v1, (GLfloat) v2 );
801fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
8026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
804aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wuvoid
805aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu_mesa_install_eval_vtxfmt(struct _glapi_table *disp,
806aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu                          const GLvertexformat *vfmt)
807aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu{
808aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalCoord1f(disp, vfmt->EvalCoord1f);
809aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalCoord1fv(disp, vfmt->EvalCoord1fv);
810aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalCoord2f(disp, vfmt->EvalCoord2f);
811aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalCoord2fv(disp, vfmt->EvalCoord2fv);
812aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalPoint1(disp, vfmt->EvalPoint1);
813aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalPoint2(disp, vfmt->EvalPoint2);
814aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
815aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalMesh1(disp, vfmt->EvalMesh1);
816aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_EvalMesh2(disp, vfmt->EvalMesh2);
817aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu}
818aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
819aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
820aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wuvoid
821aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu_mesa_init_eval_dispatch(struct _glapi_table *disp)
822aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu{
823aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_GetMapdv(disp, _mesa_GetMapdv);
824aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_GetMapfv(disp, _mesa_GetMapfv);
825aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_GetMapiv(disp, _mesa_GetMapiv);
826aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_Map1d(disp, _mesa_Map1d);
827aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_Map1f(disp, _mesa_Map1f);
828aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_Map2d(disp, _mesa_Map2d);
829aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_Map2f(disp, _mesa_Map2f);
830aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_MapGrid1d(disp, _mesa_MapGrid1d);
831aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_MapGrid1f(disp, _mesa_MapGrid1f);
832aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_MapGrid2d(disp, _mesa_MapGrid2d);
833aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu   SET_MapGrid2f(disp, _mesa_MapGrid2f);
834aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu}
835aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
836aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
837aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu#endif /* FEATURE_evaluators */
838aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu
8396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
8416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*****                      Initialization                        *****/
8426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
8436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
8456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Initialize a 1-D evaluator map.
8466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
8476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellstatic void
8486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellinit_1d_map( struct gl_1d_map *map, int n, const float *initial )
8496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{
8506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->Order = 1;
8516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->u1 = 0.0;
8526dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->u2 = 1.0;
8536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat));
8546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (map->Points) {
8556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      GLint i;
8566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      for (i=0;i<n;i++)
8576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell         map->Points[i] = initial[i];
8586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   }
8596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell}
8606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
8636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Initialize a 2-D evaluator map
8646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
8656dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellstatic void
8666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellinit_2d_map( struct gl_2d_map *map, int n, const float *initial )
8676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{
8686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->Uorder = 1;
8696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->Vorder = 1;
8706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->u1 = 0.0;
8716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->u2 = 1.0;
8726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->v1 = 0.0;
8736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->v2 = 1.0;
8746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat));
8756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (map->Points) {
8766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      GLint i;
8776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      for (i=0;i<n;i++)
8786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell         map->Points[i] = initial[i];
8796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   }
8806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell}
8816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellvoid _mesa_init_eval( GLcontext *ctx )
8846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{
8856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   int i;
8866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
8876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   /* Evaluators group */
8886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1Color4 = GL_FALSE;
8896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1Index = GL_FALSE;
8906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1Normal = GL_FALSE;
8916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1TextureCoord1 = GL_FALSE;
8926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1TextureCoord2 = GL_FALSE;
8936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1TextureCoord3 = GL_FALSE;
8946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1TextureCoord4 = GL_FALSE;
8956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1Vertex3 = GL_FALSE;
8966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map1Vertex4 = GL_FALSE;
8972240ba10f30315410bcff77e372ee71664ac4453Brian Paul   memset(ctx->Eval.Map1Attrib, 0, sizeof(ctx->Eval.Map1Attrib));
8986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2Color4 = GL_FALSE;
8996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2Index = GL_FALSE;
9006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2Normal = GL_FALSE;
9016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2TextureCoord1 = GL_FALSE;
9026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2TextureCoord2 = GL_FALSE;
9036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2TextureCoord3 = GL_FALSE;
9046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2TextureCoord4 = GL_FALSE;
9056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2Vertex3 = GL_FALSE;
9066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.Map2Vertex4 = GL_FALSE;
9072240ba10f30315410bcff77e372ee71664ac4453Brian Paul   memset(ctx->Eval.Map2Attrib, 0, sizeof(ctx->Eval.Map2Attrib));
9086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.AutoNormal = GL_FALSE;
9096dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid1un = 1;
9106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid1u1 = 0.0;
9116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid1u2 = 1.0;
9126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2un = 1;
9136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2vn = 1;
9146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2u1 = 0.0;
9156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2u2 = 1.0;
9166dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2v1 = 0.0;
9176dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Eval.MapGrid2v2 = 1.0;
9186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9196dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   /* Evaluator data */
9206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   {
9216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat vertex[4] = { 0.0, 0.0, 0.0, 1.0 };
9226dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat normal[3] = { 0.0, 0.0, 1.0 };
9236dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat index[1] = { 1.0 };
9246dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat color[4] = { 1.0, 1.0, 1.0, 1.0 };
9256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat texcoord[4] = { 0.0, 0.0, 0.0, 1.0 };
9266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      static GLfloat attrib[4] = { 0.0, 0.0, 0.0, 1.0 };
9276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Vertex3, 3, vertex );
9296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Vertex4, 4, vertex );
9306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Index, 1, index );
9316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Color4, 4, color );
9326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Normal, 3, normal );
9336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Texture1, 1, texcoord );
9346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Texture2, 2, texcoord );
9356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Texture3, 3, texcoord );
9366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_1d_map( &ctx->EvalMap.Map1Texture4, 4, texcoord );
9376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      for (i = 0; i < 16; i++)
9386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell         init_1d_map( ctx->EvalMap.Map1Attrib + i, 4, attrib );
9396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Vertex3, 3, vertex );
9416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Vertex4, 4, vertex );
9426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Index, 1, index );
9436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Color4, 4, color );
9446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Normal, 3, normal );
9456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Texture1, 1, texcoord );
9466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Texture2, 2, texcoord );
9476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Texture3, 3, texcoord );
9486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      init_2d_map( &ctx->EvalMap.Map2Texture4, 4, texcoord );
9496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      for (i = 0; i < 16; i++)
9506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell         init_2d_map( ctx->EvalMap.Map2Attrib + i, 4, attrib );
9516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   }
9526dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell}
9536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellvoid _mesa_free_eval_data( GLcontext *ctx )
9566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{
9576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   int i;
9586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   /* Free evaluator data */
9606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Vertex3.Points)
9616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Vertex3.Points );
9626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Vertex4.Points)
9636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Vertex4.Points );
9646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Index.Points)
9656dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Index.Points );
9666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Color4.Points)
9676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Color4.Points );
9686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Normal.Points)
9696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Normal.Points );
9706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Texture1.Points)
9716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Texture1.Points );
9726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Texture2.Points)
9736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Texture2.Points );
9746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Texture3.Points)
9756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Texture3.Points );
9766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map1Texture4.Points)
9776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map1Texture4.Points );
9786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   for (i = 0; i < 16; i++)
9796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE((ctx->EvalMap.Map1Attrib[i].Points));
9806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Vertex3.Points)
9826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Vertex3.Points );
9836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Vertex4.Points)
9846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Vertex4.Points );
9856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Index.Points)
9866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Index.Points );
9876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Color4.Points)
9886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Color4.Points );
9896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Normal.Points)
9906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Normal.Points );
9916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Texture1.Points)
9926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Texture1.Points );
9936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Texture2.Points)
9946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Texture2.Points );
9956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Texture3.Points)
9966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Texture3.Points );
9976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   if (ctx->EvalMap.Map2Texture4.Points)
9986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE( ctx->EvalMap.Map2Texture4.Points );
9996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   for (i = 0; i < 16; i++)
10006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      FREE((ctx->EvalMap.Map2Attrib[i].Points));
10016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell}
1002