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
:
252 inMap1f(which
, dimension
, ulo
, uhi
, stride
, order
, pts
);
255 glMap1f((GLenum
) type
, (GLfloat
) ulo
, (GLfloat
) uhi
, (GLint
) stride
,
256 (GLint
) order
, (const GLfloat
*) pts
);
259 /*-------------------------------------------------------------------------
260 * mapmesh1f - evaluate a mesh of points on lattice
261 *-------------------------------------------------------------------------
263 void OpenGLCurveEvaluator::mapmesh1f(long style
, long from
, long to
)
267 inMapMesh1f((int) from
, (int) to
);
275 glEvalMesh1((GLenum
) GL_LINE
, (GLint
) from
, (GLint
) to
);
278 glEvalMesh1((GLenum
) GL_POINT
, (GLint
) from
, (GLint
) to
);
284 /*-------------------------------------------------------------------------
285 * evalpoint1i - evaluate a point on a curve
286 *-------------------------------------------------------------------------
288 void OpenGLCurveEvaluator::evalpoint1i(long i
)
290 glEvalPoint1((GLint
) i
);
293 /*-------------------------------------------------------------------------
294 * evalcoord1f - evaluate a point on a curve
295 *-------------------------------------------------------------------------
297 void OpenGLCurveEvaluator::evalcoord1f(long, REAL u
)
299 glEvalCoord1f((GLfloat
) u
);
304 OpenGLCurveEvaluator::putCallBack(GLenum which
, void (GLAPIENTRY
*fn
)())
306 OpenGLCurveEvaluator::putCallBack(GLenum which
, _GLUfuncptr fn
)
311 case GLU_NURBS_BEGIN
:
312 beginCallBackN
= (void (GLAPIENTRY
*) (GLenum
)) fn
;
315 endCallBackN
= (void (GLAPIENTRY
*) (void)) fn
;
317 case GLU_NURBS_VERTEX
:
318 vertexCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
320 case GLU_NURBS_NORMAL
:
321 normalCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
323 case GLU_NURBS_COLOR
:
324 colorCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
326 case GLU_NURBS_TEXTURE_COORD
:
327 texcoordCallBackN
= (void (GLAPIENTRY
*) (const GLfloat
*)) fn
;
329 case GLU_NURBS_BEGIN_DATA
:
330 beginCallBackData
= (void (GLAPIENTRY
*) (GLenum
, void*)) fn
;
332 case GLU_NURBS_END_DATA
:
333 endCallBackData
= (void (GLAPIENTRY
*) (void*)) fn
;
335 case GLU_NURBS_VERTEX_DATA
:
336 vertexCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
338 case GLU_NURBS_NORMAL_DATA
:
339 normalCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
341 case GLU_NURBS_COLOR_DATA
:
342 colorCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
344 case GLU_NURBS_TEXTURE_COORD_DATA
:
345 texcoordCallBackData
= (void (GLAPIENTRY
*) (const GLfloat
*, void*)) fn
;
351 OpenGLCurveEvaluator::beginCallBack(GLenum which
, void *data
)
353 if(beginCallBackData
)
354 beginCallBackData(which
, data
);
355 else if(beginCallBackN
)
356 beginCallBackN(which
);
360 OpenGLCurveEvaluator::endCallBack(void *data
)
363 endCallBackData(data
);
364 else if(endCallBackN
)
369 OpenGLCurveEvaluator::vertexCallBack(const GLfloat
*vert
, void* data
)
371 if(vertexCallBackData
)
372 vertexCallBackData(vert
, data
);
373 else if(vertexCallBackN
)
374 vertexCallBackN(vert
);
379 OpenGLCurveEvaluator::normalCallBack(const GLfloat
*normal
, void* data
)
381 if(normalCallBackData
)
382 normalCallBackData(normal
, data
);
383 else if(normalCallBackN
)
384 normalCallBackN(normal
);
388 OpenGLCurveEvaluator::colorCallBack(const GLfloat
*color
, void* data
)
390 if(colorCallBackData
)
391 colorCallBackData(color
, data
);
392 else if(colorCallBackN
)
393 colorCallBackN(color
);
397 OpenGLCurveEvaluator::texcoordCallBack(const GLfloat
*texcoord
, void* data
)
399 if(texcoordCallBackData
)
400 texcoordCallBackData(texcoord
, data
);
401 else if(texcoordCallBackN
)
402 texcoordCallBackN(texcoord
);