eval.c revision afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1c
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* $Id: eval.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Mesa 3-D graphics library 5afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Version: 3.1 6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Copyright (C) 1999 Brian Paul All Rights Reserved. 8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Permission is hereby granted, free of charge, to any person obtaining a 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * copy of this software and associated documentation files (the "Software"), 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * to deal in the Software without restriction, including without limitation 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * and/or sell copies of the Software, and to permit persons to whom the 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Software is furnished to do so, subject to the following conditions: 15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The above copyright notice and this permission notice shall be included 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * in all copies or substantial portions of the Software. 18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * eval.c was written by 33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de). 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * My original implementation of evaluators was simplistic and didn't 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * compute surface normal vectors properly. Bernd and Volker applied 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * used more sophisticated methods to get better results. 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Thanks guys! 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#ifdef PC_HEADER 45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "all.h" 46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#else 47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include <math.h> 48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include <stdlib.h> 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include <string.h> 50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "context.h" 51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "eval.h" 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "macros.h" 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "mmath.h" 54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "types.h" 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "vbcull.h" 56afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "vbfill.h" 57afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "vbxform.h" 58afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#ifdef XFree86Server 59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "GL/xf86glx.h" 60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#endif 61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#endif 62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 64afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic GLfloat inv_tab[MAX_EVAL_ORDER]; 65afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Do one-time initialization for evaluators. 68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_init_eval( void ) 70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach static int init_flag = 0; 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Compute a table of nCr (combination) values used by the 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Bernstein polynomial generator. 76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* KW: precompute 1/x for useful x. 79afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 80afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (init_flag==0) 81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = 1 ; i < MAX_EVAL_ORDER ; i++) 83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach inv_tab[i] = 1.0 / i; 84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 85afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 86afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach init_flag = 1; 87afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 88afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 91afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Horner scheme for Bezier curves 93afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 94afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Bezier curves can be computed via a Horner scheme. 95afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Horner is numerically less stable than the de Casteljau 96afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * algorithm, but it is faster. For curves of degree n 97afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the complexity of Horner is O(n) and de Casteljau is O(n^2). 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Since stability is not important for displaying curve 99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * points I decided to use the Horner scheme. 100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * A cubic Bezier curve with control points b0, b1, b2, b3 can be 102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * written as 103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * (([3] [3] ) [3] ) [3] 105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * c(t) = (([0]*s*b0 + [1]*t*b1)*s + [2]*t^2*b2)*s + [3]*t^2*b3 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * [n] 108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * where s=1-t and the binomial coefficients [i]. These can 109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * be computed iteratively using the identity: 110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * [n] [n ] [n] 112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * [i] = (n-i+1)/i * [i-1] and [0] = 1 113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic void 117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachhorner_bezier_curve(const GLfloat *cp, GLfloat *out, GLfloat t, 118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dim, GLuint order) 119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat s, powert; 121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i, k, bincoeff; 122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(order >= 2) 124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff = order-1; 126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach s = 1.0-t; 127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = s*cp[k] + bincoeff*t*cp[dim+k]; 130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=2, cp+=2*dim, powert=t*t; i<order; i++, powert*=t, cp +=dim) 132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff *= order-i; 134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff *= inv_tab[i]; 135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = s*out[k] + bincoeff*powert*cp[k]; 138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* order=1 -> constant curve */ 141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = cp[k]; 144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Tensor product Bezier surfaces 149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Again the Horner scheme is used to compute a point on a 151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * TP Bezier surface. First a control polygon for a curve 152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * on the surface in one parameter direction is computed, 153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * then the point on the curve for the other parameter 154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * direction is evaluated. 155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * To store the curve control polygon additional storage 157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * for max(uorder,vorder) points is needed in the 158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * control net cn. 159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic void 162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachhorner_bezier_surf(GLfloat *cn, GLfloat *out, GLfloat u, GLfloat v, 163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dim, GLuint uorder, GLuint vorder) 164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *cp = cn + uorder*vorder*dim; 166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i, uinc = vorder*dim; 167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(vorder > uorder) 169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(uorder >= 2) 171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat s, poweru; 173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint j, k, bincoeff; 174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Compute the control polygon for the surface-curve in u-direction */ 176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder; j++) 177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *ucp = &cn[j*dim]; 179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Each control point is the point for parameter u on a */ 181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* curve defined by the control polygons in u-direction */ 182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff = uorder-1; 183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach s = 1.0-u; 184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach cp[j*dim+k] = s*ucp[k] + bincoeff*u*ucp[uinc+k]; 187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=2, ucp+=2*uinc, poweru=u*u; i<uorder; 189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach i++, poweru*=u, ucp +=uinc) 190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff *= uorder-i; 192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach bincoeff *= inv_tab[i]; 193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach cp[j*dim+k] = s*cp[j*dim+k] + bincoeff*poweru*ucp[k]; 196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Evaluate curve point in v */ 200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(cp, out, v, dim, vorder); 201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* uorder=1 -> cn defines a curve in v */ 203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(cn, out, v, dim, vorder); 204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* vorder <= uorder */ 206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(vorder > 1) 208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Compute the control polygon for the surface-curve in u-direction */ 212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder; i++, cn += uinc) 213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* For constant i all cn[i][j] (j=0..vorder) are located */ 215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* on consecutive memory locations, so we can use */ 216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* horner_bezier_curve to compute the control points */ 217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(cn, &cp[i*dim], v, dim, vorder); 219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Evaluate curve point in u */ 222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(cp, out, u, dim, uorder); 223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* vorder=1 -> cn defines a curve in u */ 225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(cn, out, u, dim, uorder); 226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The direct de Casteljau algorithm is used when a point on the 231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * surface and the tangent directions spanning the tangent plane 232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * should be computed (this is needed to compute normals to the 233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * surface). In this case the de Casteljau algorithm approach is 234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * nicer because a point and the partial derivatives can be computed 235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * at the same time. To get the correct tangent length du and dv 236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * must be multiplied with the (u2-u1)/uorder-1 and (v2-v1)/vorder-1. 237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Since only the directions are needed, this scaling step is omitted. 238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * De Casteljau needs additional storage for uorder*vorder 240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * values in the control net cn. 241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic void 244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachde_casteljau_surf(GLfloat *cn, GLfloat *out, GLfloat *du, GLfloat *dv, 245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u, GLfloat v, GLuint dim, 246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint uorder, GLuint vorder) 247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *dcn = cn + uorder*vorder*dim; 249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat us = 1.0-u, vs = 1.0-v; 250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint h, i, j, k; 251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint minorder = uorder < vorder ? uorder : vorder; 252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint uinc = vorder*dim; 253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dcuinc = vorder; 254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Each component is evaluated separately to save buffer space */ 256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* This does not drasticaly decrease the performance of the */ 257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* algorithm. If additional storage for (uorder-1)*(vorder-1) */ 258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* points would be available, the components could be accessed */ 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* in the innermost loop which could lead to less cache misses. */ 260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#define CN(I,J,K) cn[(I)*uinc+(J)*dim+(K)] 262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#define DCN(I, J) dcn[(I)*dcuinc+(J)] 263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(minorder < 3) 264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(uorder==vorder) 266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Derivative direction in u */ 270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = vs*(CN(1,0,k) - CN(0,0,k)) + 271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v*(CN(1,1,k) - CN(0,1,k)); 272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Derivative direction in v */ 274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = us*(CN(0,1,k) - CN(0,0,k)) + 275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u*(CN(1,1,k) - CN(1,0,k)); 276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* bilinear de Casteljau step */ 278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = us*(vs*CN(0,0,k) + v*CN(0,1,k)) + 279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u*(vs*CN(1,0,k) + v*CN(1,1,k)); 280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if(minorder == uorder) 283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* bilinear de Casteljau step */ 287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(1,0) = CN(1,0,k) - CN(0,0,k); 288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,0) = us*CN(0,0,k) + u*CN(1,0,k); 289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-1; j++) 291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in u */ 293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(1,j+1) = CN(1,j+1,k) - CN(0,j+1,k); 294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(1,j) = vs*DCN(1,j) + v*DCN(1,j+1); 295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j+1) = us*CN(0,j+1,k) + u*CN(1,j+1,k); 298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining linear de Casteljau steps until the second last step */ 302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=minorder; h<vorder-1; h++) 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-h; j++) 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in u */ 306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(1,j) = vs*DCN(1,j) + v*DCN(1,j+1); 307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in v */ 313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = DCN(0,1) - DCN(0,0); 314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in u */ 316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = vs*DCN(1,0) + v*DCN(1,1); 317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last linear de Casteljau step */ 319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = vs*DCN(0,0) + v*DCN(0,1); 320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* minorder == vorder */ 323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* bilinear de Casteljau step */ 327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,1) = CN(0,1,k) - CN(0,0,k); 328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,0) = vs*CN(0,0,k) + v*CN(0,1,k); 329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-1; i++) 330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in v */ 332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i+1,1) = CN(i+1,1,k) - CN(i+1,0,k); 333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,1) = us*DCN(i,1) + u*DCN(i+1,1); 334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i+1,0) = vs*CN(i+1,0,k) + v*CN(i+1,1,k); 337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining linear de Casteljau steps until the second last step */ 341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=minorder; h<uorder-1; h++) 342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-h; i++) 343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in v */ 345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,1) = us*DCN(i,1) + u*DCN(i+1,1); 346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in u */ 352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = DCN(1,0) - DCN(0,0); 353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in v */ 355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = us*DCN(0,1) + u*DCN(1,1); 356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last linear de Casteljau step */ 358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = us*DCN(0,0) + u*DCN(1,0); 359afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if(uorder == vorder) 363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* first bilinear de Casteljau step */ 367afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-1; i++) 368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-1; j++) 371afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining bilinear de Casteljau steps until the second last step */ 378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=2; h<minorder-1; h++) 379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-h; i++) 380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-h; j++) 383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in u */ 390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = vs*(DCN(1,0) - DCN(0,0)) + 391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v*(DCN(1,1) - DCN(0,1)); 392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in v */ 394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = us*(DCN(0,1) - DCN(0,0)) + 395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u*(DCN(1,1) - DCN(1,0)); 396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last bilinear de Casteljau step */ 398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = us*(vs*DCN(0,0) + v*DCN(0,1)) + 399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u*(vs*DCN(1,0) + v*DCN(1,1)); 400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if(minorder == uorder) 403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* first bilinear de Casteljau step */ 407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-1; i++) 408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-1; j++) 411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining bilinear de Casteljau steps until the second last step */ 418afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=2; h<minorder-1; h++) 419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-h; i++) 420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-h; j++) 423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last bilinear de Casteljau step */ 430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(2,0) = DCN(1,0) - DCN(0,0); 431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,0) = us*DCN(0,0) + u*DCN(1,0); 432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-1; j++) 433afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in u */ 435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(2,j+1) = DCN(1,j+1) - DCN(0,j+1); 436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(2,j) = vs*DCN(2,j) + v*DCN(2,j+1); 437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j+1) = us*DCN(0,j+1 ) + u*DCN(1,j+1); 440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining linear de Casteljau steps until the second last step */ 444afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=minorder; h<vorder-1; h++) 445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-h; j++) 446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in u */ 448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(2,j) = vs*DCN(2,j) + v*DCN(2,j+1); 449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 450afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,j) = vs*DCN(0,j) + v*DCN(0,j+1); 452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in v */ 455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = DCN(0,1) - DCN(0,0); 456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in u */ 458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = vs*DCN(2,0) + v*DCN(2,1); 459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last linear de Casteljau step */ 461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = vs*DCN(0,0) + v*DCN(0,1); 462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else /* minorder == vorder */ 465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<dim; k++) 467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* first bilinear de Casteljau step */ 469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-1; i++) 470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*CN(i,0,k) + u*CN(i+1,0,k); 472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-1; j++) 473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*CN(i,j+1,k) + u*CN(i+1,j+1,k); 475afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining bilinear de Casteljau steps until the second last step */ 480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=2; h<minorder-1; h++) 481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-h; i++) 482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(j=0; j<vorder-h; j++) 485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j+1) = us*DCN(i,j+1) + u*DCN(i+1,j+1); 487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,j) = vs*DCN(i,j) + v*DCN(i,j+1); 488afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last bilinear de Casteljau step */ 492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,2) = DCN(0,1) - DCN(0,0); 493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(0,0) = vs*DCN(0,0) + v*DCN(0,1); 494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-1; i++) 495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 496afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in v */ 497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i+1,2) = DCN(i+1,1) - DCN(i+1,0); 498afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,2) = us*DCN(i,2) + u*DCN(i+1,2); 499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 500afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i+1,0) = vs*DCN(i+1,0) + v*DCN(i+1,1); 502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 504afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* remaining linear de Casteljau steps until the second last step */ 506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(h=minorder; h<uorder-1; h++) 507afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0; i<uorder-h; i++) 508afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 509afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the derivative in v */ 510afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,2) = us*DCN(i,2) + u*DCN(i+1,2); 511afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* for the `point' */ 513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach DCN(i,0) = us*DCN(i,0) + u*DCN(i+1,0); 514afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 515afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in u */ 517afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du[k] = DCN(1,0) - DCN(0,0); 518afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 519afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* derivative direction in v */ 520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv[k] = us*DCN(0,2) + u*DCN(1,2); 521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* last linear de Casteljau step */ 523afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach out[k] = us*DCN(0,0) + u*DCN(1,0); 524afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 525afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 526afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#undef DCN 527afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#undef CN 528afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 529afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 530afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 531afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Return the number of components per control point for any type of 532afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * evaluator. Return 0 if bad target. 533afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 534afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 535afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic GLint components( GLenum target ) 536afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 537afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 538afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: return 3; 539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: return 4; 540afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: return 1; 541afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: return 4; 542afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: return 3; 543afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: return 1; 544afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: return 2; 545afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: return 3; 546afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: return 4; 547afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: return 3; 548afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: return 4; 549afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: return 1; 550afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: return 4; 551afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: return 3; 552afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: return 1; 553afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: return 2; 554afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: return 3; 555afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: return 4; 556afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: return 0; 557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 558afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 559afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 560afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 561afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/ 562afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*** Copy and deallocate control points ***/ 563afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/ 564afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 565afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 566afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 567afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Copy 1-parametric evaluator control points from user-specified 568afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * memory space to a buffer of contiguous control points. 569afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Input: see glMap1f for details 570afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Return: pointer to buffer of contiguous control points or NULL if out 571afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * of memory. 572afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 573afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLfloat *gl_copy_map_points1f( GLenum target, 574afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint ustride, GLint uorder, 575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat *points ) 576afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 577afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *buffer, *p; 578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, k, size = components(target); 579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!points || size==0) { 581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return NULL; 582afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc(uorder * size * sizeof(GLfloat)); 585afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 586afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(buffer) 587afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0, p=buffer; i<uorder; i++, points+=ustride) 588afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<size; k++) 589afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *p++ = points[k]; 590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 591afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return buffer; 592afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Same as above but convert doubles to floats. 598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLfloat *gl_copy_map_points1d( GLenum target, 600afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint ustride, GLint uorder, 601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLdouble *points ) 602afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *buffer, *p; 604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, k, size = components(target); 605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!points || size==0) { 607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return NULL; 608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc(uorder * size * sizeof(GLfloat)); 611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(buffer) 613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(i=0, p=buffer; i<uorder; i++, points+=ustride) 614afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for(k=0; k<size; k++) 615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *p++ = (GLfloat) points[k]; 616afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return buffer; 618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Copy 2-parametric evaluator control points from user-specified 624afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * memory space to a buffer of contiguous control points. 625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Additional memory is allocated to be used by the horner and 626afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * de Casteljau evaluation schemes. 627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Input: see glMap2f for details 629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Return: pointer to buffer of contiguous control points or NULL if out 630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * of memory. 631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLfloat *gl_copy_map_points2f( GLenum target, 633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint ustride, GLint uorder, 634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint vstride, GLint vorder, 635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat *points ) 636afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 637afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *buffer, *p; 638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, j, k, size, dsize, hsize; 639afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint uinc; 640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach size = components(target); 642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!points || size==0) { 644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return NULL; 645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* max(uorder, vorder) additional points are used in */ 648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* horner evaluation and uorder*vorder additional */ 649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* values are needed for de Casteljau */ 650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder; 651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach hsize = (uorder > vorder ? uorder : vorder)*size; 652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(hsize>dsize) 654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc((uorder*vorder*size+hsize)*sizeof(GLfloat)); 655afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else 656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc((uorder*vorder*size+dsize)*sizeof(GLfloat)); 657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* compute the increment value for the u-loop */ 659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach uinc = ustride - vorder*vstride; 660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (buffer) 662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=0, p=buffer; i<uorder; i++, points += uinc) 663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (j=0; j<vorder; j++, points += vstride) 664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (k=0; k<size; k++) 665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *p++ = points[k]; 666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return buffer; 668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Same as above but convert doubles to floats. 674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLfloat *gl_copy_map_points2d(GLenum target, 676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint ustride, GLint uorder, 677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint vstride, GLint vorder, 678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLdouble *points ) 679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *buffer, *p; 681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, j, k, size, hsize, dsize; 682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint uinc; 683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach size = components(target); 685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!points || size==0) { 687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return NULL; 688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* max(uorder, vorder) additional points are used in */ 691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* horner evaluation and uorder*vorder additional */ 692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* values are needed for de Casteljau */ 693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder; 694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach hsize = (uorder > vorder ? uorder : vorder)*size; 695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if(hsize>dsize) 697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc((uorder*vorder*size+hsize)*sizeof(GLfloat)); 698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else 699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach buffer = (GLfloat *) malloc((uorder*vorder*size+dsize)*sizeof(GLfloat)); 700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* compute the increment value for the u-loop */ 702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach uinc = ustride - vorder*vstride; 703afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (buffer) 705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=0, p=buffer; i<uorder; i++, points += uinc) 706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (j=0; j<vorder; j++, points += vstride) 707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (k=0; k<size; k++) 708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *p++ = (GLfloat) points[k]; 709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return buffer; 711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 715afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * This function is called by the display list deallocator function to 716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * specify that a given set of control points are no longer needed. 717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_free_control_points( GLcontext* ctx, GLenum target, GLfloat *data ) 719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 720afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_1d_map *map1 = NULL; 721afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map2 = NULL; 722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 725afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Vertex3; 726afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 727afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Vertex4; 729afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 731afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Index; 732afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 733afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Color4; 735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Normal; 738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Texture1; 741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 743afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Texture2; 744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 745afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Texture3; 747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 748afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 749afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1 = &ctx->EvalMap.Map1Texture4; 750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Vertex3; 753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Vertex4; 756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Index; 759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Color4; 762afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 763afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 764afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Normal; 765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 766afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Texture1; 768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 769afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Texture2; 771afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 772afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 773afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Texture3; 774afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 775afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2 = &ctx->EvalMap.Map2Texture4; 777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 778afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 779afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "gl_free_control_points" ); 780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 782afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 783afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (map1) { 784afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (data==map1->Points) { 785afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* The control points in the display list are currently */ 786afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* being used so we can mark them as discard-able. */ 787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map1->Retain = GL_FALSE; 788afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 789afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else { 790afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* The control points in the display list are not currently */ 791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* being used. */ 792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( data ); 793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 795afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (map2) { 796afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (data==map2->Points) { 797afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* The control points in the display list are currently */ 798afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* being used so we can mark them as discard-able. */ 799afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map2->Retain = GL_FALSE; 800afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 801afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else { 802afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* The control points in the display list are not currently */ 803afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* being used. */ 804afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( data ); 805afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 806afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 807afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 808afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 809afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 810afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 811afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 812afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/ 813afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*** API entry points ***/ 814afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/**********************************************************************/ 815afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 816afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 817afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 818afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Note that the array of control points must be 'unpacked' at this time. 819afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Input: retain - if TRUE, this control point data is also in a display 820afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * list and can't be freed until the list is freed. 821afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 822afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_Map1f( GLcontext* ctx, GLenum target, 823afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u1, GLfloat u2, GLint stride, 824afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint order, const GLfloat *points, GLboolean retain ) 825afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 826afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint k; 827afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 828afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!points) { 829afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_OUT_OF_MEMORY, "glMap1f" ); 830afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 831afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 832afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 833afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* may be a new stride after copying control points */ 834afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach stride = components( target ); 835afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 836afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMap1"); 837afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 838afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (u1==u2) { 839afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap1(u1,u2)" ); 840afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 841afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 842afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 843afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (order<1 || order>MAX_EVAL_ORDER) { 844afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap1(order)" ); 845afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 846afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 847afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 848afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach k = components( target ); 849afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (k==0) { 850afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); 851afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 852afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 853afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (stride < k) { 854afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap1(stride)" ); 855afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 856afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 857afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 858afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 859afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 860afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.Order = order; 861afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.u1 = u1; 862afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.u2 = u2; 863afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.du = 1.0 / (u2 - u1); 864afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Vertex3.Points 865afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Vertex3.Retain) { 866afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Vertex3.Points ); 867afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 868afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.Points = (GLfloat *) points; 869afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex3.Retain = retain; 870afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 871afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 872afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.Order = order; 873afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.u1 = u1; 874afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.u2 = u2; 875afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.du = 1.0 / (u2 - u1); 876afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Vertex4.Points 877afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Vertex4.Retain) { 878afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Vertex4.Points ); 879afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 880afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.Points = (GLfloat *) points; 881afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Vertex4.Retain = retain; 882afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 883afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 884afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.Order = order; 885afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.u1 = u1; 886afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.u2 = u2; 887afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.du = 1.0 / (u2 - u1); 888afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Index.Points 889afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Index.Retain) { 890afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Index.Points ); 891afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 892afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.Points = (GLfloat *) points; 893afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Index.Retain = retain; 894afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 895afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 896afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.Order = order; 897afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.u1 = u1; 898afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.u2 = u2; 899afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.du = 1.0 / (u2 - u1); 900afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Color4.Points 901afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Color4.Retain) { 902afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Color4.Points ); 903afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 904afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.Points = (GLfloat *) points; 905afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Color4.Retain = retain; 906afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 907afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 908afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.Order = order; 909afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.u1 = u1; 910afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.u2 = u2; 911afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.du = 1.0 / (u2 - u1); 912afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Normal.Points 913afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Normal.Retain) { 914afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Normal.Points ); 915afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 916afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.Points = (GLfloat *) points; 917afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Normal.Retain = retain; 918afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 919afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 920afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.Order = order; 921afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.u1 = u1; 922afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.u2 = u2; 923afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.du = 1.0 / (u2 - u1); 924afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Texture1.Points 925afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Texture1.Retain) { 926afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Texture1.Points ); 927afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 928afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.Points = (GLfloat *) points; 929afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture1.Retain = retain; 930afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 931afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 932afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.Order = order; 933afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.u1 = u1; 934afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.u2 = u2; 935afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.du = 1.0 / (u2 - u1); 936afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Texture2.Points 937afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Texture2.Retain) { 938afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Texture2.Points ); 939afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 940afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.Points = (GLfloat *) points; 941afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture2.Retain = retain; 942afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 943afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 944afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.Order = order; 945afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.u1 = u1; 946afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.u2 = u2; 947afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.du = 1.0 / (u2 - u1); 948afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Texture3.Points 949afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Texture3.Retain) { 950afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Texture3.Points ); 951afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 952afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.Points = (GLfloat *) points; 953afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture3.Retain = retain; 954afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 955afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 956afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.Order = order; 957afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.u1 = u1; 958afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.u2 = u2; 959afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.du = 1.0 / (u2 - u1); 960afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map1Texture4.Points 961afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map1Texture4.Retain) { 962afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map1Texture4.Points ); 963afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 964afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.Points = (GLfloat *) points; 965afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map1Texture4.Retain = retain; 966afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 967afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 968afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); 969afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 970afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 971afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 972afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 973afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 974afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 975afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* 976afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Note that the array of control points must be 'unpacked' at this time. 977afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Input: retain - if TRUE, this control point data is also in a display 978afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * list and can't be freed until the list is freed. 979afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 980afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_Map2f( GLcontext* ctx, GLenum target, 981afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, 982afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, 983afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat *points, GLboolean retain ) 984afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 985afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint k; 986afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 987afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMap2"); 988afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 989afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (u1==u2) { 990afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(u1,u2)" ); 991afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 992afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 993afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 994afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (v1==v2) { 995afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(v1,v2)" ); 996afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 997afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 998afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 999afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (uorder<1 || uorder>MAX_EVAL_ORDER) { 1000afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(uorder)" ); 1001afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1002afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1003afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1004afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (vorder<1 || vorder>MAX_EVAL_ORDER) { 1005afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(vorder)" ); 1006afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1007afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1008afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1009afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach k = components( target ); 1010afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (k==0) { 1011afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); 1012afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1013afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1014afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ustride < k) { 1015afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(ustride)" ); 1016afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1017afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1018afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (vstride < k) { 1019afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMap2(vstride)" ); 1020afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1021afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1022afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1023afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1024afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1025afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.Uorder = uorder; 1026afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.u1 = u1; 1027afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.u2 = u2; 1028afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.du = 1.0 / (u2 - u1); 1029afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.Vorder = vorder; 1030afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.v1 = v1; 1031afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.v2 = v2; 1032afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.dv = 1.0 / (v2 - v1); 1033afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Vertex3.Points 1034afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Vertex3.Retain) { 1035afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Vertex3.Points ); 1036afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1037afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.Retain = retain; 1038afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex3.Points = (GLfloat *) points; 1039afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1040afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1041afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.Uorder = uorder; 1042afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.u1 = u1; 1043afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.u2 = u2; 1044afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.du = 1.0 / (u2 - u1); 1045afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.Vorder = vorder; 1046afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.v1 = v1; 1047afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.v2 = v2; 1048afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.dv = 1.0 / (v2 - v1); 1049afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Vertex4.Points 1050afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Vertex4.Retain) { 1051afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Vertex4.Points ); 1052afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1053afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.Points = (GLfloat *) points; 1054afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Vertex4.Retain = retain; 1055afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1056afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1057afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.Uorder = uorder; 1058afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.u1 = u1; 1059afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.u2 = u2; 1060afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.du = 1.0 / (u2 - u1); 1061afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.Vorder = vorder; 1062afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.v1 = v1; 1063afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.v2 = v2; 1064afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.dv = 1.0 / (v2 - v1); 1065afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Index.Points 1066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Index.Retain) { 1067afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Index.Points ); 1068afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1069afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.Retain = retain; 1070afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Index.Points = (GLfloat *) points; 1071afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1072afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1073afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.Uorder = uorder; 1074afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.u1 = u1; 1075afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.u2 = u2; 1076afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.du = 1.0 / (u2 - u1); 1077afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.Vorder = vorder; 1078afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.v1 = v1; 1079afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.v2 = v2; 1080afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.dv = 1.0 / (v2 - v1); 1081afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Color4.Points 1082afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Color4.Retain) { 1083afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Color4.Points ); 1084afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1085afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.Retain = retain; 1086afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Color4.Points = (GLfloat *) points; 1087afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1088afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1089afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.Uorder = uorder; 1090afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.u1 = u1; 1091afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.u2 = u2; 1092afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.du = 1.0 / (u2 - u1); 1093afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.Vorder = vorder; 1094afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.v1 = v1; 1095afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.v2 = v2; 1096afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.dv = 1.0 / (v2 - v1); 1097afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Normal.Points 1098afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Normal.Retain) { 1099afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Normal.Points ); 1100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.Retain = retain; 1102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Normal.Points = (GLfloat *) points; 1103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.Uorder = uorder; 1106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.u1 = u1; 1107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.u2 = u2; 1108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.du = 1.0 / (u2 - u1); 1109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.Vorder = vorder; 1110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.v1 = v1; 1111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.v2 = v2; 1112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.dv = 1.0 / (v2 - v1); 1113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Texture1.Points 1114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Texture1.Retain) { 1115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Texture1.Points ); 1116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.Retain = retain; 1118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture1.Points = (GLfloat *) points; 1119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.Uorder = uorder; 1122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.u1 = u1; 1123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.u2 = u2; 1124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.du = 1.0 / (u2 - u1); 1125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.Vorder = vorder; 1126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.v1 = v1; 1127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.v2 = v2; 1128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.dv = 1.0 / (v2 - v1); 1129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Texture2.Points 1130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Texture2.Retain) { 1131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Texture2.Points ); 1132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.Retain = retain; 1134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture2.Points = (GLfloat *) points; 1135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.Uorder = uorder; 1138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.u1 = u1; 1139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.u2 = u2; 1140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.du = 1.0 / (u2 - u1); 1141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.Vorder = vorder; 1142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.v1 = v1; 1143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.v2 = v2; 1144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.dv = 1.0 / (v2 - v1); 1145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Texture3.Points 1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Texture3.Retain) { 1147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Texture3.Points ); 1148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.Retain = retain; 1150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture3.Points = (GLfloat *) points; 1151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.Uorder = uorder; 1154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.u1 = u1; 1155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.u2 = u2; 1156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.du = 1.0 / (u2 - u1); 1157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.Vorder = vorder; 1158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.v1 = v1; 1159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.v2 = v2; 1160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.dv = 1.0 / (v2 - v1); 1161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->EvalMap.Map2Texture4.Points 1162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach && !ctx->EvalMap.Map2Texture4.Retain) { 1163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach free( ctx->EvalMap.Map2Texture4.Points ); 1164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.Retain = retain; 1166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->EvalMap.Map2Texture4.Points = (GLfloat *) points; 1167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); 1170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 1172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_GetMapdv( GLcontext* ctx, GLenum target, GLenum query, GLdouble *v ) 1178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 1179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, n; 1180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *data; 1181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (query) { 1183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_COEFF: 1184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Color4.Points; 1187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Color4.Order * 4; 1188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Index.Points; 1191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Index.Order; 1192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Normal.Points; 1195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Normal.Order * 3; 1196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture1.Points; 1199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture1.Order * 1; 1200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture2.Points; 1203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture2.Order * 2; 1204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture3.Points; 1207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture3.Order * 3; 1208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture4.Points; 1211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture4.Order * 4; 1212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex3.Points; 1215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex3.Order * 3; 1216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex4.Points; 1219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex4.Order * 4; 1220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Color4.Points; 1223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Color4.Uorder 1224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Color4.Vorder * 4; 1225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Index.Points; 1228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Index.Uorder 1229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Index.Vorder; 1230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Normal.Points; 1233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Normal.Uorder 1234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Normal.Vorder * 3; 1235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture1.Points; 1238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture1.Uorder 1239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture1.Vorder * 1; 1240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture2.Points; 1243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture2.Uorder 1244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture2.Vorder * 2; 1245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture3.Points; 1248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture3.Uorder 1249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture3.Vorder * 3; 1250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture4.Points; 1253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture4.Uorder 1254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture4.Vorder * 4; 1255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex3.Points; 1258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex3.Uorder 1259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex4.Points; 1263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex4.Uorder 1264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (data) { 1271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=0;i<n;i++) { 1272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[i] = data[i]; 1273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_ORDER: 1277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Color4.Order; 1280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Index.Order; 1283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Normal.Order; 1286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture1.Order; 1289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture2.Order; 1292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture3.Order; 1295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture4.Order; 1298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex3.Order; 1301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex4.Order; 1304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Color4.Uorder; 1307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Color4.Vorder; 1308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Index.Uorder; 1311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Index.Vorder; 1312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Normal.Uorder; 1315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Normal.Vorder; 1316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_DOMAIN: 1347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Color4.u1; 1350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Color4.u2; 1351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Index.u1; 1354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Index.u2; 1355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Normal.u1; 1358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Normal.u2; 1359afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture1.u1; 1362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture1.u2; 1363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture2.u1; 1366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture2.u2; 1367afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture3.u1; 1370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture3.u2; 1371afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture4.u1; 1374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture4.u2; 1375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Vertex3.u1; 1378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Vertex3.u2; 1379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Vertex4.u1; 1382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Vertex4.u2; 1383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Color4.u1; 1386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Color4.u2; 1387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Color4.v1; 1388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Color4.v2; 1389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Index.u1; 1392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Index.u2; 1393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Index.v1; 1394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Index.v2; 1395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Normal.u1; 1398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Normal.u2; 1399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Normal.v1; 1400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Normal.v2; 1401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture1.u1; 1404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture1.u2; 1405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture1.v1; 1406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture1.v2; 1407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture2.u1; 1410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture2.u2; 1411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture2.v1; 1412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture2.v2; 1413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture3.u1; 1416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture3.u2; 1417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture3.v1; 1418afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture3.v2; 1419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture4.u1; 1422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture4.u2; 1423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture4.v1; 1424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture4.v2; 1425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex3.u1; 1428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex3.u2; 1429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Vertex3.v1; 1430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Vertex3.v2; 1431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1433afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex4.u1; 1434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex4.u2; 1435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Vertex4.v1; 1436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Vertex4.v2; 1437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); 1440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapdv(query)" ); 1444afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 1446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_GetMapfv( GLcontext* ctx, GLenum target, GLenum query, GLfloat *v ) 1449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 1450afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, n; 1451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *data; 1452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (query) { 1454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_COEFF: 1455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Color4.Points; 1458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Color4.Order * 4; 1459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Index.Points; 1462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Index.Order; 1463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Normal.Points; 1466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Normal.Order * 3; 1467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture1.Points; 1470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture1.Order * 1; 1471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture2.Points; 1474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture2.Order * 2; 1475afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture3.Points; 1478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture3.Order * 3; 1479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture4.Points; 1482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture4.Order * 4; 1483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex3.Points; 1486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex3.Order * 3; 1487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1488afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex4.Points; 1490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex4.Order * 4; 1491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Color4.Points; 1494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Color4.Uorder 1495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Color4.Vorder * 4; 1496afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1498afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Index.Points; 1499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Index.Uorder 1500afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Index.Vorder; 1501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Normal.Points; 1504afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Normal.Uorder 1505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Normal.Vorder * 3; 1506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1507afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1508afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture1.Points; 1509afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture1.Uorder 1510afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture1.Vorder * 1; 1511afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture2.Points; 1514afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture2.Uorder 1515afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture2.Vorder * 2; 1516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1517afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1518afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture3.Points; 1519afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture3.Uorder 1520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture3.Vorder * 3; 1521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1523afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture4.Points; 1524afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture4.Uorder 1525afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture4.Vorder * 4; 1526afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1527afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1528afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex3.Points; 1529afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex3.Uorder 1530afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1531afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1532afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1533afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex4.Points; 1534afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex4.Uorder 1535afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1536afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1537afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1538afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1540afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1541afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (data) { 1542afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=0;i<n;i++) { 1543afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[i] = data[i]; 1544afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1545afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1546afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1547afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_ORDER: 1548afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1549afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1550afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Color4.Order; 1551afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1552afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1553afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Index.Order; 1554afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1555afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1556afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Normal.Order; 1557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1558afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1559afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture1.Order; 1560afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1561afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1562afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture2.Order; 1563afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1564afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1565afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture3.Order; 1566afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1567afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1568afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture4.Order; 1569afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1570afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1571afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex3.Order; 1572afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1573afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1574afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex4.Order; 1575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1576afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1577afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Color4.Uorder; 1578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Color4.Vorder; 1579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Index.Uorder; 1582afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Index.Vorder; 1583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1585afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Normal.Uorder; 1586afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Normal.Vorder; 1587afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1588afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1589afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1591afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1592afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1600afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1602afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1614afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1616afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_DOMAIN: 1618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Color4.u1; 1621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Color4.u2; 1622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1624afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Index.u1; 1625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Index.u2; 1626afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Normal.u1; 1629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Normal.u2; 1630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture1.u1; 1633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture1.u2; 1634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1636afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture2.u1; 1637afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture2.u2; 1638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1639afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture3.u1; 1641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture3.u2; 1642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Texture4.u1; 1645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Texture4.u2; 1646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Vertex3.u1; 1649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Vertex3.u2; 1650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map1Vertex4.u1; 1653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map1Vertex4.u2; 1654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1655afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Color4.u1; 1657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Color4.u2; 1658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Color4.v1; 1659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Color4.v2; 1660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Index.u1; 1663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Index.u2; 1664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Index.v1; 1665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Index.v2; 1666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Normal.u1; 1669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Normal.u2; 1670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Normal.v1; 1671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Normal.v2; 1672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture1.u1; 1675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture1.u2; 1676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture1.v1; 1677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture1.v2; 1678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture2.u1; 1681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture2.u2; 1682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture2.v1; 1683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture2.v2; 1684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture3.u1; 1687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture3.u2; 1688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture3.v1; 1689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture3.v2; 1690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture4.u1; 1693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture4.u2; 1694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Texture4.v1; 1695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Texture4.v2; 1696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex3.u1; 1699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex3.u2; 1700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Vertex3.v1; 1701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Vertex3.v2; 1702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1703afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex4.u1; 1705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex4.u2; 1706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ctx->EvalMap.Map2Vertex4.v1; 1707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ctx->EvalMap.Map2Vertex4.v2; 1708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); 1711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapfv(query)" ); 1715afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 1717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_GetMapiv( GLcontext* ctx, GLenum target, GLenum query, GLint *v ) 1720afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 1721afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i, n; 1722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat *data; 1723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (query) { 1725afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_COEFF: 1726afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1727afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Color4.Points; 1729afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Color4.Order * 4; 1730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1731afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1732afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Index.Points; 1733afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Index.Order; 1734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Normal.Points; 1737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Normal.Order * 3; 1738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture1.Points; 1741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture1.Order * 1; 1742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1743afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture2.Points; 1745afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture2.Order * 2; 1746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1748afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture3.Points; 1749afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture3.Order * 3; 1750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Texture4.Points; 1753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Texture4.Order * 4; 1754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex3.Points; 1757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex3.Order * 3; 1758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map1Vertex4.Points; 1761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map1Vertex4.Order * 4; 1762afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1763afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1764afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Color4.Points; 1765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Color4.Uorder 1766afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Color4.Vorder * 4; 1767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1769afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Index.Points; 1770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Index.Uorder 1771afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Index.Vorder; 1772afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1773afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1774afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Normal.Points; 1775afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Normal.Uorder 1776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Normal.Vorder * 3; 1777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1778afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1779afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture1.Points; 1780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture1.Uorder 1781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture1.Vorder * 1; 1782afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1783afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1784afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture2.Points; 1785afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture2.Uorder 1786afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture2.Vorder * 2; 1787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1788afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1789afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture3.Points; 1790afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture3.Uorder 1791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture3.Vorder * 3; 1792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Texture4.Points; 1795afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Texture4.Uorder 1796afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Texture4.Vorder * 4; 1797afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1798afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1799afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex3.Points; 1800afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex3.Uorder 1801afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex3.Vorder * 3; 1802afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1803afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1804afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach data = ctx->EvalMap.Map2Vertex4.Points; 1805afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach n = ctx->EvalMap.Map2Vertex4.Uorder 1806afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * ctx->EvalMap.Map2Vertex4.Vorder * 4; 1807afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1808afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1809afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1810afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1811afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1812afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (data) { 1813afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=0;i<n;i++) { 1814afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[i] = ROUNDF(data[i]); 1815afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1816afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1817afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1818afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_ORDER: 1819afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1820afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1821afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Color4.Order; 1822afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1823afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1824afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Index.Order; 1825afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1826afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1827afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Normal.Order; 1828afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1829afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1830afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture1.Order; 1831afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1832afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1833afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture2.Order; 1834afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1835afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1836afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture3.Order; 1837afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1838afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1839afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Texture4.Order; 1840afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1841afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1842afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex3.Order; 1843afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1844afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1845afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *v = ctx->EvalMap.Map1Vertex4.Order; 1846afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1847afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1848afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Color4.Uorder; 1849afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Color4.Vorder; 1850afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1851afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1852afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Index.Uorder; 1853afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Index.Vorder; 1854afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1855afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1856afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Normal.Uorder; 1857afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Normal.Vorder; 1858afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1859afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1860afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture1.Uorder; 1861afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture1.Vorder; 1862afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1863afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1864afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture2.Uorder; 1865afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture2.Vorder; 1866afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1867afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1868afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture3.Uorder; 1869afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture3.Vorder; 1870afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1871afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1872afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Texture4.Uorder; 1873afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Texture4.Vorder; 1874afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1875afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1876afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex3.Uorder; 1877afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex3.Vorder; 1878afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1879afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1880afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ctx->EvalMap.Map2Vertex4.Uorder; 1881afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ctx->EvalMap.Map2Vertex4.Vorder; 1882afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1883afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1884afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1885afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 1886afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1887afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1888afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_DOMAIN: 1889afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (target) { 1890afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_COLOR_4: 1891afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Color4.u1); 1892afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Color4.u2); 1893afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1894afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_INDEX: 1895afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Index.u1); 1896afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Index.u2); 1897afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1898afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_NORMAL: 1899afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Normal.u1); 1900afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Normal.u2); 1901afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1902afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_1: 1903afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Texture1.u1); 1904afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Texture1.u2); 1905afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1906afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_2: 1907afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Texture2.u1); 1908afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Texture2.u2); 1909afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1910afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_3: 1911afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Texture3.u1); 1912afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Texture3.u2); 1913afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1914afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_TEXTURE_COORD_4: 1915afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Texture4.u1); 1916afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Texture4.u2); 1917afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1918afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_3: 1919afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Vertex3.u1); 1920afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Vertex3.u2); 1921afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1922afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP1_VERTEX_4: 1923afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map1Vertex4.u1); 1924afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map1Vertex4.u2); 1925afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1926afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_COLOR_4: 1927afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Color4.u1); 1928afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Color4.u2); 1929afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Color4.v1); 1930afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Color4.v2); 1931afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1932afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_INDEX: 1933afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Index.u1); 1934afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Index.u2); 1935afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Index.v1); 1936afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Index.v2); 1937afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1938afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_NORMAL: 1939afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Normal.u1); 1940afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Normal.u2); 1941afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Normal.v1); 1942afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Normal.v2); 1943afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1944afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_1: 1945afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Texture1.u1); 1946afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Texture1.u2); 1947afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Texture1.v1); 1948afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Texture1.v2); 1949afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1950afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_2: 1951afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Texture2.u1); 1952afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Texture2.u2); 1953afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Texture2.v1); 1954afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Texture2.v2); 1955afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1956afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_3: 1957afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Texture3.u1); 1958afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Texture3.u2); 1959afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Texture3.v1); 1960afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Texture3.v2); 1961afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1962afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_TEXTURE_COORD_4: 1963afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Texture4.u1); 1964afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Texture4.u2); 1965afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Texture4.v1); 1966afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Texture4.v2); 1967afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1968afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_3: 1969afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Vertex3.u1); 1970afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Vertex3.u2); 1971afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Vertex3.v1); 1972afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Vertex3.v2); 1973afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1974afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_MAP2_VERTEX_4: 1975afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[0] = ROUNDF(ctx->EvalMap.Map2Vertex4.u1); 1976afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[1] = ROUNDF(ctx->EvalMap.Map2Vertex4.u2); 1977afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[2] = ROUNDF(ctx->EvalMap.Map2Vertex4.v1); 1978afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v[3] = ROUNDF(ctx->EvalMap.Map2Vertex4.v2); 1979afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1980afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1981afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); 1982afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1983afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 1984afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 1985afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glGetMapiv(query)" ); 1986afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 1987afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 1988afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1989afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1990afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 1991afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid eval_points1( GLfloat outcoord[][4], 1992afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 1993afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 1994afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat du, GLfloat u1 ) 1995afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 1996afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 1997afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 1998afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & VERT_EVAL_P1) 1999afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][0] = coord[i][0] * du + u1; 2000afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (flags[i] & VERT_EVAL_ANY) { 2001afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][0] = coord[i][0]; 2002afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][1] = coord[i][1]; 2003afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2004afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2005afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2006afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid eval_points2( GLfloat outcoord[][4], 2007afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2008afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 2009afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat du, GLfloat u1, 2010afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat dv, GLfloat v1 ) 2011afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2012afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2013afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2014afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & VERT_EVAL_P2) { 2015afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][0] = coord[i][0] * du + u1; 2016afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][1] = coord[i][1] * dv + v1; 2017afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } else if (flags[i] & VERT_EVAL_ANY) { 2018afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][0] = coord[i][0]; 2019afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach outcoord[i][1] = coord[i][1]; 2020afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2021afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2022afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2023afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2024afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachstatic const GLubyte dirty_flags[5] = { 2025afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 0, /* not possible */ 2026afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VEC_DIRTY_0, 2027afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VEC_DIRTY_1, 2028afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VEC_DIRTY_2, 2029afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VEC_DIRTY_3 2030afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}; 2031afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2032afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2033afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4f *eval1_4f( GLvector4f *dest, 2034afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2035afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 2036afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dimension, 2037afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_1d_map *map ) 2038afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2039afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2040afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2041afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[4] = dest->data; 2042afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2043afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2044afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2045afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2046afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2047afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSIGN_4V(to[i], 0,0,0,1); 2048afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(map->Points, to[i], u, dimension, map->Order); 2049afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2050afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2051afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2052afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->size = MAX2(dest->size, dimension); 2053afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->flags |= dirty_flags[dimension]; 2054afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2055afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2056afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2057afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2058afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector1ui *eval1_1ui( GLvector1ui *dest, 2059afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2060afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 2061afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_1d_map *map ) 2062afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2063afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2064afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2065afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *to = dest->data; 2066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2067afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2068afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2069afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2070afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2071afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat tmp; 2072afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(map->Points, &tmp, u, 1, map->Order); 2073afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach to[i] = (GLuint) (GLint) tmp; 2074afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2075afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2076afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2077afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2078afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2079afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2080afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector3f *eval1_norm( GLvector3f *dest, 2081afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2082afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags, /* not const */ 2083afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_1d_map *map ) 2084afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2085afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2086afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2087afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[3] = dest->data; 2088afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2089afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2090afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2091afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2092afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2093afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(map->Points, to[i], u, 3, map->Order); 2094afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i+1] |= VERT_NORM; /* reset */ 2095afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2096afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2097afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2098afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2099afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4ub *eval1_color( GLvector4ub *dest, 2102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags, /* not const */ 2104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_1d_map *map ) 2105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLubyte (*to)[4] = dest->data; 2109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { 2113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat fcolor[4]; 2115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_curve(map->Points, fcolor, u, 4, map->Order); 2116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor); 2117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i+1] |= VERT_RGBA; /* reset */ 2118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, 2128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector3f *norm_ptr, 2129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags, 2131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dimension, 2132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map ) 2133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat v1 = map->v1; 2137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat dv = map->dv; 2138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*obj)[4] = obj_ptr->data; 2139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*normal)[3] = norm_ptr->data; 2140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v = (coord[i][1] - v1) * dv; 2146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat du[4], dv[4]; 2147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSIGN_4V(obj[i], 0,0,0,1); 2149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach de_casteljau_surf(map->Points, obj[i], du, dv, u, v, dimension, 2150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map->Uorder, map->Vorder); 2151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach CROSS3(normal[i], du, dv); 2153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach NORMALIZE_3FV(normal[i]); 2154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i+1] |= VERT_NORM; 2155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj_ptr->count = i; 2158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj_ptr->size = MAX2(obj_ptr->size, dimension); 2159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj_ptr->flags |= dirty_flags[dimension]; 2160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return obj_ptr; 2161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4f *eval2_4f( GLvector4f *dest, 2165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 2167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint dimension, 2168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map ) 2169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat v1 = map->v1; 2173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat dv = map->dv; 2174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[4] = dest->data; 2175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v = (coord[i][1] - v1) * dv; 2181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_surf(map->Points, to[i], u, v, dimension, 2182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map->Uorder, map->Vorder); 2183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->size = MAX2(dest->size, dimension); 2187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->flags |= dirty_flags[dimension]; 2188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector3f *eval2_norm( GLvector3f *dest, 2193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags, 2195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map ) 2196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat v1 = map->v1; 2200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat dv = map->dv; 2201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[3] = dest->data; 2202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v = (coord[i][1] - v1) * dv; 2208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_surf(map->Points, to[i], u, v, 3, 2209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map->Uorder, map->Vorder); 2210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i+1] |= VERT_NORM; /* reset */ 2211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector1ui *eval2_1ui( GLvector1ui *dest, 2219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags, 2221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map ) 2222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat v1 = map->v1; 2226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat dv = map->dv; 2227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *to = dest->data; 2228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v = (coord[i][1] - v1) * dv; 2234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat tmp; 2235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_surf(map->Points, &tmp, u, v, 1, 2236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map->Uorder, map->Vorder); 2237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach to[i] = (GLuint) (GLint) tmp; 2239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4ub *eval2_color( GLvector4ub *dest, 2248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat coord[][4], 2249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags, 2250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct gl_2d_map *map ) 2251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat u1 = map->u1; 2253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat du = map->du; 2254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat v1 = map->v1; 2255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLfloat dv = map->dv; 2256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLubyte (*to)[4] = dest->data; 2257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { 2261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u = (coord[i][0] - u1) * du; 2262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat v = (coord[i][1] - v1) * dv; 2263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat fcolor[4]; 2264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach horner_bezier_surf(map->Points, fcolor, u, v, 4, 2265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach map->Uorder, map->Vorder); 2266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor); 2267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i+1] |= VERT_RGBA; /* reset */ 2268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dest->count = i; 2271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return dest; 2272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4f *copy_4f( GLvector4f *out, CONST GLvector4f *in, 2276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags) 2277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[4] = out->data; 2279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*from)[4] = in->data; 2280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!(flags[i] & VERT_EVAL_ANY)) 2284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach COPY_4FV( to[i], from[i] ); 2285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return out; 2287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector3f *copy_3f( GLvector3f *out, CONST GLvector3f *in, 2290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags) 2291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*to)[3] = out->data; 2293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*from)[3] = in->data; 2294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!(flags[i] & VERT_EVAL_ANY)) 2298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach COPY_3V( to[i], from[i] ); 2299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return out; 2301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector4ub *copy_4ub( GLvector4ub *out, CONST GLvector4ub *in, 2304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags ) 2305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLubyte (*to)[4] = out->data; 2307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLubyte (*from)[4] = in->data; 2308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!(flags[i] & VERT_EVAL_ANY)) 2312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach COPY_4UBV( to[i], from[i] ); 2313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return out; 2315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen GerlachGLvector1ui *copy_1ui( GLvector1ui *out, CONST GLvector1ui *in, 2318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach const GLuint *flags ) 2319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *to = out->data; 2321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach CONST GLuint *from = in->data; 2322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) 2325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!(flags[i] & VERT_EVAL_ANY)) 2326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach to[i] = from[i]; 2327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return out; 2329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/* KW: Rewrote this to perform eval on a whole buffer at once. 2333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Only evaluates active data items, and avoids scribbling 2334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the source buffer if we are running from a display list. 2335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 2336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * If the user (in this case looser) sends eval coordinates 2337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * or runs a display list containing eval coords with no 2338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * vertex maps enabled, we have to either copy all non-eval 2339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * data to a new buffer, or find a way of working around 2340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the eval data. I choose the second option. 2341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * 2342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * KW: This code not reached by cva - use IM to access storage. 2343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_eval_vb( struct vertex_buffer *VB ) 2345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach struct immediate *IM = VB->IM; 2347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLcontext *ctx = VB->ctx; 2348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint req = ctx->CVA.elt.inputs; 2349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat (*coord)[4] = VB->ObjPtr->data; 2350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags = VB->Flag; 2351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint new_flags = 0; 2352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint any_eval1 = VB->OrFlag & (VERT_EVAL_C1|VERT_EVAL_P1); 2355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint any_eval2 = VB->OrFlag & (VERT_EVAL_C2|VERT_EVAL_P2); 2356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint all_eval = VB->AndFlag & VERT_EVAL_ANY; 2357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Handle the degenerate cases. 2359afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval1 && !ctx->Eval.Map1Vertex4 && !ctx->Eval.Map1Vertex3) { 2361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->PurgeFlags |= (VERT_EVAL_C1|VERT_EVAL_P1); 2362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->EarlyCull = 0; 2363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach any_eval1 = GL_FALSE; 2364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval2 && !ctx->Eval.Map2Vertex4 && !ctx->Eval.Map2Vertex3) { 2367afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->PurgeFlags |= (VERT_EVAL_C2|VERT_EVAL_P2); 2368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->EarlyCull = 0; 2369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach any_eval2 = GL_FALSE; 2370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2371afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* KW: This really is a degenerate case - doing this disables 2373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * culling, and causes dummy values for the missing vertices to be 2374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * transformed and clip tested. It also forces the individual 2375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * cliptesting of each primitive in vb_render. I wish there was a 2376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * nice alternative, but I can't say I want to put effort into 2377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * optimizing such a bad usage of the library - I'd much rather 2378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * work on useful changes. 2379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (VB->PurgeFlags) { 2381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!any_eval1 && !any_eval2 && all_eval) VB->Count = VB_START; 2382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_purge_vertices( VB ); 2383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!any_eval1 && !any_eval2) return; 2384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } else 2385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->IndirectCount = VB->Count; 2386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Translate points into coords. 2388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval1 && (VB->OrFlag & VERT_EVAL_P1)) 2390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach eval_points1( IM->Obj, coord, flags, 2392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1du, 2393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1u1); 2394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach coord = IM->Obj; 2396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval2 && (VB->OrFlag & VERT_EVAL_P2)) 2399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach eval_points2( IM->Obj, coord, flags, 2401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2du, 2402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2u1, 2403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2dv, 2404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2v1 ); 2405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach coord = IM->Obj; 2407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* Perform the evaluations on active data elements. 2410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (req & VERT_INDEX) 2412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector1ui *in_index = VB->IndexPtr; 2414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector1ui *out_index = &IM->v.Index; 2415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map1Index && any_eval1) 2417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->IndexPtr = eval1_1ui( out_index, coord, flags, 2418afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map1Index ); 2419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map2Index && any_eval2) 2421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->IndexPtr = eval2_1ui( out_index, coord, flags, 2422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Index ); 2423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (VB->IndexPtr != in_index) { 2425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach new_flags |= VERT_INDEX; 2426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!all_eval) 2427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->IndexPtr = copy_1ui( out_index, in_index, flags ); 2428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (req & VERT_RGBA) 2432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2433afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4ub *in_color = VB->ColorPtr; 2434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4ub *out_color = &IM->v.Color; 2435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map1Color4 && any_eval1) 2437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->ColorPtr = eval1_color( out_color, coord, flags, 2438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map1Color4 ); 2439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map2Color4 && any_eval2) 2441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->ColorPtr = eval2_color( out_color, coord, flags, 2442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Color4 ); 2443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2444afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (VB->ColorPtr != in_color) { 2445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach new_flags |= VERT_RGBA; 2446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!all_eval) 2447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->ColorPtr = copy_4ub( out_color, in_color, flags ); 2448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2450afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->Color[0] = VB->Color[1] = VB->ColorPtr; 2451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (req & VERT_NORM) 2455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector3f *in_normal = VB->NormalPtr; 2457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector3f *out_normal = &IM->v.Normal; 2458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map1Normal && any_eval1) 2460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->NormalPtr = eval1_norm( out_normal, coord, flags, 2461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map1Normal ); 2462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map2Normal && any_eval2) 2464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->NormalPtr = eval2_norm( out_normal, coord, flags, 2465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Normal ); 2466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (VB->NormalPtr != in_normal) { 2468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach new_flags |= VERT_NORM; 2469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!all_eval) 2470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->NormalPtr = copy_3f( out_normal, in_normal, flags ); 2471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2475afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (req & VERT_TEX_ANY(0)) 2476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *tc = VB->TexCoordPtr[0]; 2478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *in = tc; 2479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *out = &IM->v.TexCoord[0]; 2480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval1) { 2482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map1TextureCoord4) 2483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Texture4); 2484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map1TextureCoord3) 2485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Texture3); 2486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map1TextureCoord2) 2487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval1_4f( out, coord, flags, 2, &ctx->EvalMap.Map1Texture2); 2488afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map1TextureCoord1) 2489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval1_4f( out, coord, flags, 1, &ctx->EvalMap.Map1Texture1); 2490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval2) { 2493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map2TextureCoord4) 2494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval2_4f( out, coord, flags, 4, &ctx->EvalMap.Map2Texture4); 2495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map2TextureCoord3) 2496afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval2_4f( out, coord, flags, 3, &ctx->EvalMap.Map2Texture3); 2497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map2TextureCoord2) 2498afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval2_4f( out, coord, flags, 2, &ctx->EvalMap.Map2Texture2); 2499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map2TextureCoord1) 2500afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = eval2_4f( out, coord, flags, 1, &ctx->EvalMap.Map2Texture1); 2501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (tc != in) { 2504afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach new_flags |= VERT_TEX_ANY(0); /* fix for sizes.. */ 2505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!all_eval) 2506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach tc = copy_4f( out, in, flags ); 2507afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2508afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2509afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->TexCoordPtr[0] = tc; 2510afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2511afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2514afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *in = VB->ObjPtr; 2515afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *out = &IM->v.Obj; 2516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLvector4f *obj = in; 2517afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2518afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval1) { 2519afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map1Vertex4) 2520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Vertex4); 2521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else 2522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Vertex3); 2523afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2524afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2525afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (any_eval2) { 2526afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.Map2Vertex4) 2527afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2528afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.AutoNormal && (req & VERT_NORM)) 2529afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 4, 2530afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Vertex4 ); 2531afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else 2532afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval2_4f( out, coord, flags, 4, 2533afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Vertex4); 2534afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2535afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else if (ctx->Eval.Map2Vertex3) 2536afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach { 2537afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (ctx->Eval.AutoNormal && (req & VERT_NORM)) 2538afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 3, 2539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Vertex3 ); 2540afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach else 2541afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = eval2_4f( out, coord, flags, 3, 2542afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach &ctx->EvalMap.Map2Vertex3 ); 2543afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2544afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2545afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2546afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (obj != in && !all_eval) 2547afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach obj = copy_4f( out, in, flags ); 2548afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2549afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->ObjPtr = obj; 2550afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2551afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2552afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (new_flags) { 2553afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *oldflags = VB->Flag; 2554afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint *flags = VB->Flag = VB->EvaluatedFlags; 2555afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint i; 2556afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint count = VB->Count; 2557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2558afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!flags) { 2559afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->EvaluatedFlags = (GLuint *)malloc(VB->Size * sizeof(GLuint)); 2560afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags = VB->Flag = VB->EvaluatedFlags; 2561afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2562afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2563afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (all_eval) { 2564afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = 0 ; i < count ; i++) 2565afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i] = oldflags[i] | new_flags; 2566afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->AndFlag |= new_flags; 2567afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } else { 2568afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLuint andflag = ~0; 2569afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i = 0 ; i < count ; i++) { 2570afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (oldflags[i] & VERT_EVAL_ANY) 2571afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach flags[i] = oldflags[i] | new_flags; 2572afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach andflag &= flags[i]; 2573afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2574afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach VB->AndFlag = andflag; 2575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2576afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2577afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_MapGrid1f( GLcontext* ctx, GLint un, GLfloat u1, GLfloat u2 ) 2581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2582afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMapGrid1f"); 2583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (un<1) { 2585afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMapGrid1f" ); 2586afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2587afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2588afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1un = un; 2589afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1u1 = u1; 2590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1u2 = u2; 2591afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid1du = (u2 - u1) / (GLfloat) un; 2592afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_MapGrid2f( GLcontext* ctx, GLint un, GLfloat u1, GLfloat u2, 2596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint vn, GLfloat v1, GLfloat v2 ) 2597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glMapGrid2f"); 2599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (un<1) { 2600afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(un)" ); 2601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2602afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (vn<1) { 2604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(vn)" ); 2605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2un = un; 2608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2u1 = u1; 2609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2u2 = u2; 2610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2du = (u2 - u1) / (GLfloat) un; 2611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2vn = vn; 2612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2v1 = v1; 2613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2v2 = v2; 2614afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ctx->Eval.MapGrid2dv = (v2 - v1) / (GLfloat) vn; 2615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2616afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_EvalMesh1( GLcontext* ctx, GLenum mode, GLint i1, GLint i2 ) 2620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i; 2622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u, du; 2623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLenum prim; 2624afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glEvalMesh1"); 2626afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (mode) { 2628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_POINT: 2629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach prim = GL_POINTS; 2630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 2631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_LINE: 2632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach prim = GL_LINE_STRIP; 2633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 2634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 2635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glEvalMesh1(mode)" ); 2636afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2637afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2639afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* No effect if vertex maps disabled. 2640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!ctx->Eval.Map1Vertex4 && !ctx->Eval.Map1Vertex3) 2642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du = ctx->Eval.MapGrid1du; 2645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u = ctx->Eval.MapGrid1u1 + i1 * du; 2646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* KW: Could short-circuit this to avoid the immediate mechanism. 2648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach RESET_IMMEDIATE(ctx); 2650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_Begin( ctx, prim ); 2652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (i=i1;i<=i2;i++,u+=du) { 2653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord1f( ctx, u ); 2654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2655afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_End(ctx); 2656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlachvoid gl_EvalMesh2( GLcontext* ctx, 2661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLenum mode, 2662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i1, GLint i2, 2663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint j1, GLint j2 ) 2664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{ 2665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLint i, j; 2666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach GLfloat u, du, v, dv, v1, u1; 2667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glEvalMesh2"); 2669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* No effect if vertex maps disabled. 2671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */ 2672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach if (!ctx->Eval.Map2Vertex4 && !ctx->Eval.Map2Vertex3) 2673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach du = ctx->Eval.MapGrid2du; 2676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach dv = ctx->Eval.MapGrid2dv; 2677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach v1 = ctx->Eval.MapGrid2v1 + j1 * dv; 2678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach u1 = ctx->Eval.MapGrid2u1 + i1 * du; 2679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach RESET_IMMEDIATE(ctx); 2681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach switch (mode) { 2683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_POINT: 2684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_Begin( ctx, GL_POINTS ); 2685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (u=u1,i=i1;i<=i2;i++,u+=du) { 2687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord2f( ctx, u, v ); 2688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_End(ctx); 2691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 2692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_LINE: 2693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_Begin( ctx, GL_LINE_STRIP ); 2695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (u=u1,i=i1;i<=i2;i++,u+=du) { 2696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord2f( ctx, u, v ); 2697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_End(ctx); 2699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (u=u1,i=i1;i<=i2;i++,u+=du) { 2701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_Begin( ctx, GL_LINE_STRIP ); 2702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (v=v1,j=j1;j<=j2;j++,v+=dv) { 2703afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord2f( ctx, u, v ); 2704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_End(ctx); 2706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 2708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach case GL_FILL: 2709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (v=v1,j=j1;j<j2;j++,v+=dv) { 2710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* NOTE: a quad strip can't be used because the four */ 2711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach /* can't be guaranteed to be coplanar! */ 2712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_Begin( ctx, GL_TRIANGLE_STRIP ); 2713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach for (u=u1,i=i1;i<=i2;i++,u+=du) { 2714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord2f( ctx, u, v ); 2715afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_EvalCoord2f( ctx, u, v+dv ); 2716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_End(ctx); 2718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach break; 2720afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach default: 2721afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach gl_error( ctx, GL_INVALID_ENUM, "glEvalMesh2(mode)" ); 2722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach return; 2723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach } 2724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach} 2725afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach 2726