1 /* $Id: glu.h,v 1.21 2000/05/22 19:40:43 brianp Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1995-1999 Brian Paul
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Library General Public License for more details.
19 * You should have received a copy of the GNU Library General Public
20 * License along with this library; if not, write to the Free
21 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 #if defined(USE_MGL_NAMESPACE)
30 #include "glu_mangle.h"
41 /* to facilitate clean DLL building ... */
42 #if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN__))
43 # if defined(_MSC_VER) && defined(BUILD_GLU32) /* tag specify we're building mesa as a DLL */
44 # define GLUAPI __declspec(dllexport)
45 # elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
46 # define GLUAPI __declspec(dllimport)
47 # else /* for use with static link lib build of Win32 edition only */
48 # define GLUAPI extern
49 # endif /* _STATIC_MESA support */
50 # define GLCALLBACK __stdcall
51 # define GLCALLBACKP __stdcall *
53 # define GLUAPI extern
55 # define GLCALLBACKP *
56 #endif /* WIN32 / CYGWIN bracket */
58 /* compatability guard so we don't need to change client code */
59 #if defined(_WIN32) && !defined(_WINDEF_) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP)
60 # define CALLBACK GLCALLBACK
66 #pragma enumsalwaysint on
67 #if PRAGMA_IMPORT_SUPPORTED
85 #define GLU_VERSION_1_1 1
86 #define GLU_VERSION_1_2 1
94 #define GLU_SMOOTH 100000
95 #define GLU_FLAT 100001
96 #define GLU_NONE 100002
98 /* Quadric draw styles */
99 #define GLU_POINT 100010
100 #define GLU_LINE 100011
101 #define GLU_FILL 100012
102 #define GLU_SILHOUETTE 100013
104 /* Quadric orientation */
105 #define GLU_OUTSIDE 100020
106 #define GLU_INSIDE 100021
109 #define GLU_TESS_BEGIN 100100
110 #define GLU_TESS_VERTEX 100101
111 #define GLU_TESS_END 100102
112 #define GLU_TESS_ERROR 100103
113 #define GLU_TESS_EDGE_FLAG 100104
114 #define GLU_TESS_COMBINE 100105
116 #define GLU_TESS_BEGIN_DATA 100106
117 #define GLU_TESS_VERTEX_DATA 100107
118 #define GLU_TESS_END_DATA 100108
119 #define GLU_TESS_ERROR_DATA 100109
120 #define GLU_TESS_EDGE_FLAG_DATA 100110
121 #define GLU_TESS_COMBINE_DATA 100111
124 #define GLU_TESS_WINDING_ODD 100130
125 #define GLU_TESS_WINDING_NONZERO 100131
126 #define GLU_TESS_WINDING_POSITIVE 100132
127 #define GLU_TESS_WINDING_NEGATIVE 100133
128 #define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
130 /* Tessellation properties */
131 #define GLU_TESS_WINDING_RULE 100140
132 #define GLU_TESS_BOUNDARY_ONLY 100141
133 #define GLU_TESS_TOLERANCE 100142
135 /* Tessellation errors */
136 #define GLU_TESS_ERROR1 100151 /* Missing gluBeginPolygon */
137 #define GLU_TESS_ERROR2 100152 /* Missing gluBeginContour */
138 #define GLU_TESS_ERROR3 100153 /* Missing gluEndPolygon */
139 #define GLU_TESS_ERROR4 100154 /* Missing gluEndContour */
140 #define GLU_TESS_ERROR5 100155 /* */
141 #define GLU_TESS_ERROR6 100156 /* */
142 #define GLU_TESS_ERROR7 100157 /* */
143 #define GLU_TESS_ERROR8 100158 /* */
146 #define GLU_AUTO_LOAD_MATRIX 100200
147 #define GLU_CULLING 100201
148 #define GLU_PARAMETRIC_TOLERANCE 100202
149 #define GLU_SAMPLING_TOLERANCE 100203
150 #define GLU_DISPLAY_MODE 100204
151 #define GLU_SAMPLING_METHOD 100205
152 #define GLU_U_STEP 100206
153 #define GLU_V_STEP 100207
155 #define GLU_PATH_LENGTH 100215
156 #define GLU_PARAMETRIC_ERROR 100216
157 #define GLU_DOMAIN_DISTANCE 100217
159 #define GLU_MAP1_TRIM_2 100210
160 #define GLU_MAP1_TRIM_3 100211
162 #define GLU_OUTLINE_POLYGON 100240
163 #define GLU_OUTLINE_PATCH 100241
165 #define GLU_NURBS_ERROR1 100251 /* spline order un-supported */
166 #define GLU_NURBS_ERROR2 100252 /* too few knots */
167 #define GLU_NURBS_ERROR3 100253 /* valid knot range is empty */
168 #define GLU_NURBS_ERROR4 100254 /* decreasing knot sequence */
169 #define GLU_NURBS_ERROR5 100255 /* knot multiplicity > spline order */
170 #define GLU_NURBS_ERROR6 100256 /* endcurve() must follow bgncurve() */
171 #define GLU_NURBS_ERROR7 100257 /* bgncurve() must precede endcurve() */
172 #define GLU_NURBS_ERROR8 100258 /* ctrlarray or knot vector is NULL */
173 #define GLU_NURBS_ERROR9 100259 /* can't draw pwlcurves */
174 #define GLU_NURBS_ERROR10 100260 /* missing gluNurbsCurve() */
175 #define GLU_NURBS_ERROR11 100261 /* missing gluNurbsSurface() */
176 #define GLU_NURBS_ERROR12 100262 /* endtrim() must precede endsurface() */
177 #define GLU_NURBS_ERROR13 100263 /* bgnsurface() must precede endsurface() */
178 #define GLU_NURBS_ERROR14 100264 /* curve of improper type passed as trim curve */
179 #define GLU_NURBS_ERROR15 100265 /* bgnsurface() must precede bgntrim() */
180 #define GLU_NURBS_ERROR16 100266 /* endtrim() must follow bgntrim() */
181 #define GLU_NURBS_ERROR17 100267 /* bgntrim() must precede endtrim()*/
182 #define GLU_NURBS_ERROR18 100268 /* invalid or missing trim curve*/
183 #define GLU_NURBS_ERROR19 100269 /* bgntrim() must precede pwlcurve() */
184 #define GLU_NURBS_ERROR20 100270 /* pwlcurve referenced twice*/
185 #define GLU_NURBS_ERROR21 100271 /* pwlcurve and nurbscurve mixed */
186 #define GLU_NURBS_ERROR22 100272 /* improper usage of trim data type */
187 #define GLU_NURBS_ERROR23 100273 /* nurbscurve referenced twice */
188 #define GLU_NURBS_ERROR24 100274 /* nurbscurve and pwlcurve mixed */
189 #define GLU_NURBS_ERROR25 100275 /* nurbssurface referenced twice */
190 #define GLU_NURBS_ERROR26 100276 /* invalid property */
191 #define GLU_NURBS_ERROR27 100277 /* endsurface() must follow bgnsurface() */
192 #define GLU_NURBS_ERROR28 100278 /* intersecting or misoriented trim curves */
193 #define GLU_NURBS_ERROR29 100279 /* intersecting trim curves */
194 #define GLU_NURBS_ERROR30 100280 /* UNUSED */
195 #define GLU_NURBS_ERROR31 100281 /* unconnected trim curves */
196 #define GLU_NURBS_ERROR32 100282 /* unknown knot error */
197 #define GLU_NURBS_ERROR33 100283 /* negative vertex count encountered */
198 #define GLU_NURBS_ERROR34 100284 /* negative byte-stride */
199 #define GLU_NURBS_ERROR35 100285 /* unknown type descriptor */
200 #define GLU_NURBS_ERROR36 100286 /* null control point reference */
201 #define GLU_NURBS_ERROR37 100287 /* duplicate point on pwlcurve */
203 /* GLU 1.3 and later */
204 #define GLU_NURBS_MODE ?
208 #define GLU_INVALID_ENUM 100900
209 #define GLU_INVALID_VALUE 100901
210 #define GLU_OUT_OF_MEMORY 100902
211 #define GLU_INCOMPATIBLE_GL_VERSION 100903
213 /* GLU 1.1 and later */
214 #define GLU_VERSION 100800
215 #define GLU_EXTENSIONS 100801
219 /*** GLU 1.0 tessellation - obsolete! ***/
222 #define GLU_CW 100120
223 #define GLU_CCW 100121
224 #define GLU_INTERIOR 100122
225 #define GLU_EXTERIOR 100123
226 #define GLU_UNKNOWN 100124
229 #define GLU_BEGIN GLU_TESS_BEGIN
230 #define GLU_VERTEX GLU_TESS_VERTEX
231 #define GLU_END GLU_TESS_END
232 #define GLU_ERROR GLU_TESS_ERROR
233 #define GLU_EDGE_FLAG GLU_TESS_EDGE_FLAG
237 * These are the GLU 1.1 typedefs. GLU 1.3 has different ones!
239 #if defined(__BEOS__)
240 /* The BeOS does something funky and makes these typedefs in one
241 * of its system headers.
244 typedef struct GLUquadric GLUquadricObj
;
245 typedef struct GLUnurbs GLUnurbsObj
;
247 /* FIXME: We need to implement the other 1.3 typedefs - GH */
248 typedef struct GLUtesselator GLUtesselator
;
249 typedef GLUtesselator GLUtriangulatorObj
;
254 #if defined(__BEOS__) || defined(__QUICKDRAW__)
261 * Miscellaneous functions
265 GLUAPI
void GLAPIENTRY
gluLookAt( GLdouble eyex
, GLdouble eyey
, GLdouble eyez
,
266 GLdouble centerx
, GLdouble centery
,
268 GLdouble upx
, GLdouble upy
, GLdouble upz
);
271 GLUAPI
void GLAPIENTRY
gluOrtho2D( GLdouble left
, GLdouble right
,
272 GLdouble bottom
, GLdouble top
);
275 GLUAPI
void GLAPIENTRY
gluPerspective( GLdouble fovy
, GLdouble aspect
,
276 GLdouble zNear
, GLdouble zFar
);
279 GLUAPI
void GLAPIENTRY
gluPickMatrix( GLdouble x
, GLdouble y
,
280 GLdouble width
, GLdouble height
,
281 const GLint viewport
[4] );
283 GLUAPI GLint GLAPIENTRY
gluProject( GLdouble objx
, GLdouble objy
, GLdouble objz
,
284 const GLdouble modelMatrix
[16],
285 const GLdouble projMatrix
[16],
286 const GLint viewport
[4],
287 GLdouble
*winx
, GLdouble
*winy
,
290 GLUAPI GLint GLAPIENTRY
gluUnProject( GLdouble winx
, GLdouble winy
,
292 const GLdouble modelMatrix
[16],
293 const GLdouble projMatrix
[16],
294 const GLint viewport
[4],
295 GLdouble
*objx
, GLdouble
*objy
,
298 GLUAPI
const GLubyte
* GLAPIENTRY
gluErrorString( GLenum errorCode
);
304 * Mipmapping and image scaling
308 GLUAPI GLint GLAPIENTRY
gluScaleImage( GLenum format
,
309 GLint widthin
, GLint heightin
,
310 GLenum typein
, const void *datain
,
311 GLint widthout
, GLint heightout
,
312 GLenum typeout
, void *dataout
);
314 GLUAPI GLint GLAPIENTRY
gluBuild1DMipmaps( GLenum target
, GLint components
,
315 GLint width
, GLenum format
,
316 GLenum type
, const void *data
);
318 GLUAPI GLint GLAPIENTRY
gluBuild2DMipmaps( GLenum target
, GLint components
,
319 GLint width
, GLint height
,
321 GLenum type
, const void *data
);
331 GLUAPI GLUquadricObj
* GLAPIENTRY
gluNewQuadric( void );
333 GLUAPI
void GLAPIENTRY
gluDeleteQuadric( GLUquadricObj
*state
);
335 GLUAPI
void GLAPIENTRY
gluQuadricDrawStyle( GLUquadricObj
*quadObject
,
338 GLUAPI
void GLAPIENTRY
gluQuadricOrientation( GLUquadricObj
*quadObject
,
339 GLenum orientation
);
341 GLUAPI
void GLAPIENTRY
gluQuadricNormals( GLUquadricObj
*quadObject
,
344 GLUAPI
void GLAPIENTRY
gluQuadricTexture( GLUquadricObj
*quadObject
,
345 GLboolean textureCoords
);
347 GLUAPI
void GLAPIENTRY
gluQuadricCallback( GLUquadricObj
*qobj
,
349 void (GLCALLBACK
*fn
)() );
351 GLUAPI
void GLAPIENTRY
gluCylinder( GLUquadricObj
*qobj
,
355 GLint slices
, GLint stacks
);
357 GLUAPI
void GLAPIENTRY
gluSphere( GLUquadricObj
*qobj
,
358 GLdouble radius
, GLint slices
,
361 GLUAPI
void GLAPIENTRY
gluDisk( GLUquadricObj
*qobj
,
362 GLdouble innerRadius
, GLdouble outerRadius
,
363 GLint slices
, GLint loops
);
365 GLUAPI
void GLAPIENTRY
gluPartialDisk( GLUquadricObj
*qobj
, GLdouble innerRadius
,
366 GLdouble outerRadius
, GLint slices
,
367 GLint loops
, GLdouble startAngle
,
368 GLdouble sweepAngle
);
378 GLUAPI GLUnurbsObj
* GLAPIENTRY
gluNewNurbsRenderer( void );
380 GLUAPI
void GLAPIENTRY
gluDeleteNurbsRenderer( GLUnurbsObj
*nobj
);
382 GLUAPI
void GLAPIENTRY
gluLoadSamplingMatrices( GLUnurbsObj
*nobj
,
383 const GLfloat modelMatrix
[16],
384 const GLfloat projMatrix
[16],
385 const GLint viewport
[4] );
387 GLUAPI
void GLAPIENTRY
gluNurbsProperty( GLUnurbsObj
*nobj
, GLenum property
,
390 GLUAPI
void GLAPIENTRY
gluGetNurbsProperty( GLUnurbsObj
*nobj
, GLenum property
,
393 GLUAPI
void GLAPIENTRY
gluBeginCurve( GLUnurbsObj
*nobj
);
395 GLUAPI
void GLAPIENTRY
gluEndCurve( GLUnurbsObj
* nobj
);
397 GLUAPI
void GLAPIENTRY
gluNurbsCurve( GLUnurbsObj
*nobj
, GLint nknots
,
398 GLfloat
*knot
, GLint stride
,
399 GLfloat
*ctlarray
, GLint order
,
402 GLUAPI
void GLAPIENTRY
gluBeginSurface( GLUnurbsObj
*nobj
);
404 GLUAPI
void GLAPIENTRY
gluEndSurface( GLUnurbsObj
* nobj
);
406 GLUAPI
void GLAPIENTRY
gluNurbsSurface( GLUnurbsObj
*nobj
,
407 GLint sknot_count
, GLfloat
*sknot
,
408 GLint tknot_count
, GLfloat
*tknot
,
409 GLint s_stride
, GLint t_stride
,
411 GLint sorder
, GLint torder
,
414 GLUAPI
void GLAPIENTRY
gluBeginTrim( GLUnurbsObj
*nobj
);
416 GLUAPI
void GLAPIENTRY
gluEndTrim( GLUnurbsObj
*nobj
);
418 GLUAPI
void GLAPIENTRY
gluPwlCurve( GLUnurbsObj
*nobj
, GLint count
,
419 GLfloat
*array
, GLint stride
,
422 GLUAPI
void GLAPIENTRY
gluNurbsCallback( GLUnurbsObj
*nobj
, GLenum which
,
423 void (GLCALLBACK
*fn
)() );
429 * Polygon tessellation
433 GLUAPI GLUtesselator
* GLAPIENTRY
gluNewTess( void );
435 GLUAPI
void GLAPIENTRY
gluDeleteTess( GLUtesselator
*tobj
);
437 GLUAPI
void GLAPIENTRY
gluTessBeginPolygon( GLUtesselator
*tobj
,
438 void *polygon_data
);
440 GLUAPI
void GLAPIENTRY
gluTessBeginContour( GLUtesselator
*tobj
);
442 GLUAPI
void GLAPIENTRY
gluTessVertex( GLUtesselator
*tobj
, GLdouble coords
[3],
445 GLUAPI
void GLAPIENTRY
gluTessEndContour( GLUtesselator
*tobj
);
447 GLUAPI
void GLAPIENTRY
gluTessEndPolygon( GLUtesselator
*tobj
);
449 GLUAPI
void GLAPIENTRY
gluTessProperty( GLUtesselator
*tobj
, GLenum which
,
452 GLUAPI
void GLAPIENTRY
gluTessNormal( GLUtesselator
*tobj
, GLdouble x
,
453 GLdouble y
, GLdouble z
);
455 GLUAPI
void GLAPIENTRY
gluTessCallback( GLUtesselator
*tobj
, GLenum which
,
456 void (GLCALLBACK
*fn
)() );
458 GLUAPI
void GLAPIENTRY
gluGetTessProperty( GLUtesselator
*tobj
, GLenum which
,
463 * Obsolete 1.0 tessellation functions
467 GLUAPI
void GLAPIENTRY
gluBeginPolygon( GLUtesselator
*tobj
);
469 GLUAPI
void GLAPIENTRY
gluNextContour( GLUtesselator
*tobj
, GLenum type
);
471 GLUAPI
void GLAPIENTRY
gluEndPolygon( GLUtesselator
*tobj
);
477 * New functions in GLU 1.1
481 GLUAPI
const GLubyte
* GLAPIENTRY
gluGetString( GLenum name
);
491 GLUAPI GLboolean GLAPIENTRY
492 gluCheckExtension(const char *extName
, const GLubyte
*extString
);
495 GLUAPI GLint GLAPIENTRY
496 gluBuild3DMipmaps( GLenum target
, GLint internalFormat
, GLsizei width
,
497 GLsizei height
, GLsizei depth
, GLenum format
,
498 GLenum type
, const void *data
);
500 GLUAPI GLint GLAPIENTRY
501 gluBuild1DMipmapLevels( GLenum target
, GLint internalFormat
, GLsizei width
,
502 GLenum format
, GLenum type
, GLint level
, GLint base
,
503 GLint max
, const void *data
);
505 GLUAPI GLint GLAPIENTRY
506 gluBuild2DMipmapLevels( GLenum target
, GLint internalFormat
, GLsizei width
,
507 GLsizei height
, GLenum format
, GLenum type
,
508 GLint level
, GLint base
, GLint max
,
511 GLUAPI GLint GLAPIENTRY
512 gluBuild3DMipmapLevels( GLenum target
, GLint internalFormat
, GLsizei width
,
513 GLsizei height
, GLsizei depth
, GLenum format
,
514 GLenum type
, GLint level
, GLint base
, GLint max
,
517 GLUAPI GLint GLAPIENTRY
518 gluUnProject4( GLdouble winx
, GLdouble winy
, GLdouble winz
, GLdouble clipw
,
519 const GLdouble modelMatrix
[16], const GLdouble projMatrix
[16],
520 const GLint viewport
[4], GLclampd zNear
, GLclampd zFar
,
521 GLdouble
*objx
, GLdouble
*objy
, GLdouble
*objz
,
526 #if defined(__BEOS__) || defined(__QUICKDRAW__)
532 #pragma enumsalwaysint reset
533 #if PRAGMA_IMPORT_SUPPORTED
544 #endif /* __glu_h__ */