added GLU 1.3 functions
[mesa.git] / include / GL / glu.h
1 /* $Id: glu.h,v 1.18 1999/11/23 22:41:10 brianp Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.3
6 *
7 * Copyright (C) 1995-1999 Brian Paul
8 *
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.
13 *
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.
18 *
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.
22 */
23
24
25 #ifndef __glu_h__
26 #define __glu_h__
27
28
29 #if defined(USE_MGL_NAMESPACE)
30 #include "glu_mangle.h"
31 #endif
32
33 #include "GL/gl.h"
34
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40
41 /* to facilitate clean DLL building ... */
42 #if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN32__))
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 #else
51 # define GLUAPI extern
52 #endif /* WIN32 / CYGWIN32 bracket */
53
54 #ifdef macintosh
55 #pragma enumsalwaysint on
56 #if PRAGMA_IMPORT_SUPPORTED
57 #pragma import on
58 #endif
59 #endif
60
61 #ifndef GLUAPI
62 #define GLUAPI
63 #endif
64
65 #ifndef GLAPIENTRY
66 #define GLAPIENTRY
67 #endif
68
69 #ifndef GLCALLBACK
70 #define GLCALLBACK
71 #endif
72
73
74 #define GLU_VERSION_1_1 1
75 #define GLU_VERSION_1_2 1
76
77
78 #define GLU_TRUE 1
79 #define GLU_FALSE 0
80
81
82 /* Normal vectors */
83 #define GLU_SMOOTH 100000
84 #define GLU_FLAT 100001
85 #define GLU_NONE 100002
86
87 /* Quadric draw styles */
88 #define GLU_POINT 100010
89 #define GLU_LINE 100011
90 #define GLU_FILL 100012
91 #define GLU_SILHOUETTE 100013
92
93 /* Quadric orientation */
94 #define GLU_OUTSIDE 100020
95 #define GLU_INSIDE 100021
96
97 /* Tessellator */
98 #define GLU_TESS_BEGIN 100100
99 #define GLU_TESS_VERTEX 100101
100 #define GLU_TESS_END 100102
101 #define GLU_TESS_ERROR 100103
102 #define GLU_TESS_EDGE_FLAG 100104
103 #define GLU_TESS_COMBINE 100105
104
105 #define GLU_TESS_BEGIN_DATA 100106
106 #define GLU_TESS_VERTEX_DATA 100107
107 #define GLU_TESS_END_DATA 100108
108 #define GLU_TESS_ERROR_DATA 100109
109 #define GLU_TESS_EDGE_FLAG_DATA 100110
110 #define GLU_TESS_COMBINE_DATA 100111
111
112 /* Winding rules */
113 #define GLU_TESS_WINDING_ODD 100130
114 #define GLU_TESS_WINDING_NONZERO 100131
115 #define GLU_TESS_WINDING_POSITIVE 100132
116 #define GLU_TESS_WINDING_NEGATIVE 100133
117 #define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
118
119 /* Tessellation properties */
120 #define GLU_TESS_WINDING_RULE 100140
121 #define GLU_TESS_BOUNDARY_ONLY 100141
122 #define GLU_TESS_TOLERANCE 100142
123
124 /* Tessellation errors */
125 #define GLU_TESS_ERROR1 100151 /* Missing gluBeginPolygon */
126 #define GLU_TESS_ERROR2 100152 /* Missing gluBeginContour */
127 #define GLU_TESS_ERROR3 100153 /* Missing gluEndPolygon */
128 #define GLU_TESS_ERROR4 100154 /* Missing gluEndContour */
129 #define GLU_TESS_ERROR5 100155 /* */
130 #define GLU_TESS_ERROR6 100156 /* */
131 #define GLU_TESS_ERROR7 100157 /* */
132 #define GLU_TESS_ERROR8 100158 /* */
133
134 /* NURBS */
135 #define GLU_AUTO_LOAD_MATRIX 100200
136 #define GLU_CULLING 100201
137 #define GLU_PARAMETRIC_TOLERANCE 100202
138 #define GLU_SAMPLING_TOLERANCE 100203
139 #define GLU_DISPLAY_MODE 100204
140 #define GLU_SAMPLING_METHOD 100205
141 #define GLU_U_STEP 100206
142 #define GLU_V_STEP 100207
143
144 #define GLU_PATH_LENGTH 100215
145 #define GLU_PARAMETRIC_ERROR 100216
146 #define GLU_DOMAIN_DISTANCE 100217
147
148 #define GLU_MAP1_TRIM_2 100210
149 #define GLU_MAP1_TRIM_3 100211
150
151 #define GLU_OUTLINE_POLYGON 100240
152 #define GLU_OUTLINE_PATCH 100241
153
154 #define GLU_NURBS_ERROR1 100251 /* spline order un-supported */
155 #define GLU_NURBS_ERROR2 100252 /* too few knots */
156 #define GLU_NURBS_ERROR3 100253 /* valid knot range is empty */
157 #define GLU_NURBS_ERROR4 100254 /* decreasing knot sequence */
158 #define GLU_NURBS_ERROR5 100255 /* knot multiplicity > spline order */
159 #define GLU_NURBS_ERROR6 100256 /* endcurve() must follow bgncurve() */
160 #define GLU_NURBS_ERROR7 100257 /* bgncurve() must precede endcurve() */
161 #define GLU_NURBS_ERROR8 100258 /* ctrlarray or knot vector is NULL */
162 #define GLU_NURBS_ERROR9 100259 /* can't draw pwlcurves */
163 #define GLU_NURBS_ERROR10 100260 /* missing gluNurbsCurve() */
164 #define GLU_NURBS_ERROR11 100261 /* missing gluNurbsSurface() */
165 #define GLU_NURBS_ERROR12 100262 /* endtrim() must precede endsurface() */
166 #define GLU_NURBS_ERROR13 100263 /* bgnsurface() must precede endsurface() */
167 #define GLU_NURBS_ERROR14 100264 /* curve of improper type passed as trim curve */
168 #define GLU_NURBS_ERROR15 100265 /* bgnsurface() must precede bgntrim() */
169 #define GLU_NURBS_ERROR16 100266 /* endtrim() must follow bgntrim() */
170 #define GLU_NURBS_ERROR17 100267 /* bgntrim() must precede endtrim()*/
171 #define GLU_NURBS_ERROR18 100268 /* invalid or missing trim curve*/
172 #define GLU_NURBS_ERROR19 100269 /* bgntrim() must precede pwlcurve() */
173 #define GLU_NURBS_ERROR20 100270 /* pwlcurve referenced twice*/
174 #define GLU_NURBS_ERROR21 100271 /* pwlcurve and nurbscurve mixed */
175 #define GLU_NURBS_ERROR22 100272 /* improper usage of trim data type */
176 #define GLU_NURBS_ERROR23 100273 /* nurbscurve referenced twice */
177 #define GLU_NURBS_ERROR24 100274 /* nurbscurve and pwlcurve mixed */
178 #define GLU_NURBS_ERROR25 100275 /* nurbssurface referenced twice */
179 #define GLU_NURBS_ERROR26 100276 /* invalid property */
180 #define GLU_NURBS_ERROR27 100277 /* endsurface() must follow bgnsurface() */
181 #define GLU_NURBS_ERROR28 100278 /* intersecting or misoriented trim curves */
182 #define GLU_NURBS_ERROR29 100279 /* intersecting trim curves */
183 #define GLU_NURBS_ERROR30 100280 /* UNUSED */
184 #define GLU_NURBS_ERROR31 100281 /* unconnected trim curves */
185 #define GLU_NURBS_ERROR32 100282 /* unknown knot error */
186 #define GLU_NURBS_ERROR33 100283 /* negative vertex count encountered */
187 #define GLU_NURBS_ERROR34 100284 /* negative byte-stride */
188 #define GLU_NURBS_ERROR35 100285 /* unknown type descriptor */
189 #define GLU_NURBS_ERROR36 100286 /* null control point reference */
190 #define GLU_NURBS_ERROR37 100287 /* duplicate point on pwlcurve */
191
192 /* GLU 1.3 and later */
193 #define GLU_NURBS_MODE ?
194
195
196 /* Errors */
197 #define GLU_INVALID_ENUM 100900
198 #define GLU_INVALID_VALUE 100901
199 #define GLU_OUT_OF_MEMORY 100902
200 #define GLU_INCOMPATIBLE_GL_VERSION 100903
201
202 /* GLU 1.1 and later */
203 #define GLU_VERSION 100800
204 #define GLU_EXTENSIONS 100801
205
206
207
208 /*** GLU 1.0 tessellation - obsolete! ***/
209
210 /* Contour types */
211 #define GLU_CW 100120
212 #define GLU_CCW 100121
213 #define GLU_INTERIOR 100122
214 #define GLU_EXTERIOR 100123
215 #define GLU_UNKNOWN 100124
216
217 /* Tessellator */
218 #define GLU_BEGIN GLU_TESS_BEGIN
219 #define GLU_VERTEX GLU_TESS_VERTEX
220 #define GLU_END GLU_TESS_END
221 #define GLU_ERROR GLU_TESS_ERROR
222 #define GLU_EDGE_FLAG GLU_TESS_EDGE_FLAG
223
224
225 /*
226 * These are the GLU 1.1 typedefs. GLU 1.3 has different ones!
227 */
228 #if defined(__BEOS__)
229 /* The BeOS does something funky and makes these typedefs in one
230 * of its system headers.
231 */
232 #else
233 typedef struct GLUquadric GLUquadricObj;
234 typedef struct GLUnurbs GLUnurbsObj;
235
236 /* FIXME: We need to implement the other 1.3 typedefs - GH */
237 typedef struct GLUtesselator GLUtesselator;
238 typedef GLUtesselator GLUtriangulatorObj;
239 #endif
240
241
242
243 #if defined(__BEOS__) || defined(__QUICKDRAW__)
244 #pragma export on
245 #endif
246
247
248 /*
249 *
250 * Miscellaneous functions
251 *
252 */
253
254 GLUAPI void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
255 GLdouble centerx, GLdouble centery,
256 GLdouble centerz,
257 GLdouble upx, GLdouble upy, GLdouble upz );
258
259
260 GLUAPI void GLAPIENTRY gluOrtho2D( GLdouble left, GLdouble right,
261 GLdouble bottom, GLdouble top );
262
263
264 GLUAPI void GLAPIENTRY gluPerspective( GLdouble fovy, GLdouble aspect,
265 GLdouble zNear, GLdouble zFar );
266
267
268 GLUAPI void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y,
269 GLdouble width, GLdouble height,
270 const GLint viewport[4] );
271
272 GLUAPI GLint GLAPIENTRY gluProject( GLdouble objx, GLdouble objy, GLdouble objz,
273 const GLdouble modelMatrix[16],
274 const GLdouble projMatrix[16],
275 const GLint viewport[4],
276 GLdouble *winx, GLdouble *winy,
277 GLdouble *winz );
278
279 GLUAPI GLint GLAPIENTRY gluUnProject( GLdouble winx, GLdouble winy,
280 GLdouble winz,
281 const GLdouble modelMatrix[16],
282 const GLdouble projMatrix[16],
283 const GLint viewport[4],
284 GLdouble *objx, GLdouble *objy,
285 GLdouble *objz );
286
287 GLUAPI const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode );
288
289
290
291 /*
292 *
293 * Mipmapping and image scaling
294 *
295 */
296
297 GLUAPI GLint GLAPIENTRY gluScaleImage( GLenum format,
298 GLint widthin, GLint heightin,
299 GLenum typein, const void *datain,
300 GLint widthout, GLint heightout,
301 GLenum typeout, void *dataout );
302
303 GLUAPI GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
304 GLint width, GLenum format,
305 GLenum type, const void *data );
306
307 GLUAPI GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
308 GLint width, GLint height,
309 GLenum format,
310 GLenum type, const void *data );
311
312
313
314 /*
315 *
316 * Quadrics
317 *
318 */
319
320 GLUAPI GLUquadricObj* GLAPIENTRY gluNewQuadric( void );
321
322 GLUAPI void GLAPIENTRY gluDeleteQuadric( GLUquadricObj *state );
323
324 GLUAPI void GLAPIENTRY gluQuadricDrawStyle( GLUquadricObj *quadObject,
325 GLenum drawStyle );
326
327 GLUAPI void GLAPIENTRY gluQuadricOrientation( GLUquadricObj *quadObject,
328 GLenum orientation );
329
330 GLUAPI void GLAPIENTRY gluQuadricNormals( GLUquadricObj *quadObject,
331 GLenum normals );
332
333 GLUAPI void GLAPIENTRY gluQuadricTexture( GLUquadricObj *quadObject,
334 GLboolean textureCoords );
335
336 GLUAPI void GLAPIENTRY gluQuadricCallback( GLUquadricObj *qobj,
337 GLenum which,
338 void (GLCALLBACK *fn)() );
339
340 GLUAPI void GLAPIENTRY gluCylinder( GLUquadricObj *qobj,
341 GLdouble baseRadius,
342 GLdouble topRadius,
343 GLdouble height,
344 GLint slices, GLint stacks );
345
346 GLUAPI void GLAPIENTRY gluSphere( GLUquadricObj *qobj,
347 GLdouble radius, GLint slices,
348 GLint stacks );
349
350 GLUAPI void GLAPIENTRY gluDisk( GLUquadricObj *qobj,
351 GLdouble innerRadius, GLdouble outerRadius,
352 GLint slices, GLint loops );
353
354 GLUAPI void GLAPIENTRY gluPartialDisk( GLUquadricObj *qobj, GLdouble innerRadius,
355 GLdouble outerRadius, GLint slices,
356 GLint loops, GLdouble startAngle,
357 GLdouble sweepAngle );
358
359
360
361 /*
362 *
363 * Nurbs
364 *
365 */
366
367 GLUAPI GLUnurbsObj* GLAPIENTRY gluNewNurbsRenderer( void );
368
369 GLUAPI void GLAPIENTRY gluDeleteNurbsRenderer( GLUnurbsObj *nobj );
370
371 GLUAPI void GLAPIENTRY gluLoadSamplingMatrices( GLUnurbsObj *nobj,
372 const GLfloat modelMatrix[16],
373 const GLfloat projMatrix[16],
374 const GLint viewport[4] );
375
376 GLUAPI void GLAPIENTRY gluNurbsProperty( GLUnurbsObj *nobj, GLenum property,
377 GLfloat value );
378
379 GLUAPI void GLAPIENTRY gluGetNurbsProperty( GLUnurbsObj *nobj, GLenum property,
380 GLfloat *value );
381
382 GLUAPI void GLAPIENTRY gluBeginCurve( GLUnurbsObj *nobj );
383
384 GLUAPI void GLAPIENTRY gluEndCurve( GLUnurbsObj * nobj );
385
386 GLUAPI void GLAPIENTRY gluNurbsCurve( GLUnurbsObj *nobj, GLint nknots,
387 GLfloat *knot, GLint stride,
388 GLfloat *ctlarray, GLint order,
389 GLenum type );
390
391 GLUAPI void GLAPIENTRY gluBeginSurface( GLUnurbsObj *nobj );
392
393 GLUAPI void GLAPIENTRY gluEndSurface( GLUnurbsObj * nobj );
394
395 GLUAPI void GLAPIENTRY gluNurbsSurface( GLUnurbsObj *nobj,
396 GLint sknot_count, GLfloat *sknot,
397 GLint tknot_count, GLfloat *tknot,
398 GLint s_stride, GLint t_stride,
399 GLfloat *ctlarray,
400 GLint sorder, GLint torder,
401 GLenum type );
402
403 GLUAPI void GLAPIENTRY gluBeginTrim( GLUnurbsObj *nobj );
404
405 GLUAPI void GLAPIENTRY gluEndTrim( GLUnurbsObj *nobj );
406
407 GLUAPI void GLAPIENTRY gluPwlCurve( GLUnurbsObj *nobj, GLint count,
408 GLfloat *array, GLint stride,
409 GLenum type );
410
411 GLUAPI void GLAPIENTRY gluNurbsCallback( GLUnurbsObj *nobj, GLenum which,
412 void (GLCALLBACK *fn)() );
413
414
415
416 /*
417 *
418 * Polygon tessellation
419 *
420 */
421
422 GLUAPI GLUtesselator* GLAPIENTRY gluNewTess( void );
423
424 GLUAPI void GLAPIENTRY gluDeleteTess( GLUtesselator *tobj );
425
426 GLUAPI void GLAPIENTRY gluTessBeginPolygon( GLUtesselator *tobj,
427 void *polygon_data );
428
429 GLUAPI void GLAPIENTRY gluTessBeginContour( GLUtesselator *tobj );
430
431 GLUAPI void GLAPIENTRY gluTessVertex( GLUtesselator *tobj, GLdouble coords[3],
432 void *vertex_data );
433
434 GLUAPI void GLAPIENTRY gluTessEndContour( GLUtesselator *tobj );
435
436 GLUAPI void GLAPIENTRY gluTessEndPolygon( GLUtesselator *tobj );
437
438 GLUAPI void GLAPIENTRY gluTessProperty( GLUtesselator *tobj, GLenum which,
439 GLdouble value );
440
441 GLUAPI void GLAPIENTRY gluTessNormal( GLUtesselator *tobj, GLdouble x,
442 GLdouble y, GLdouble z );
443
444 GLUAPI void GLAPIENTRY gluTessCallback( GLUtesselator *tobj, GLenum which,
445 void (GLCALLBACK *fn)() );
446
447 GLUAPI void GLAPIENTRY gluGetTessProperty( GLUtesselator *tobj, GLenum which,
448 GLdouble *value );
449
450 /*
451 *
452 * Obsolete 1.0 tessellation functions
453 *
454 */
455
456 GLUAPI void GLAPIENTRY gluBeginPolygon( GLUtesselator *tobj );
457
458 GLUAPI void GLAPIENTRY gluNextContour( GLUtesselator *tobj, GLenum type );
459
460 GLUAPI void GLAPIENTRY gluEndPolygon( GLUtesselator *tobj );
461
462
463
464 /*
465 *
466 * New functions in GLU 1.1
467 *
468 */
469
470 GLUAPI const GLubyte* GLAPIENTRY gluGetString( GLenum name );
471
472
473
474 /*
475 *
476 * GLU 1.3 functions
477 *
478 */
479
480 GLUAPI GLboolean GLAPIENTRY
481 gluCheckExtension(const char *extName, const GLubyte *extString);
482
483
484 GLUAPI GLint GLAPIENTRY
485 gluBuild3DMipmaps( GLenum target, GLint internalFormat, GLsizei width,
486 GLsizei height, GLsizei depth, GLenum format,
487 GLenum type, const void *data );
488
489 GLUAPI GLint GLAPIENTRY
490 gluBuild1DMipmapLevels( GLenum target, GLint internalFormat, GLsizei width,
491 GLenum format, GLenum type, GLint level, GLint base,
492 GLint max, const void *data );
493
494 GLUAPI GLint GLAPIENTRY
495 gluBuild2DMipmapLevels( GLenum target, GLint internalFormat, GLsizei width,
496 GLsizei height, GLenum format, GLenum type,
497 GLint level, GLint base, GLint max,
498 const void *data );
499
500 GLUAPI GLint GLAPIENTRY
501 gluBuild3DMipmapLevels( GLenum target, GLint internalFormat, GLsizei width,
502 GLsizei height, GLsizei depth, GLenum format,
503 GLenum type, GLint level, GLint base, GLint max,
504 const void *data );
505
506 GLUAPI GLint GLAPIENTRY
507 gluUnProject4( GLdouble winx, GLdouble winy, GLdouble winz, GLdouble clipw,
508 const GLdouble modelMatrix[16], const GLdouble projMatrix[16],
509 const GLint viewport[4], GLclampd near, GLclampd far,
510 GLdouble *objx, GLdouble *objy, GLdouble *objz,
511 GLdouble *objw );
512
513
514
515 #if defined(__BEOS__) || defined(__QUICKDRAW__)
516 #pragma export off
517 #endif
518
519
520 #ifdef macintosh
521 #pragma enumsalwaysint reset
522 #if PRAGMA_IMPORT_SUPPORTED
523 #pragma import off
524 #endif
525 #endif
526
527
528 #ifdef __cplusplus
529 }
530 #endif
531
532
533 #endif /* __glu_h__ */