585 lines
18 KiB
C++
585 lines
18 KiB
C++
/*++ BUILD Version: 0004 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1985-95, Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
glu.h
|
|
|
|
Abstract:
|
|
|
|
Procedure declarations, constant definitions and macros for the OpenGL
|
|
Utility Library.
|
|
|
|
--*/
|
|
|
|
#ifndef __glu_h__
|
|
#ifndef __GLU_H__
|
|
|
|
#define __glu_h__
|
|
#define __GLU_H__
|
|
|
|
#include <GL/gl.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
** Copyright 1991-1993, Silicon Graphics, Inc.
|
|
** All Rights Reserved.
|
|
**
|
|
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
|
|
** the contents of this file may not be disclosed to third parties, copied or
|
|
** duplicated in any form, in whole or in part, without the prior written
|
|
** permission of Silicon Graphics, Inc.
|
|
**
|
|
** RESTRICTED RIGHTS LEGEND:
|
|
** Use, duplication or disclosure by the Government is subject to restrictions
|
|
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
|
|
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
|
|
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
|
|
** rights reserved under the Copyright Laws of the United States.
|
|
*/
|
|
|
|
/*
|
|
** Return the error string associated with a particular error code.
|
|
** This will return 0 for an invalid error code.
|
|
**
|
|
** The generic function prototype that can be compiled for ANSI or Unicode
|
|
** is defined as follows:
|
|
**
|
|
** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode);
|
|
*/
|
|
#ifdef UNICODE
|
|
#define gluErrorStringWIN(errCode) ((LPCSTR) gluErrorUnicodeStringEXT(errCode))
|
|
#else
|
|
#define gluErrorStringWIN(errCode) ((LPCWSTR) gluErrorString(errCode))
|
|
#endif
|
|
|
|
const GLubyte* APIENTRY gluErrorString (
|
|
GLenum errCode);
|
|
|
|
const wchar_t* APIENTRY gluErrorUnicodeStringEXT (
|
|
GLenum errCode);
|
|
|
|
const GLubyte* APIENTRY gluGetString (
|
|
GLenum name);
|
|
|
|
void APIENTRY gluOrtho2D (
|
|
GLdouble left,
|
|
GLdouble right,
|
|
GLdouble bottom,
|
|
GLdouble top);
|
|
|
|
void APIENTRY gluPerspective (
|
|
GLdouble fovy,
|
|
GLdouble aspect,
|
|
GLdouble zNear,
|
|
GLdouble zFar);
|
|
|
|
void APIENTRY gluPickMatrix (
|
|
GLdouble x,
|
|
GLdouble y,
|
|
GLdouble width,
|
|
GLdouble height,
|
|
GLint viewport[4]);
|
|
|
|
void APIENTRY gluLookAt (
|
|
GLdouble eyex,
|
|
GLdouble eyey,
|
|
GLdouble eyez,
|
|
GLdouble centerx,
|
|
GLdouble centery,
|
|
GLdouble centerz,
|
|
GLdouble upx,
|
|
GLdouble upy,
|
|
GLdouble upz);
|
|
|
|
int APIENTRY gluProject (
|
|
GLdouble objx,
|
|
GLdouble objy,
|
|
GLdouble objz,
|
|
const GLdouble modelMatrix[16],
|
|
const GLdouble projMatrix[16],
|
|
const GLint viewport[4],
|
|
GLdouble *winx,
|
|
GLdouble *winy,
|
|
GLdouble *winz);
|
|
|
|
int APIENTRY gluUnProject (
|
|
GLdouble winx,
|
|
GLdouble winy,
|
|
GLdouble winz,
|
|
const GLdouble modelMatrix[16],
|
|
const GLdouble projMatrix[16],
|
|
const GLint viewport[4],
|
|
GLdouble *objx,
|
|
GLdouble *objy,
|
|
GLdouble *objz);
|
|
|
|
|
|
int APIENTRY gluScaleImage (
|
|
GLenum format,
|
|
GLint widthin,
|
|
GLint heightin,
|
|
GLenum typein,
|
|
const void *datain,
|
|
GLint widthout,
|
|
GLint heightout,
|
|
GLenum typeout,
|
|
void *dataout);
|
|
|
|
|
|
int APIENTRY gluBuild1DMipmaps (
|
|
GLenum target,
|
|
GLint components,
|
|
GLint width,
|
|
GLenum format,
|
|
GLenum type,
|
|
const void *data);
|
|
|
|
int APIENTRY gluBuild2DMipmaps (
|
|
GLenum target,
|
|
GLint components,
|
|
GLint width,
|
|
GLint height,
|
|
GLenum format,
|
|
GLenum type,
|
|
const void *data);
|
|
|
|
#ifdef __cplusplus
|
|
|
|
class GLUnurbs;
|
|
class GLUquadric;
|
|
class GLUtesselator;
|
|
|
|
/* backwards compatibility: */
|
|
typedef class GLUnurbs GLUnurbsObj;
|
|
typedef class GLUquadric GLUquadricObj;
|
|
typedef class GLUtesselator GLUtesselatorObj;
|
|
typedef class GLUtesselator GLUtriangulatorObj;
|
|
|
|
#else
|
|
|
|
typedef struct GLUnurbs GLUnurbs;
|
|
typedef struct GLUquadric GLUquadric;
|
|
typedef struct GLUtesselator GLUtesselator;
|
|
|
|
/* backwards compatibility: */
|
|
typedef struct GLUnurbs GLUnurbsObj;
|
|
typedef struct GLUquadric GLUquadricObj;
|
|
typedef struct GLUtesselator GLUtesselatorObj;
|
|
typedef struct GLUtesselator GLUtriangulatorObj;
|
|
|
|
#endif
|
|
|
|
|
|
GLUquadric* APIENTRY gluNewQuadric (void);
|
|
void APIENTRY gluDeleteQuadric (
|
|
GLUquadric *state);
|
|
|
|
void APIENTRY gluQuadricNormals (
|
|
GLUquadric *quadObject,
|
|
GLenum normals);
|
|
|
|
void APIENTRY gluQuadricTexture (
|
|
GLUquadric *quadObject,
|
|
GLboolean textureCoords);
|
|
|
|
void APIENTRY gluQuadricOrientation (
|
|
GLUquadric *quadObject,
|
|
GLenum orientation);
|
|
|
|
void APIENTRY gluQuadricDrawStyle (
|
|
GLUquadric *quadObject,
|
|
GLenum drawStyle);
|
|
|
|
void APIENTRY gluCylinder (
|
|
GLUquadric *qobj,
|
|
GLdouble baseRadius,
|
|
GLdouble topRadius,
|
|
GLdouble height,
|
|
GLint slices,
|
|
GLint stacks);
|
|
|
|
void APIENTRY gluDisk (
|
|
GLUquadric *qobj,
|
|
GLdouble innerRadius,
|
|
GLdouble outerRadius,
|
|
GLint slices,
|
|
GLint loops);
|
|
|
|
void APIENTRY gluPartialDisk (
|
|
GLUquadric *qobj,
|
|
GLdouble innerRadius,
|
|
GLdouble outerRadius,
|
|
GLint slices,
|
|
GLint loops,
|
|
GLdouble startAngle,
|
|
GLdouble sweepAngle);
|
|
|
|
void APIENTRY gluSphere (
|
|
GLUquadric *qobj,
|
|
GLdouble radius,
|
|
GLint slices,
|
|
GLint stacks);
|
|
|
|
void APIENTRY gluQuadricCallback (
|
|
GLUquadric *qobj,
|
|
GLenum which,
|
|
void (CALLBACK* fn)());
|
|
|
|
GLUtesselator* APIENTRY gluNewTess(
|
|
void );
|
|
|
|
void APIENTRY gluDeleteTess(
|
|
GLUtesselator *tess );
|
|
|
|
void APIENTRY gluTessBeginPolygon(
|
|
GLUtesselator *tess,
|
|
void *polygon_data );
|
|
|
|
void APIENTRY gluTessBeginContour(
|
|
GLUtesselator *tess );
|
|
|
|
void APIENTRY gluTessVertex(
|
|
GLUtesselator *tess,
|
|
GLdouble coords[3],
|
|
void *data );
|
|
|
|
void APIENTRY gluTessEndContour(
|
|
GLUtesselator *tess );
|
|
|
|
void APIENTRY gluTessEndPolygon(
|
|
GLUtesselator *tess );
|
|
|
|
void APIENTRY gluTessProperty(
|
|
GLUtesselator *tess,
|
|
GLenum which,
|
|
GLdouble value );
|
|
|
|
void APIENTRY gluTessNormal(
|
|
GLUtesselator *tess,
|
|
GLdouble x,
|
|
GLdouble y,
|
|
GLdouble z );
|
|
|
|
void APIENTRY gluTessCallback(
|
|
GLUtesselator *tess,
|
|
GLenum which,
|
|
void (CALLBACK *fn)());
|
|
|
|
void APIENTRY gluGetTessProperty(
|
|
GLUtesselator *tess,
|
|
GLenum which,
|
|
GLdouble *value );
|
|
|
|
GLUnurbs* APIENTRY gluNewNurbsRenderer (void);
|
|
|
|
void APIENTRY gluDeleteNurbsRenderer (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluBeginSurface (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluBeginCurve (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluEndCurve (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluEndSurface (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluBeginTrim (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluEndTrim (
|
|
GLUnurbs *nobj);
|
|
|
|
void APIENTRY gluPwlCurve (
|
|
GLUnurbs *nobj,
|
|
GLint count,
|
|
GLfloat *array,
|
|
GLint stride,
|
|
GLenum type);
|
|
|
|
void APIENTRY gluNurbsCurve (
|
|
GLUnurbs *nobj,
|
|
GLint nknots,
|
|
GLfloat *knot,
|
|
GLint stride,
|
|
GLfloat *ctlarray,
|
|
GLint order,
|
|
GLenum type);
|
|
|
|
void APIENTRY
|
|
gluNurbsSurface(
|
|
GLUnurbs *nobj,
|
|
GLint sknot_count,
|
|
float *sknot,
|
|
GLint tknot_count,
|
|
GLfloat *tknot,
|
|
GLint s_stride,
|
|
GLint t_stride,
|
|
GLfloat *ctlarray,
|
|
GLint sorder,
|
|
GLint torder,
|
|
GLenum type);
|
|
|
|
void APIENTRY
|
|
gluLoadSamplingMatrices (
|
|
GLUnurbs *nobj,
|
|
const GLfloat modelMatrix[16],
|
|
const GLfloat projMatrix[16],
|
|
const GLint viewport[4] );
|
|
|
|
void APIENTRY
|
|
gluNurbsProperty (
|
|
GLUnurbs *nobj,
|
|
GLenum property,
|
|
GLfloat value );
|
|
|
|
void APIENTRY
|
|
gluGetNurbsProperty (
|
|
GLUnurbs *nobj,
|
|
GLenum property,
|
|
GLfloat *value );
|
|
|
|
void APIENTRY
|
|
gluNurbsCallback (
|
|
GLUnurbs *nobj,
|
|
GLenum which,
|
|
void (CALLBACK* fn)() );
|
|
|
|
|
|
/**** Callback function prototypes ****/
|
|
|
|
/* gluQuadricCallback */
|
|
typedef void (CALLBACK* GLUquadricErrorProc) (GLenum);
|
|
|
|
/* gluTessCallback */
|
|
typedef void (CALLBACK* GLUtessBeginProc) (GLenum);
|
|
typedef void (CALLBACK* GLUtessEdgeFlagProc) (GLboolean);
|
|
typedef void (CALLBACK* GLUtessVertexProc) (void *);
|
|
typedef void (CALLBACK* GLUtessEndProc) (void);
|
|
typedef void (CALLBACK* GLUtessErrorProc) (GLenum);
|
|
typedef void (CALLBACK* GLUtessCombineProc) (GLdouble[3],
|
|
void*[4],
|
|
GLfloat[4],
|
|
void** );
|
|
typedef void (CALLBACK* GLUtessBeginDataProc) (GLenum, void *);
|
|
typedef void (CALLBACK* GLUtessEdgeFlagDataProc) (GLboolean, void *);
|
|
typedef void (CALLBACK* GLUtessVertexDataProc) (void *, void *);
|
|
typedef void (CALLBACK* GLUtessEndDataProc) (void *);
|
|
typedef void (CALLBACK* GLUtessErrorDataProc) (GLenum, void *);
|
|
typedef void (CALLBACK* GLUtessCombineDataProc) (GLdouble[3],
|
|
void*[4],
|
|
GLfloat[4],
|
|
void**,
|
|
void* );
|
|
|
|
/* gluNurbsCallback */
|
|
typedef void (CALLBACK* GLUnurbsErrorProc) (GLenum);
|
|
|
|
|
|
/**** Generic constants ****/
|
|
|
|
/* Version */
|
|
#define GLU_VERSION_1_1 1
|
|
#define GLU_VERSION_1_2 1
|
|
|
|
/* Errors: (return value 0 = no error) */
|
|
#define GLU_INVALID_ENUM 100900
|
|
#define GLU_INVALID_VALUE 100901
|
|
#define GLU_OUT_OF_MEMORY 100902
|
|
#define GLU_INCOMPATIBLE_GL_VERSION 100903
|
|
|
|
/* StringName */
|
|
#define GLU_VERSION 100800
|
|
#define GLU_EXTENSIONS 100801
|
|
|
|
/* Boolean */
|
|
#define GLU_TRUE GL_TRUE
|
|
#define GLU_FALSE GL_FALSE
|
|
|
|
|
|
/**** Quadric constants ****/
|
|
|
|
/* QuadricNormal */
|
|
#define GLU_SMOOTH 100000
|
|
#define GLU_FLAT 100001
|
|
#define GLU_NONE 100002
|
|
|
|
/* QuadricDrawStyle */
|
|
#define GLU_POINT 100010
|
|
#define GLU_LINE 100011
|
|
#define GLU_FILL 100012
|
|
#define GLU_SILHOUETTE 100013
|
|
|
|
/* QuadricOrientation */
|
|
#define GLU_OUTSIDE 100020
|
|
#define GLU_INSIDE 100021
|
|
|
|
/* Callback types: */
|
|
/* GLU_ERROR 100103 */
|
|
|
|
|
|
/**** Tesselation constants ****/
|
|
|
|
#define GLU_TESS_MAX_COORD 1.0e150
|
|
|
|
/* TessProperty */
|
|
#define GLU_TESS_WINDING_RULE 100140
|
|
#define GLU_TESS_BOUNDARY_ONLY 100141
|
|
#define GLU_TESS_TOLERANCE 100142
|
|
|
|
/* TessWinding */
|
|
#define GLU_TESS_WINDING_ODD 100130
|
|
#define GLU_TESS_WINDING_NONZERO 100131
|
|
#define GLU_TESS_WINDING_POSITIVE 100132
|
|
#define GLU_TESS_WINDING_NEGATIVE 100133
|
|
#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
|
|
|
|
/* TessCallback */
|
|
#define GLU_TESS_BEGIN 100100 /* void (CALLBACK*)(GLenum type) */
|
|
#define GLU_TESS_VERTEX 100101 /* void (CALLBACK*)(void *data) */
|
|
#define GLU_TESS_END 100102 /* void (CALLBACK*)(void) */
|
|
#define GLU_TESS_ERROR 100103 /* void (CALLBACK*)(GLenum errno) */
|
|
#define GLU_TESS_EDGE_FLAG 100104 /* void (CALLBACK*)(GLboolean boundaryEdge) */
|
|
#define GLU_TESS_COMBINE 100105 /* void (CALLBACK*)(GLdouble coords[3],
|
|
void *data[4],
|
|
GLfloat weight[4],
|
|
void **dataOut) */
|
|
#define GLU_TESS_BEGIN_DATA 100106 /* void (CALLBACK*)(GLenum type,
|
|
void *polygon_data) */
|
|
#define GLU_TESS_VERTEX_DATA 100107 /* void (CALLBACK*)(void *data,
|
|
void *polygon_data) */
|
|
#define GLU_TESS_END_DATA 100108 /* void (CALLBACK*)(void *polygon_data) */
|
|
#define GLU_TESS_ERROR_DATA 100109 /* void (CALLBACK*)(GLenum errno,
|
|
void *polygon_data) */
|
|
#define GLU_TESS_EDGE_FLAG_DATA 100110 /* void (CALLBACK*)(GLboolean boundaryEdge,
|
|
void *polygon_data) */
|
|
#define GLU_TESS_COMBINE_DATA 100111 /* void (CALLBACK*)(GLdouble coords[3],
|
|
void *data[4],
|
|
GLfloat weight[4],
|
|
void **dataOut,
|
|
void *polygon_data) */
|
|
|
|
/* TessError */
|
|
#define GLU_TESS_ERROR1 100151
|
|
#define GLU_TESS_ERROR2 100152
|
|
#define GLU_TESS_ERROR3 100153
|
|
#define GLU_TESS_ERROR4 100154
|
|
#define GLU_TESS_ERROR5 100155
|
|
#define GLU_TESS_ERROR6 100156
|
|
#define GLU_TESS_ERROR7 100157
|
|
#define GLU_TESS_ERROR8 100158
|
|
|
|
#define GLU_TESS_MISSING_BEGIN_POLYGON GLU_TESS_ERROR1
|
|
#define GLU_TESS_MISSING_BEGIN_CONTOUR GLU_TESS_ERROR2
|
|
#define GLU_TESS_MISSING_END_POLYGON GLU_TESS_ERROR3
|
|
#define GLU_TESS_MISSING_END_CONTOUR GLU_TESS_ERROR4
|
|
#define GLU_TESS_COORD_TOO_LARGE GLU_TESS_ERROR5
|
|
#define GLU_TESS_NEED_COMBINE_CALLBACK GLU_TESS_ERROR6
|
|
|
|
/**** NURBS constants ****/
|
|
|
|
/* NurbsProperty */
|
|
#define GLU_AUTO_LOAD_MATRIX 100200
|
|
#define GLU_CULLING 100201
|
|
#define GLU_SAMPLING_TOLERANCE 100203
|
|
#define GLU_DISPLAY_MODE 100204
|
|
#define GLU_PARAMETRIC_TOLERANCE 100202
|
|
#define GLU_SAMPLING_METHOD 100205
|
|
#define GLU_U_STEP 100206
|
|
#define GLU_V_STEP 100207
|
|
|
|
/* NurbsSampling */
|
|
#define GLU_PATH_LENGTH 100215
|
|
#define GLU_PARAMETRIC_ERROR 100216
|
|
#define GLU_DOMAIN_DISTANCE 100217
|
|
|
|
|
|
/* NurbsTrim */
|
|
#define GLU_MAP1_TRIM_2 100210
|
|
#define GLU_MAP1_TRIM_3 100211
|
|
|
|
/* NurbsDisplay */
|
|
/* GLU_FILL 100012 */
|
|
#define GLU_OUTLINE_POLYGON 100240
|
|
#define GLU_OUTLINE_PATCH 100241
|
|
|
|
/* NurbsCallback */
|
|
/* GLU_ERROR 100103 */
|
|
|
|
/* NurbsErrors */
|
|
#define GLU_NURBS_ERROR1 100251
|
|
#define GLU_NURBS_ERROR2 100252
|
|
#define GLU_NURBS_ERROR3 100253
|
|
#define GLU_NURBS_ERROR4 100254
|
|
#define GLU_NURBS_ERROR5 100255
|
|
#define GLU_NURBS_ERROR6 100256
|
|
#define GLU_NURBS_ERROR7 100257
|
|
#define GLU_NURBS_ERROR8 100258
|
|
#define GLU_NURBS_ERROR9 100259
|
|
#define GLU_NURBS_ERROR10 100260
|
|
#define GLU_NURBS_ERROR11 100261
|
|
#define GLU_NURBS_ERROR12 100262
|
|
#define GLU_NURBS_ERROR13 100263
|
|
#define GLU_NURBS_ERROR14 100264
|
|
#define GLU_NURBS_ERROR15 100265
|
|
#define GLU_NURBS_ERROR16 100266
|
|
#define GLU_NURBS_ERROR17 100267
|
|
#define GLU_NURBS_ERROR18 100268
|
|
#define GLU_NURBS_ERROR19 100269
|
|
#define GLU_NURBS_ERROR20 100270
|
|
#define GLU_NURBS_ERROR21 100271
|
|
#define GLU_NURBS_ERROR22 100272
|
|
#define GLU_NURBS_ERROR23 100273
|
|
#define GLU_NURBS_ERROR24 100274
|
|
#define GLU_NURBS_ERROR25 100275
|
|
#define GLU_NURBS_ERROR26 100276
|
|
#define GLU_NURBS_ERROR27 100277
|
|
#define GLU_NURBS_ERROR28 100278
|
|
#define GLU_NURBS_ERROR29 100279
|
|
#define GLU_NURBS_ERROR30 100280
|
|
#define GLU_NURBS_ERROR31 100281
|
|
#define GLU_NURBS_ERROR32 100282
|
|
#define GLU_NURBS_ERROR33 100283
|
|
#define GLU_NURBS_ERROR34 100284
|
|
#define GLU_NURBS_ERROR35 100285
|
|
#define GLU_NURBS_ERROR36 100286
|
|
#define GLU_NURBS_ERROR37 100287
|
|
|
|
/**** Backwards compatibility for old tesselator ****/
|
|
|
|
void APIENTRY gluBeginPolygon( GLUtesselator *tess );
|
|
|
|
void APIENTRY gluNextContour( GLUtesselator *tess,
|
|
GLenum type );
|
|
|
|
void APIENTRY gluEndPolygon( GLUtesselator *tess );
|
|
|
|
/* Contours types -- obsolete! */
|
|
#define GLU_CW 100120
|
|
#define GLU_CCW 100121
|
|
#define GLU_INTERIOR 100122
|
|
#define GLU_EXTERIOR 100123
|
|
#define GLU_UNKNOWN 100124
|
|
|
|
/* Names without "TESS_" prefix */
|
|
#define GLU_BEGIN GLU_TESS_BEGIN
|
|
#define GLU_VERTEX GLU_TESS_VERTEX
|
|
#define GLU_END GLU_TESS_END
|
|
#define GLU_ERROR GLU_TESS_ERROR
|
|
#define GLU_EDGE_FLAG GLU_TESS_EDGE_FLAG
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __GLU_H__ */
|
|
#endif /* __glu_h__ */
|