eval.c revision 2240ba10f30315410bcff77e372ee71664ac4453
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" 47aefa1f6ab1d9267b223b06ae205ab34c8e0d7c02Chia-I Wu#include "glapi/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