1 /* $Id: glu.h,v 1.9 1999/09/19 02:03:18 tjump Exp $ */
4 * Mesa 3-D graphics library
6 * Copyright (C) 1995-1999 Brian Paul
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the Free
20 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 * Revision 1.9 1999/09/19 02:03:18 tjump
27 * More Win32 build compliance fixups
29 * Revision 1.8 1999/09/17 12:21:36 brianp
30 * glGetProcAddressEXT changes to accomodate Win32 and non-Win32
32 * Revision 1.7 1999/09/17 02:44:19 tjump
33 * I changed the xxxGetProcAddressEXT function declarations to be more
34 * MSVC friendly. Brianp - could you verify that they describe and operate
35 * as intended on Linux/ETC platforms?
37 * Revision 1.6 1999/09/16 16:54:22 brianp
38 * GLU_EXT_get_proc_address clean-up
40 * Revision 1.5 1999/09/14 03:23:08 gareth
41 * Fixed GLUtriangulatorObj again (spelling).
43 * Revision 1.4 1999/09/14 01:32:58 gareth
44 * Fixed definition of GLUtriangluatorObj for 1.3 tessellator.
46 * Revision 1.3 1999/09/11 11:34:21 brianp
47 * added GLU_EXT_get_proc_address
49 * Revision 1.2 1999/09/10 02:08:18 gareth
50 * Added GLU 1.3 tessellation (except winding rule code).
52 * Revision 1.1.1.1 1999/08/19 00:55:40 jtg
55 * Revision 3.6 1999/02/14 03:39:45 brianp
58 * Revision 3.5 1999/01/03 03:02:55 brianp
59 * now using GLAPI and GLAPIENTRY keywords, misc Windows changes (Ted Jump)
61 * Revision 3.4 1998/12/01 02:34:27 brianp
62 * applied Mark Kilgard's patches from November 30, 1998
64 * Revision 3.3 1998/11/17 01:14:02 brianp
65 * minor changes for OpenStep compilation (pete@ohm.york.ac.uk)
67 * Revision 3.2 1998/07/26 01:36:27 brianp
68 * changes for Windows compilation per Ted Jump
70 * Revision 3.1 1998/06/23 00:33:08 brianp
71 * added some WIN32 APIENTRY, CALLBACK stuff (Eric Lassauge)
73 * Revision 3.0 1998/02/20 05:06:01 brianp
83 #if defined(USE_MGL_NAMESPACE)
84 #include "glu_mangle.h"
95 /* to facilitate clean DLL building ... */
96 #if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN32__))
97 # if defined(_MSC_VER) && defined(BUILD_GLU32) /* tag specify we're building mesa as a DLL */
98 # define GLUAPI __declspec(dllexport)
99 # elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
100 # define GLUAPI __declspec(dllimport)
101 # else /* for use with static link lib build of Win32 edition only */
102 # define GLUAPI extern
103 # endif /* _STATIC_MESA support */
105 # define GLUAPI extern
106 #endif /* WIN32 / CYGWIN32 bracket */
109 #pragma enumsalwaysint on
110 #if PRAGMA_IMPORT_SUPPORTED
116 #define GLU_VERSION_1_1 1
117 #define GLU_VERSION_1_2 1
120 #define GLU_TRUE GL_TRUE
121 #define GLU_FALSE GL_FALSE
130 /* Quadric draw styles */
134 GLU_SILHOUETTE
= 100013,
136 /* Quadric orientation */
137 GLU_OUTSIDE
= 100020,
141 GLU_TESS_BEGIN
= 100100,
142 GLU_TESS_VERTEX
= 100101,
143 GLU_TESS_END
= 100102,
144 GLU_TESS_ERROR
= 100103,
145 GLU_TESS_EDGE_FLAG
= 100104,
146 GLU_TESS_COMBINE
= 100105,
148 GLU_TESS_BEGIN_DATA
= 100106,
149 GLU_TESS_VERTEX_DATA
= 100107,
150 GLU_TESS_END_DATA
= 100108,
151 GLU_TESS_ERROR_DATA
= 100109,
152 GLU_TESS_EDGE_FLAG_DATA
= 100110,
153 GLU_TESS_COMBINE_DATA
= 100111,
156 GLU_TESS_WINDING_ODD
= 100130,
157 GLU_TESS_WINDING_NONZERO
= 100131,
158 GLU_TESS_WINDING_POSITIVE
= 100132,
159 GLU_TESS_WINDING_NEGATIVE
= 100133,
160 GLU_TESS_WINDING_ABS_GEQ_TWO
= 100134,
162 /* Tessellation properties */
163 GLU_TESS_WINDING_RULE
= 100140,
164 GLU_TESS_BOUNDARY_ONLY
= 100141,
165 GLU_TESS_TOLERANCE
= 100142,
167 /* Tessellation errors */
168 GLU_TESS_ERROR1
= 100151, /* Missing gluBeginPolygon */
169 GLU_TESS_ERROR2
= 100152, /* Missing gluBeginContour */
170 GLU_TESS_ERROR3
= 100153, /* Missing gluEndPolygon */
171 GLU_TESS_ERROR4
= 100154, /* Missing gluEndContour */
172 GLU_TESS_ERROR5
= 100155, /* */
173 GLU_TESS_ERROR6
= 100156, /* */
174 GLU_TESS_ERROR7
= 100157, /* */
175 GLU_TESS_ERROR8
= 100158, /* */
178 GLU_AUTO_LOAD_MATRIX
= 100200,
179 GLU_CULLING
= 100201,
180 GLU_PARAMETRIC_TOLERANCE
= 100202,
181 GLU_SAMPLING_TOLERANCE
= 100203,
182 GLU_DISPLAY_MODE
= 100204,
183 GLU_SAMPLING_METHOD
= 100205,
187 GLU_PATH_LENGTH
= 100215,
188 GLU_PARAMETRIC_ERROR
= 100216,
189 GLU_DOMAIN_DISTANCE
= 100217,
191 GLU_MAP1_TRIM_2
= 100210,
192 GLU_MAP1_TRIM_3
= 100211,
194 GLU_OUTLINE_POLYGON
= 100240,
195 GLU_OUTLINE_PATCH
= 100241,
197 GLU_NURBS_ERROR1
= 100251, /* spline order un-supported */
198 GLU_NURBS_ERROR2
= 100252, /* too few knots */
199 GLU_NURBS_ERROR3
= 100253, /* valid knot range is empty */
200 GLU_NURBS_ERROR4
= 100254, /* decreasing knot sequence */
201 GLU_NURBS_ERROR5
= 100255, /* knot multiplicity > spline order */
202 GLU_NURBS_ERROR6
= 100256, /* endcurve() must follow bgncurve() */
203 GLU_NURBS_ERROR7
= 100257, /* bgncurve() must precede endcurve() */
204 GLU_NURBS_ERROR8
= 100258, /* ctrlarray or knot vector is NULL */
205 GLU_NURBS_ERROR9
= 100259, /* can't draw pwlcurves */
206 GLU_NURBS_ERROR10
= 100260, /* missing gluNurbsCurve() */
207 GLU_NURBS_ERROR11
= 100261, /* missing gluNurbsSurface() */
208 GLU_NURBS_ERROR12
= 100262, /* endtrim() must precede endsurface() */
209 GLU_NURBS_ERROR13
= 100263, /* bgnsurface() must precede endsurface() */
210 GLU_NURBS_ERROR14
= 100264, /* curve of improper type passed as trim curve */
211 GLU_NURBS_ERROR15
= 100265, /* bgnsurface() must precede bgntrim() */
212 GLU_NURBS_ERROR16
= 100266, /* endtrim() must follow bgntrim() */
213 GLU_NURBS_ERROR17
= 100267, /* bgntrim() must precede endtrim()*/
214 GLU_NURBS_ERROR18
= 100268, /* invalid or missing trim curve*/
215 GLU_NURBS_ERROR19
= 100269, /* bgntrim() must precede pwlcurve() */
216 GLU_NURBS_ERROR20
= 100270, /* pwlcurve referenced twice*/
217 GLU_NURBS_ERROR21
= 100271, /* pwlcurve and nurbscurve mixed */
218 GLU_NURBS_ERROR22
= 100272, /* improper usage of trim data type */
219 GLU_NURBS_ERROR23
= 100273, /* nurbscurve referenced twice */
220 GLU_NURBS_ERROR24
= 100274, /* nurbscurve and pwlcurve mixed */
221 GLU_NURBS_ERROR25
= 100275, /* nurbssurface referenced twice */
222 GLU_NURBS_ERROR26
= 100276, /* invalid property */
223 GLU_NURBS_ERROR27
= 100277, /* endsurface() must follow bgnsurface() */
224 GLU_NURBS_ERROR28
= 100278, /* intersecting or misoriented trim curves */
225 GLU_NURBS_ERROR29
= 100279, /* intersecting trim curves */
226 GLU_NURBS_ERROR30
= 100280, /* UNUSED */
227 GLU_NURBS_ERROR31
= 100281, /* unconnected trim curves */
228 GLU_NURBS_ERROR32
= 100282, /* unknown knot error */
229 GLU_NURBS_ERROR33
= 100283, /* negative vertex count encountered */
230 GLU_NURBS_ERROR34
= 100284, /* negative byte-stride */
231 GLU_NURBS_ERROR35
= 100285, /* unknown type descriptor */
232 GLU_NURBS_ERROR36
= 100286, /* null control point reference */
233 GLU_NURBS_ERROR37
= 100287, /* duplicate point on pwlcurve */
236 GLU_INVALID_ENUM
= 100900,
237 GLU_INVALID_VALUE
= 100901,
238 GLU_OUT_OF_MEMORY
= 100902,
239 GLU_INCOMPATIBLE_GL_VERSION
= 100903,
242 GLU_VERSION
= 100800,
243 GLU_EXTENSIONS
= 100801,
245 /*** GLU 1.0 tessellation - obsolete! ***/
250 GLU_INTERIOR
= 100122,
251 GLU_EXTERIOR
= 100123,
252 GLU_UNKNOWN
= 100124,
255 GLU_BEGIN
= GLU_TESS_BEGIN
,
256 GLU_VERTEX
= GLU_TESS_VERTEX
,
257 GLU_END
= GLU_TESS_END
,
258 GLU_ERROR
= GLU_TESS_ERROR
,
259 GLU_EDGE_FLAG
= GLU_TESS_EDGE_FLAG
264 * These are the GLU 1.1 typedefs. GLU 1.3 has different ones!
266 #if defined(__BEOS__)
267 /* The BeOS does something funky and makes these typedefs in one
268 * of its system headers.
271 typedef struct GLUquadric GLUquadricObj
;
272 typedef struct GLUnurbs GLUnurbsObj
;
274 /* FIXME: We need to implement the other 1.3 typedefs - GH */
275 typedef struct GLUtesselator GLUtesselator
;
276 typedef GLUtesselator GLUtriangulatorObj
;
281 #if defined(__BEOS__) || defined(__QUICKDRAW__)
288 * Miscellaneous functions
292 GLUAPI
void GLAPIENTRY
gluLookAt( GLdouble eyex
, GLdouble eyey
, GLdouble eyez
,
293 GLdouble centerx
, GLdouble centery
,
295 GLdouble upx
, GLdouble upy
, GLdouble upz
);
298 GLUAPI
void GLAPIENTRY
gluOrtho2D( GLdouble left
, GLdouble right
,
299 GLdouble bottom
, GLdouble top
);
302 GLUAPI
void GLAPIENTRY
gluPerspective( GLdouble fovy
, GLdouble aspect
,
303 GLdouble zNear
, GLdouble zFar
);
306 GLUAPI
void GLAPIENTRY
gluPickMatrix( GLdouble x
, GLdouble y
,
307 GLdouble width
, GLdouble height
,
308 const GLint viewport
[4] );
310 GLUAPI GLint GLAPIENTRY
gluProject( GLdouble objx
, GLdouble objy
, GLdouble objz
,
311 const GLdouble modelMatrix
[16],
312 const GLdouble projMatrix
[16],
313 const GLint viewport
[4],
314 GLdouble
*winx
, GLdouble
*winy
,
317 GLUAPI GLint GLAPIENTRY
gluUnProject( GLdouble winx
, GLdouble winy
,
319 const GLdouble modelMatrix
[16],
320 const GLdouble projMatrix
[16],
321 const GLint viewport
[4],
322 GLdouble
*objx
, GLdouble
*objy
,
325 GLUAPI
const GLubyte
* GLAPIENTRY
gluErrorString( GLenum errorCode
);
331 * Mipmapping and image scaling
335 GLUAPI GLint GLAPIENTRY
gluScaleImage( GLenum format
,
336 GLint widthin
, GLint heightin
,
337 GLenum typein
, const void *datain
,
338 GLint widthout
, GLint heightout
,
339 GLenum typeout
, void *dataout
);
341 GLUAPI GLint GLAPIENTRY
gluBuild1DMipmaps( GLenum target
, GLint components
,
342 GLint width
, GLenum format
,
343 GLenum type
, const void *data
);
345 GLUAPI GLint GLAPIENTRY
gluBuild2DMipmaps( GLenum target
, GLint components
,
346 GLint width
, GLint height
,
348 GLenum type
, const void *data
);
358 GLUAPI GLUquadricObj
* GLAPIENTRY
gluNewQuadric( void );
360 GLUAPI
void GLAPIENTRY
gluDeleteQuadric( GLUquadricObj
*state
);
362 GLUAPI
void GLAPIENTRY
gluQuadricDrawStyle( GLUquadricObj
*quadObject
,
365 GLUAPI
void GLAPIENTRY
gluQuadricOrientation( GLUquadricObj
*quadObject
,
366 GLenum orientation
);
368 GLUAPI
void GLAPIENTRY
gluQuadricNormals( GLUquadricObj
*quadObject
,
371 GLUAPI
void GLAPIENTRY
gluQuadricTexture( GLUquadricObj
*quadObject
,
372 GLboolean textureCoords
);
374 GLUAPI
void GLAPIENTRY
gluQuadricCallback( GLUquadricObj
*qobj
,
375 GLenum which
, void (GLCALLBACK
*fn
)() );
377 GLUAPI
void GLAPIENTRY
gluCylinder( GLUquadricObj
*qobj
,
381 GLint slices
, GLint stacks
);
383 GLUAPI
void GLAPIENTRY
gluSphere( GLUquadricObj
*qobj
,
384 GLdouble radius
, GLint slices
, GLint stacks
);
386 GLUAPI
void GLAPIENTRY
gluDisk( GLUquadricObj
*qobj
,
387 GLdouble innerRadius
, GLdouble outerRadius
,
388 GLint slices
, GLint loops
);
390 GLUAPI
void GLAPIENTRY
gluPartialDisk( GLUquadricObj
*qobj
, GLdouble innerRadius
,
391 GLdouble outerRadius
, GLint slices
,
392 GLint loops
, GLdouble startAngle
,
393 GLdouble sweepAngle
);
403 GLUAPI GLUnurbsObj
* GLAPIENTRY
gluNewNurbsRenderer( void );
405 GLUAPI
void GLAPIENTRY
gluDeleteNurbsRenderer( GLUnurbsObj
*nobj
);
407 GLUAPI
void GLAPIENTRY
gluLoadSamplingMatrices( GLUnurbsObj
*nobj
,
408 const GLfloat modelMatrix
[16],
409 const GLfloat projMatrix
[16],
410 const GLint viewport
[4] );
412 GLUAPI
void GLAPIENTRY
gluNurbsProperty( GLUnurbsObj
*nobj
, GLenum property
,
415 GLUAPI
void GLAPIENTRY
gluGetNurbsProperty( GLUnurbsObj
*nobj
, GLenum property
,
418 GLUAPI
void GLAPIENTRY
gluBeginCurve( GLUnurbsObj
*nobj
);
420 GLUAPI
void GLAPIENTRY
gluEndCurve( GLUnurbsObj
* nobj
);
422 GLUAPI
void GLAPIENTRY
gluNurbsCurve( GLUnurbsObj
*nobj
, GLint nknots
,
423 GLfloat
*knot
, GLint stride
,
424 GLfloat
*ctlarray
, GLint order
,
427 GLUAPI
void GLAPIENTRY
gluBeginSurface( GLUnurbsObj
*nobj
);
429 GLUAPI
void GLAPIENTRY
gluEndSurface( GLUnurbsObj
* nobj
);
431 GLUAPI
void GLAPIENTRY
gluNurbsSurface( GLUnurbsObj
*nobj
,
432 GLint sknot_count
, GLfloat
*sknot
,
433 GLint tknot_count
, GLfloat
*tknot
,
434 GLint s_stride
, GLint t_stride
,
436 GLint sorder
, GLint torder
,
439 GLUAPI
void GLAPIENTRY
gluBeginTrim( GLUnurbsObj
*nobj
);
441 GLUAPI
void GLAPIENTRY
gluEndTrim( GLUnurbsObj
*nobj
);
443 GLUAPI
void GLAPIENTRY
gluPwlCurve( GLUnurbsObj
*nobj
, GLint count
,
444 GLfloat
*array
, GLint stride
, GLenum type
);
446 GLUAPI
void GLAPIENTRY
gluNurbsCallback( GLUnurbsObj
*nobj
, GLenum which
,
447 void (GLCALLBACK
*fn
)() );
453 * Polygon tessellation
457 GLUAPI GLUtesselator
* GLAPIENTRY
gluNewTess( void );
459 GLUAPI
void GLAPIENTRY
gluDeleteTess( GLUtesselator
*tobj
);
461 GLUAPI
void GLAPIENTRY
gluTessBeginPolygon( GLUtesselator
*tobj
,
462 void *polygon_data
);
464 GLUAPI
void GLAPIENTRY
gluTessBeginContour( GLUtesselator
*tobj
);
466 GLUAPI
void GLAPIENTRY
gluTessVertex( GLUtesselator
*tobj
, GLdouble coords
[3],
469 GLUAPI
void GLAPIENTRY
gluTessEndContour( GLUtesselator
*tobj
);
471 GLUAPI
void GLAPIENTRY
gluTessEndPolygon( GLUtesselator
*tobj
);
473 GLUAPI
void GLAPIENTRY
gluTessProperty( GLUtesselator
*tobj
, GLenum which
,
476 GLUAPI
void GLAPIENTRY
gluTessNormal( GLUtesselator
*tobj
, GLdouble x
,
477 GLdouble y
, GLdouble z
);
479 GLUAPI
void GLAPIENTRY
gluTessCallback( GLUtesselator
*tobj
, GLenum which
,
480 void (GLCALLBACK
*fn
)() );
482 GLUAPI
void GLAPIENTRY
gluGetTessProperty( GLUtesselator
*tobj
, GLenum which
,
487 * Obsolete 1.0 tessellation functions
491 GLUAPI
void GLAPIENTRY
gluBeginPolygon( GLUtesselator
*tobj
);
493 GLUAPI
void GLAPIENTRY
gluNextContour( GLUtesselator
*tobj
, GLenum type
);
495 GLUAPI
void GLAPIENTRY
gluEndPolygon( GLUtesselator
*tobj
);
501 * New functions in GLU 1.1
505 GLUAPI
const GLubyte
* GLAPIENTRY
gluGetString( GLenum name
);
510 * GLU_EXT_get_proc_address extension
513 * WARNING: this extension is not finalized yet! Do not release code
514 * which uses this extension yet! It may change!
516 #define GLU_EXT_get_proc_address 1
517 #ifdef GLU_EXT_get_proc_address
518 GLUAPI
void (GLAPIENTRY
*glGetProcAddressEXT(const GLubyte
*procName
))();
522 #if defined(__BEOS__) || defined(__QUICKDRAW__)
528 #pragma enumsalwaysint reset
529 #if PRAGMA_IMPORT_SUPPORTED