2 ** License Applicability. Except to the extent portions of this file are
3 ** made subject to an alternative license as permitted in the SGI Free
4 ** Software License B, Version 1.1 (the "License"), the contents of this
5 ** file are subject only to the provisions of the License. You may not use
6 ** this file except in compliance with the License. You may obtain a copy
7 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
8 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
10 ** http://oss.sgi.com/projects/FreeB
12 ** Note that, as provided in the License, the Software is distributed on an
13 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
14 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
15 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
16 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
18 ** Original Code. The Original Code is: OpenGL Sample Implementation,
19 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
20 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
21 ** Copyright in any portions created by third parties is as indicated
22 ** elsewhere herein. All Rights Reserved.
24 ** Additional Notice Provisions: The application programming interfaces
25 ** established by SGI in conjunction with the Original Code are The
26 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
27 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
28 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
29 ** Window System(R) (Version 1.3), released October 19, 1998. This software
30 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
31 ** published by SGI, but has not been independently verified as being
32 ** compliant with the OpenGL(R) version 1.2.1 Specification.
38 * $Date$ $Revision: 1.1 $
39 * $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/interface/glcurveval.cc,v 1.1 2004/02/02 16:39:08 navaraf Exp $
42 /* Polynomial Evaluator Interface */
45 #include "glimports.h"
46 #include "glrenderer.h"
47 #include "glcurveval.h"
48 #include "nurbsconsts.h"
50 OpenGLCurveEvaluator::OpenGLCurveEvaluator(void)
52 //no default callback functions
53 beginCallBackN
= NULL
;
55 vertexCallBackN
= NULL
;
56 normalCallBackN
= NULL
;
57 colorCallBackN
= NULL
;
58 texcoordCallBackN
= NULL
;
59 beginCallBackData
= NULL
;
60 endCallBackData
= NULL
;
61 vertexCallBackData
= NULL
;
62 normalCallBackData
= NULL
;
63 colorCallBackData
= NULL
;
64 texcoordCallBackData
= NULL
;
73 em_vertex
.uprime
= -1.0;
74 em_normal
.uprime
= -1.0;
75 em_color
.uprime
= -1.0;
76 em_texcoord
.uprime
= -1.0;
79 OpenGLCurveEvaluator::~OpenGLCurveEvaluator(void)
83 /* added nonsense to avoid the warning messages at compile time */
85 OpenGLCurveEvaluator::addMap(CurveMap
*m
)
91 OpenGLCurveEvaluator::range1f(long type
, REAL
*from
, REAL
*to
)
99 OpenGLCurveEvaluator::domain1f(REAL ulo
, REAL uhi
)
106 OpenGLCurveEvaluator::bgnline(void)
109 beginCallBack(GL_LINE_STRIP
, userData
);
111 glBegin((GLenum
) GL_LINE_STRIP
);
115 OpenGLCurveEvaluator::endline(void)
118 endCallBack(userData
);
123 /*---------------------------------------------------------------------------
124 * disable - turn off a curve map
125 *---------------------------------------------------------------------------
128 OpenGLCurveEvaluator::disable(long type
)
130 glDisable((GLenum
) type
);
133 /*---------------------------------------------------------------------------
134 * enable - turn on a curve map
135 *---------------------------------------------------------------------------
138 OpenGLCurveEvaluator::enable(long type
)
140 glEnable((GLenum
) type
);
143 /*-------------------------------------------------------------------------
144 * mapgrid1f - define a lattice of points with origin and offset
145 *-------------------------------------------------------------------------
148 OpenGLCurveEvaluator::mapgrid1f(long nu
, REAL u0
, REAL u1
)
154 global_grid_nu
= (int) nu
;
157 glMapGrid1f((GLint
) nu
, (GLfloat
) u0
, (GLfloat
) u1
);
160 /*-------------------------------------------------------------------------
161 * bgnmap1 - preamble to curve definition and evaluations
162 *-------------------------------------------------------------------------
165 OpenGLCurveEvaluator::bgnmap1f(long)
169 //initialized so that no maps are set initially
174 //no need to worry about gl states when doing callback
177 glPushAttrib((GLbitfield
) GL_EVAL_BIT
);
180 /*-------------------------------------------------------------------------
181 * endmap1 - postamble to a curve map
182 *-------------------------------------------------------------------------
185 OpenGLCurveEvaluator::endmap1f(void)
195 /*-------------------------------------------------------------------------
196 * map1f - pass a desription of a curve map
197 *-------------------------------------------------------------------------
200 OpenGLCurveEvaluator::map1f(
201 long type
, /* map type */
202 REAL ulo
, /* lower parametric bound */
203 REAL uhi
, /* upper parametric bound */
204 long stride
, /* distance to next point in REALS */
205 long order
, /* parametric order */
206 REAL
*pts
/* control points */
214 case GL_MAP1_VERTEX_3
:
218 case GL_MAP1_VERTEX_4
:
226 case GL_MAP1_COLOR_4
:
234 case GL_MAP1_TEXTURE_COORD_1
:
238 case GL_MAP1_TEXTURE_COORD_2
:
243 case GL_MAP1_TEXTURE_COORD_3
:
247 case GL_MAP1_TEXTURE_COORD_4
:
257 inMap1f(which
, dimension
, ulo
, uhi
, stride
, order
, pts
);
260 glMap1f((GLenum
) type
, (GLfloat
) ulo
, (GLfloat
) uhi
, (GLint
) stride
,
261 (GLint
) order
, (const GLfloat
*) pts
);
264 /*-------------------------------------------------------------------------
265 * mapmesh1f - evaluate a mesh of points on lattice
266 *-------------------------------------------------------------------------
268 void OpenGLCurveEvaluator::mapmesh1f(long style
, long from
, long to
)
272 inMapMesh1f((int) from
, (int) to
);
280 glEvalMesh1((GLenum
) GL_LINE
, (GLint
) from
, (GLint
) to
);
283 glEvalMesh1((GLenum
) GL_POINT
, (GLint
) from
, (GLint
) to
);
289 /*-------------------------------------------------------------------------
290 * evalpoint1i - evaluate a point on a curve
291 *-------------------------------------------------------------------------
293 void OpenGLCurveEvaluator::evalpoint1i(long i
)
295 glEvalPoint1((GLint
) i
);
298 /*-------------------------------------------------------------------------
299 * evalcoord1f - evaluate a point on a curve
300 *-------------------------------------------------------------------------
302 void OpenGLCurveEvaluator::evalcoord1f(long, REAL u
)
304 glEvalCoord1f((GLfloat
) u
);
309 OpenGLCurveEvaluator::putCallBack(GLenum which
, void (GLAPIENTRY
*fn
)())
311 OpenGLCurveEvaluator::putCallBack(GLenum which
, _GLUfuncptr fn
)
316 case GLU_NURBS_BEGIN
:
317 beginCallBackN
= (void (GLAPIENTRY
*) (GLenum
)) fn
;
320 endCallBackN
= (void (GLAPIENTRY
*) (void)) fn
;
322 case GLU_NURBS_VERTEX
:
323 vertexCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
325 case GLU_NURBS_NORMAL
:
326 normalCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
328 case GLU_NURBS_COLOR
:
329 colorCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
331 case GLU_NURBS_TEXTURE_COORD
:
332 texcoordCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
334 case GLU_NURBS_BEGIN_DATA
:
335 beginCallBackData
= (void (GLAPIENTRY
*) (GLenum
, void*)) fn
;
337 case GLU_NURBS_END_DATA
:
338 endCallBackData
= (void (GLAPIENTRY
*) (void*)) fn
;
340 case GLU_NURBS_VERTEX_DATA
:
341 vertexCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
343 case GLU_NURBS_NORMAL_DATA
:
344 normalCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
346 case GLU_NURBS_COLOR_DATA
:
347 colorCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
349 case GLU_NURBS_TEXTURE_COORD_DATA
:
350 texcoordCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
356 OpenGLCurveEvaluator::beginCallBack(GLenum which
, void *data
)
358 if(beginCallBackData
)
359 beginCallBackData(which
, data
);
360 else if(beginCallBackN
)
361 beginCallBackN(which
);
365 OpenGLCurveEvaluator::endCallBack(void *data
)
368 endCallBackData(data
);
369 else if(endCallBackN
)
374 OpenGLCurveEvaluator::vertexCallBack(const GLfloat
*vert
, void* data
)
376 if(vertexCallBackData
)
377 vertexCallBackData(vert
, data
);
378 else if(vertexCallBackN
)
379 vertexCallBackN(vert
);
384 OpenGLCurveEvaluator::normalCallBack(const GLfloat
*normal
, void* data
)
386 if(normalCallBackData
)
387 normalCallBackData(normal
, data
);
388 else if(normalCallBackN
)
389 normalCallBackN(normal
);
393 OpenGLCurveEvaluator::colorCallBack(const GLfloat
*color
, void* data
)
395 if(colorCallBackData
)
396 colorCallBackData(color
, data
);
397 else if(colorCallBackN
)
398 colorCallBackN(color
);
402 OpenGLCurveEvaluator::texcoordCallBack(const GLfloat
*texcoord
, void* data
)
404 if(texcoordCallBackData
)
405 texcoordCallBackData(texcoord
, data
);
406 else if(texcoordCallBackN
)
407 texcoordCallBackN(texcoord
);