home *** CD-ROM | disk | FTP | other *** search
/ The Best of Windows 95.com 1996 September / WIN95_09963.iso / filelib / OGLFIX.EXE / GLU.H < prev    next >
C/C++ Source or Header  |  1995-04-26  |  16KB  |  375 lines

  1. /*++ BUILD Version: 0004    // Increment this if a change has global effects
  2.  
  3. Copyright (c) 1985-95, Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     glu.h
  8.  
  9. Abstract:
  10.  
  11.     Procedure declarations, constant definitions and macros for the OpenGL
  12.     Utility Library.
  13.  
  14. --*/
  15.  
  16. #ifndef __glu_h__
  17. #ifndef __GLU_H__
  18.  
  19. #define __glu_h__
  20. #define __GLU_H__
  21.  
  22. #include <GL/gl.h>
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. /*
  29. ** Copyright 1991-1993, Silicon Graphics, Inc.
  30. ** All Rights Reserved.
  31. ** 
  32. ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  33. ** the contents of this file may not be disclosed to third parties, copied or
  34. ** duplicated in any form, in whole or in part, without the prior written
  35. ** permission of Silicon Graphics, Inc.
  36. ** 
  37. ** RESTRICTED RIGHTS LEGEND:
  38. ** Use, duplication or disclosure by the Government is subject to restrictions
  39. ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  40. ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  41. ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  42. ** rights reserved under the Copyright Laws of the United States.
  43. */
  44.  
  45. /*
  46. ** Return the error string associated with a particular error code.
  47. ** This will return 0 for an invalid error code.
  48. **
  49. ** The generic function prototype that can be compiled for ANSI or Unicode
  50. ** is defined as follows:
  51. **
  52. ** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode);
  53. */
  54. #ifdef UNICODE
  55. #define gluErrorStringWIN(errCode) ((LPCSTR)  gluErrorUnicodeStringEXT(errCode))
  56. #else
  57. #define gluErrorStringWIN(errCode) ((LPCWSTR) gluErrorString(errCode))
  58. #endif
  59. const GLubyte* APIENTRY gluErrorString (GLenum errCode);
  60. const wchar_t* APIENTRY gluErrorUnicodeStringEXT (GLenum errCode);
  61.  
  62. const GLubyte* APIENTRY gluGetString (GLenum name);
  63.  
  64. void APIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
  65. void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
  66. void APIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]);
  67. void APIENTRY gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);
  68. 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);
  69. 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);
  70.  
  71. int APIENTRY gluScaleImage (GLenum format, GLint widthin, GLint heightin, GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout);
  72.  
  73. int APIENTRY gluBuild1DMipmaps (GLenum target, GLint components, GLint width, GLenum format, GLenum type, const void *data);
  74. int APIENTRY gluBuild2DMipmaps (GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data);
  75.  
  76. typedef struct GLUquadricObj GLUquadricObj;
  77. GLUquadricObj* APIENTRY gluNewQuadric (void);
  78. void APIENTRY gluDeleteQuadric (GLUquadricObj *state);
  79. void APIENTRY gluQuadricNormals (GLUquadricObj *quadObject, GLenum normals);
  80. void APIENTRY gluQuadricTexture (GLUquadricObj *quadObject, GLboolean textureCoords);
  81. void APIENTRY gluQuadricOrientation (GLUquadricObj *quadObject, GLenum orientation);
  82. void APIENTRY gluQuadricDrawStyle (GLUquadricObj *quadObject, GLenum drawStyle);
  83. void APIENTRY gluCylinder (GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks);
  84. void APIENTRY gluDisk (GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops);
  85. void APIENTRY gluPartialDisk (GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops, GLdouble startAngle, GLdouble sweepAngle);
  86. void APIENTRY gluSphere (GLUquadricObj *qobj, GLdouble radius, GLint slices, GLint stacks);
  87. void APIENTRY gluQuadricCallback (GLUquadricObj *qobj, GLenum which, void (CALLBACK* fn)());
  88.  
  89. typedef struct GLUtesselator GLUtesselator;
  90.  
  91. GLUtesselator* APIENTRY  gluNewTess(          void );
  92.  
  93. void           APIENTRY  gluDeleteTess(       GLUtesselator *tess );
  94.  
  95. void           APIENTRY  gluTessBeginPolygon( GLUtesselator *tess,
  96.                                               void          *polygon_data );
  97.  
  98. void           APIENTRY  gluTessBeginContour( GLUtesselator *tess );
  99.  
  100. void           APIENTRY  gluTessVertex(       GLUtesselator *tess,
  101.                                               GLdouble      coords[3], 
  102.                                               void          *data );
  103.  
  104. void           APIENTRY  gluTessEndContour(   GLUtesselator *tess );
  105.  
  106. void           APIENTRY  gluTessEndPolygon(   GLUtesselator *tess );
  107.  
  108. void           APIENTRY  gluTessProperty(     GLUtesselator *tess,
  109.                                               GLenum        which, 
  110.                                               GLdouble      value );
  111.  
  112. void           APIENTRY  gluTessNormal(       GLUtesselator *tess, 
  113.                                               GLdouble      x,
  114.                                               GLdouble      y, 
  115.                                               GLdouble      z );
  116.  
  117. void           APIENTRY  gluTessCallback(     GLUtesselator *tess,
  118.                                               GLenum        which, 
  119.                                               void          (CALLBACK *fn)());
  120.  
  121. void           APIENTRY  gluGetTessProperty(  GLUtesselator *tess,
  122.                                               GLenum        which, 
  123.                                               GLdouble      *value );
  124.  
  125. #ifdef __cplusplus
  126.     class GLUnurbsObj;
  127. #else 
  128.     typedef struct GLUnurbsObj GLUnurbsObj;
  129. #endif
  130. GLUnurbsObj* APIENTRY gluNewNurbsRenderer (void);
  131. void APIENTRY gluDeleteNurbsRenderer (GLUnurbsObj *nobj);
  132. void APIENTRY gluBeginSurface (GLUnurbsObj *nobj);
  133. void APIENTRY gluBeginCurve (GLUnurbsObj *nobj);
  134. void APIENTRY gluEndCurve (GLUnurbsObj *nobj);
  135. void APIENTRY gluEndSurface (GLUnurbsObj *nobj);
  136. void APIENTRY gluBeginTrim (GLUnurbsObj *nobj);
  137. void APIENTRY gluEndTrim (GLUnurbsObj *nobj);
  138. void APIENTRY gluPwlCurve (GLUnurbsObj *nobj, GLint count, GLfloat *array, GLint stride, GLenum type);
  139. void APIENTRY gluNurbsCurve (GLUnurbsObj *nobj, GLint nknots, GLfloat *knot, GLint stride, GLfloat *ctlarray, GLint order, GLenum type);
  140. void APIENTRY gluNurbsSurface (GLUnurbsObj *nobj, GLint sknot_count, GLfloat *sknot, GLint tknot_count, GLfloat *tknot, GLint s_stride, GLint t_stride, GLfloat *ctlarray, GLint sorder, GLint torder, GLenum type);
  141. void APIENTRY gluLoadSamplingMatrices (GLUnurbsObj *nobj, const GLfloat modelMatrix[16], const GLfloat projMatrix[16], const GLint viewport[4]);
  142. void APIENTRY gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat value);
  143. void APIENTRY gluGetNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat *value);
  144. void APIENTRY gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (CALLBACK* fn)());
  145.  
  146.  
  147. /****           Callback function prototypes    ****/
  148.  
  149. /* gluQuadricCallback */
  150. typedef void (CALLBACK* GLUquadricErrorProc) (GLenum);
  151.  
  152. /* gluTessCallback */
  153. typedef void (CALLBACK* GLUtessBeginProc)        (GLenum);
  154. typedef void (CALLBACK* GLUtessEdgeFlagProc)     (GLboolean);
  155. typedef void (CALLBACK* GLUtessVertexProc)       (void *);
  156. typedef void (CALLBACK* GLUtessEndProc)          (void);
  157. typedef void (CALLBACK* GLUtessErrorProc)        (GLenum);
  158. typedef void (CALLBACK* GLUtessCombineProc)      (GLdouble[3],
  159.                                                   void*[4], 
  160.                                                   GLfloat[4],
  161.                                                   void** );
  162. typedef void (CALLBACK* GLUtessBeginDataProc)    (GLenum, void *);
  163. typedef void (CALLBACK* GLUtessEdgeFlagDataProc) (GLboolean, void *);
  164. typedef void (CALLBACK* GLUtessVertexDataProc)   (void *, void *);
  165. typedef void (CALLBACK* GLUtessEndDataProc)      (void *);
  166. typedef void (CALLBACK* GLUtessErrorDataProc)    (GLenum, void *);
  167. typedef void (CALLBACK* GLUtessCombineDataProc)  (GLdouble[3],
  168.                                                   void*[4], 
  169.                                                   GLfloat[4],
  170.                                                   void**,
  171.                                                   void* );
  172.  
  173. /* gluNurbsCallback */
  174. typedef void (CALLBACK* GLUnurbsErrorProc)   (GLenum);
  175.  
  176.  
  177. /****           Generic constants               ****/
  178.  
  179. #define GLU_VERSION_1_1                 1
  180. #define GLU_VERSION_1_2                 1
  181.  
  182. /* Errors: (return value 0 = no error) */
  183. #define GLU_INVALID_ENUM        100900
  184. #define GLU_INVALID_VALUE       100901
  185. #define GLU_OUT_OF_MEMORY       100902
  186. #define GLU_INCOMPATIBLE_GL_VERSION     100903
  187.  
  188. /* gets */
  189. #define GLU_VERSION             100800
  190. #define GLU_EXTENSIONS          100801
  191.  
  192. /* For laughs: */
  193. #define GLU_TRUE                GL_TRUE
  194. #define GLU_FALSE               GL_FALSE
  195.  
  196.  
  197. /****           Quadric constants               ****/
  198.  
  199. /* Types of normals: */
  200. #define GLU_SMOOTH              100000
  201. #define GLU_FLAT                100001
  202. #define GLU_NONE                100002
  203.  
  204. /* DrawStyle types: */
  205. #define GLU_POINT               100010
  206. #define GLU_LINE                100011
  207. #define GLU_FILL                100012
  208. #define GLU_SILHOUETTE          100013
  209.  
  210. /* Orientation types: */
  211. #define GLU_OUTSIDE             100020
  212. #define GLU_INSIDE              100021
  213.  
  214. /* Callback types: */
  215. /*      GLU_ERROR               100103 */
  216.  
  217.  
  218. /****           Tesselation constants           ****/
  219.  
  220. #define GLU_TESS_MAX_COORD              1.0e150
  221.  
  222. /* Property types: */
  223. #define GLU_TESS_WINDING_RULE           100140
  224. #define GLU_TESS_BOUNDARY_ONLY          100141
  225. #define GLU_TESS_TOLERANCE              100142
  226.  
  227. /* Possible winding rules: */
  228. #define GLU_TESS_WINDING_ODD            100130
  229. #define GLU_TESS_WINDING_NONZERO        100131
  230. #define GLU_TESS_WINDING_POSITIVE       100132
  231. #define GLU_TESS_WINDING_NEGATIVE       100133
  232. #define GLU_TESS_WINDING_ABS_GEQ_TWO    100134
  233.  
  234. /* Callback types: */
  235. #define GLU_TESS_BEGIN          100100  /* void (CALLBACK*)(GLenum    type)  */
  236. #define GLU_TESS_VERTEX         100101  /* void (CALLBACK*)(void      *data) */
  237. #define GLU_TESS_END            100102  /* void (CALLBACK*)(void)            */
  238. #define GLU_TESS_ERROR          100103  /* void (CALLBACK*)(GLenum    errno) */
  239. #define GLU_TESS_EDGE_FLAG      100104  /* void (CALLBACK*)(GLboolean boundaryEdge)  */
  240. #define GLU_TESS_COMBINE        100105  /* void (CALLBACK*)(GLdouble  coords[3],
  241.                                                             void      *data[4],
  242.                                                             GLfloat   weight[4],
  243.                                                             void      **dataOut)     */
  244. #define GLU_TESS_BEGIN_DATA     100106  /* void (CALLBACK*)(GLenum    type,  
  245.                                                             void      *polygon_data) */
  246. #define GLU_TESS_VERTEX_DATA    100107  /* void (CALLBACK*)(void      *data, 
  247.                                                             void      *polygon_data) */
  248. #define GLU_TESS_END_DATA       100108  /* void (CALLBACK*)(void      *polygon_data) */
  249. #define GLU_TESS_ERROR_DATA     100109  /* void (CALLBACK*)(GLenum    errno, 
  250.                                                             void      *polygon_data) */
  251. #define GLU_TESS_EDGE_FLAG_DATA 100110  /* void (CALLBACK*)(GLboolean boundaryEdge,
  252.                                                             void      *polygon_data) */
  253. #define GLU_TESS_COMBINE_DATA   100111  /* void (CALLBACK*)(GLdouble  coords[3],
  254.                                                             void      *data[4],
  255.                                                             GLfloat   weight[4],
  256.                                                             void      **dataOut,
  257.                                                             void      *polygon_data) */
  258.  
  259. /* Errors: */
  260. #define GLU_TESS_ERROR1     100151
  261. #define GLU_TESS_ERROR2     100152
  262. #define GLU_TESS_ERROR3     100153
  263. #define GLU_TESS_ERROR4     100154
  264. #define GLU_TESS_ERROR5     100155
  265. #define GLU_TESS_ERROR6     100156
  266. #define GLU_TESS_ERROR7     100157
  267. #define GLU_TESS_ERROR8     100158
  268.  
  269. #define GLU_TESS_MISSING_BEGIN_POLYGON  GLU_TESS_ERROR1
  270. #define GLU_TESS_MISSING_BEGIN_CONTOUR  GLU_TESS_ERROR2
  271. #define GLU_TESS_MISSING_END_POLYGON    GLU_TESS_ERROR3
  272. #define GLU_TESS_MISSING_END_CONTOUR    GLU_TESS_ERROR4
  273. #define GLU_TESS_COORD_TOO_LARGE        GLU_TESS_ERROR5
  274. #define GLU_TESS_NEED_COMBINE_CALLBACK  GLU_TESS_ERROR6
  275.  
  276. /****           NURBS constants                 ****/
  277.  
  278. /* Properties: */
  279. #define GLU_AUTO_LOAD_MATRIX    100200
  280. #define GLU_CULLING             100201
  281. #define GLU_SAMPLING_TOLERANCE  100203
  282. #define GLU_DISPLAY_MODE        100204
  283. #define GLU_PARAMETRIC_TOLERANCE        100202
  284. #define GLU_SAMPLING_METHOD             100205
  285. #define GLU_U_STEP                      100206
  286. #define GLU_V_STEP                      100207
  287.  
  288. /* Sampling methods: */
  289. #define GLU_PATH_LENGTH                 100215
  290. #define GLU_PARAMETRIC_ERROR            100216
  291. #define GLU_DOMAIN_DISTANCE             100217
  292.  
  293. /* Trimming curve types */
  294. #define GLU_MAP1_TRIM_2         100210
  295. #define GLU_MAP1_TRIM_3         100211
  296.  
  297. /* Display modes: */
  298. /*      GLU_FILL                100012 */
  299. #define GLU_OUTLINE_POLYGON     100240
  300. #define GLU_OUTLINE_PATCH       100241
  301.  
  302. /* Callbacks: */
  303. /*      GLU_ERROR               100103 */
  304.  
  305. /* Errors: */
  306. #define GLU_NURBS_ERROR1        100251
  307. #define GLU_NURBS_ERROR2        100252
  308. #define GLU_NURBS_ERROR3        100253
  309. #define GLU_NURBS_ERROR4        100254
  310. #define GLU_NURBS_ERROR5        100255
  311. #define GLU_NURBS_ERROR6        100256
  312. #define GLU_NURBS_ERROR7        100257
  313. #define GLU_NURBS_ERROR8        100258
  314. #define GLU_NURBS_ERROR9        100259
  315. #define GLU_NURBS_ERROR10       100260
  316. #define GLU_NURBS_ERROR11       100261
  317. #define GLU_NURBS_ERROR12       100262
  318. #define GLU_NURBS_ERROR13       100263
  319. #define GLU_NURBS_ERROR14       100264
  320. #define GLU_NURBS_ERROR15       100265
  321. #define GLU_NURBS_ERROR16       100266
  322. #define GLU_NURBS_ERROR17       100267
  323. #define GLU_NURBS_ERROR18       100268
  324. #define GLU_NURBS_ERROR19       100269
  325. #define GLU_NURBS_ERROR20       100270
  326. #define GLU_NURBS_ERROR21       100271
  327. #define GLU_NURBS_ERROR22       100272
  328. #define GLU_NURBS_ERROR23       100273
  329. #define GLU_NURBS_ERROR24       100274
  330. #define GLU_NURBS_ERROR25       100275
  331. #define GLU_NURBS_ERROR26       100276
  332. #define GLU_NURBS_ERROR27       100277
  333. #define GLU_NURBS_ERROR28       100278
  334. #define GLU_NURBS_ERROR29       100279
  335. #define GLU_NURBS_ERROR30       100280
  336. #define GLU_NURBS_ERROR31       100281
  337. #define GLU_NURBS_ERROR32       100282
  338. #define GLU_NURBS_ERROR33       100283
  339. #define GLU_NURBS_ERROR34       100284
  340. #define GLU_NURBS_ERROR35       100285
  341. #define GLU_NURBS_ERROR36       100286
  342. #define GLU_NURBS_ERROR37       100287
  343.  
  344. /****           Backwards compatibility for old tesselator           ****/
  345.  
  346. typedef GLUtesselator GLUtriangulatorObj;
  347.  
  348. void APIENTRY   gluBeginPolygon( GLUtesselator *tess );
  349.  
  350. void APIENTRY   gluNextContour(  GLUtesselator *tess, 
  351.                                  GLenum        type );
  352.  
  353. void APIENTRY   gluEndPolygon(   GLUtesselator *tess );
  354.  
  355. /* Contours types -- obsolete! */
  356. #define GLU_CW          100120
  357. #define GLU_CCW         100121
  358. #define GLU_INTERIOR    100122
  359. #define GLU_EXTERIOR    100123
  360. #define GLU_UNKNOWN     100124
  361.  
  362. /* Names without "TESS_" prefix */
  363. #define GLU_BEGIN       GLU_TESS_BEGIN
  364. #define GLU_VERTEX      GLU_TESS_VERTEX
  365. #define GLU_END         GLU_TESS_END
  366. #define GLU_ERROR       GLU_TESS_ERROR
  367. #define GLU_EDGE_FLAG   GLU_TESS_EDGE_FLAG
  368.  
  369. #ifdef __cplusplus
  370. }
  371. #endif
  372.  
  373. #endif /* __GLU_H__ */
  374. #endif /* __glu_h__ */
  375.