home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / devc / _SETUP.6 / Group18 / GLU.H < prev    next >
C/C++ Source or Header  |  1996-05-17  |  18KB  |  585 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.  
  60. const GLubyte* APIENTRY gluErrorString (
  61.     GLenum   errCode);
  62.  
  63. const wchar_t* APIENTRY gluErrorUnicodeStringEXT (
  64.     GLenum   errCode);
  65.  
  66. const GLubyte* APIENTRY gluGetString (
  67.     GLenum   name);
  68.  
  69. void APIENTRY gluOrtho2D (
  70.     GLdouble left, 
  71.     GLdouble right, 
  72.     GLdouble bottom, 
  73.     GLdouble top);
  74.  
  75. void APIENTRY gluPerspective (
  76.     GLdouble fovy, 
  77.     GLdouble aspect, 
  78.     GLdouble zNear, 
  79.     GLdouble zFar);
  80.  
  81. void APIENTRY gluPickMatrix (
  82.     GLdouble x, 
  83.     GLdouble y, 
  84.     GLdouble width, 
  85.     GLdouble height, 
  86.     GLint    viewport[4]);
  87.  
  88. void APIENTRY gluLookAt (
  89.     GLdouble eyex, 
  90.     GLdouble eyey, 
  91.     GLdouble eyez, 
  92.     GLdouble centerx, 
  93.     GLdouble centery, 
  94.     GLdouble centerz, 
  95.     GLdouble upx, 
  96.     GLdouble upy, 
  97.     GLdouble upz);
  98.  
  99. int APIENTRY gluProject (
  100.     GLdouble        objx, 
  101.     GLdouble        objy, 
  102.     GLdouble        objz,  
  103.     const GLdouble  modelMatrix[16], 
  104.     const GLdouble  projMatrix[16], 
  105.     const GLint     viewport[4], 
  106.     GLdouble        *winx, 
  107.     GLdouble        *winy, 
  108.     GLdouble        *winz);
  109.  
  110. int APIENTRY gluUnProject (
  111.     GLdouble       winx, 
  112.     GLdouble       winy, 
  113.     GLdouble       winz, 
  114.     const GLdouble modelMatrix[16], 
  115.     const GLdouble projMatrix[16], 
  116.     const GLint    viewport[4], 
  117.     GLdouble       *objx, 
  118.     GLdouble       *objy, 
  119.     GLdouble       *objz);
  120.  
  121.  
  122. int APIENTRY gluScaleImage (
  123.     GLenum      format, 
  124.     GLint       widthin, 
  125.     GLint       heightin, 
  126.     GLenum      typein, 
  127.     const void  *datain, 
  128.     GLint       widthout, 
  129.     GLint       heightout, 
  130.     GLenum      typeout, 
  131.     void        *dataout);
  132.  
  133.  
  134. int APIENTRY gluBuild1DMipmaps (
  135.     GLenum      target, 
  136.     GLint       components, 
  137.     GLint       width, 
  138.     GLenum      format, 
  139.     GLenum      type, 
  140.     const void  *data);
  141.  
  142. int APIENTRY gluBuild2DMipmaps (
  143.     GLenum      target, 
  144.     GLint       components, 
  145.     GLint       width, 
  146.     GLint       height, 
  147.     GLenum      format, 
  148.     GLenum      type, 
  149.     const void  *data);
  150.  
  151. #ifdef __cplusplus
  152.  
  153. class GLUnurbs;
  154. class GLUquadric;
  155. class GLUtesselator;
  156.  
  157. /* backwards compatibility: */
  158. typedef class GLUnurbs GLUnurbsObj;
  159. typedef class GLUquadric GLUquadricObj;
  160. typedef class GLUtesselator GLUtesselatorObj;
  161. typedef class GLUtesselator GLUtriangulatorObj;
  162.  
  163. #else
  164.  
  165. typedef struct GLUnurbs GLUnurbs;
  166. typedef struct GLUquadric GLUquadric;
  167. typedef struct GLUtesselator GLUtesselator;
  168.  
  169. /* backwards compatibility: */
  170. typedef struct GLUnurbs GLUnurbsObj;
  171. typedef struct GLUquadric GLUquadricObj;
  172. typedef struct GLUtesselator GLUtesselatorObj;
  173. typedef struct GLUtesselator GLUtriangulatorObj;
  174.  
  175. #endif
  176.  
  177.  
  178. GLUquadric* APIENTRY gluNewQuadric (void);
  179. void APIENTRY gluDeleteQuadric (
  180.     GLUquadric          *state);
  181.  
  182. void APIENTRY gluQuadricNormals (
  183.     GLUquadric          *quadObject, 
  184.     GLenum              normals);
  185.  
  186. void APIENTRY gluQuadricTexture (
  187.     GLUquadric          *quadObject, 
  188.     GLboolean           textureCoords);
  189.  
  190. void APIENTRY gluQuadricOrientation (
  191.     GLUquadric          *quadObject, 
  192.     GLenum              orientation);
  193.  
  194. void APIENTRY gluQuadricDrawStyle (
  195.     GLUquadric          *quadObject, 
  196.     GLenum              drawStyle);
  197.  
  198. void APIENTRY gluCylinder (
  199.     GLUquadric          *qobj, 
  200.     GLdouble            baseRadius, 
  201.     GLdouble            topRadius, 
  202.     GLdouble            height, 
  203.     GLint               slices, 
  204.     GLint               stacks);
  205.  
  206. void APIENTRY gluDisk (
  207.     GLUquadric          *qobj, 
  208.     GLdouble            innerRadius, 
  209.     GLdouble            outerRadius, 
  210.     GLint               slices, 
  211.     GLint               loops);
  212.  
  213. void APIENTRY gluPartialDisk (
  214.     GLUquadric          *qobj, 
  215.     GLdouble            innerRadius, 
  216.     GLdouble            outerRadius, 
  217.     GLint               slices, 
  218.     GLint               loops, 
  219.     GLdouble            startAngle, 
  220.     GLdouble            sweepAngle);
  221.  
  222. void APIENTRY gluSphere (
  223.     GLUquadric          *qobj, 
  224.     GLdouble            radius, 
  225.     GLint               slices, 
  226.     GLint               stacks);
  227.  
  228. void APIENTRY gluQuadricCallback (
  229.     GLUquadric          *qobj, 
  230.     GLenum              which, 
  231.     void                (CALLBACK* fn)());
  232.  
  233. GLUtesselator* APIENTRY  gluNewTess(          
  234.     void );
  235.  
  236. void APIENTRY  gluDeleteTess(       
  237.     GLUtesselator       *tess );
  238.  
  239. void APIENTRY  gluTessBeginPolygon( 
  240.     GLUtesselator       *tess,
  241.     void                *polygon_data );
  242.  
  243. void APIENTRY  gluTessBeginContour( 
  244.     GLUtesselator       *tess );
  245.  
  246. void APIENTRY  gluTessVertex(       
  247.     GLUtesselator       *tess,
  248.     GLdouble            coords[3], 
  249.     void                *data );
  250.  
  251. void APIENTRY  gluTessEndContour(   
  252.     GLUtesselator       *tess );
  253.  
  254. void APIENTRY  gluTessEndPolygon(   
  255.     GLUtesselator       *tess );
  256.  
  257. void APIENTRY  gluTessProperty(     
  258.     GLUtesselator       *tess,
  259.     GLenum              which, 
  260.     GLdouble            value );
  261.  
  262. void APIENTRY  gluTessNormal(       
  263.     GLUtesselator       *tess, 
  264.     GLdouble            x,
  265.     GLdouble            y, 
  266.     GLdouble            z );
  267.  
  268. void APIENTRY  gluTessCallback(     
  269.     GLUtesselator       *tess,
  270.     GLenum              which, 
  271.     void                (CALLBACK *fn)());
  272.  
  273. void APIENTRY  gluGetTessProperty(  
  274.     GLUtesselator       *tess,
  275.     GLenum              which, 
  276.     GLdouble            *value );
  277.  
  278. GLUnurbs* APIENTRY gluNewNurbsRenderer (void);
  279.  
  280. void APIENTRY gluDeleteNurbsRenderer (
  281.     GLUnurbs            *nobj);
  282.  
  283. void APIENTRY gluBeginSurface (
  284.     GLUnurbs            *nobj);
  285.  
  286. void APIENTRY gluBeginCurve (
  287.     GLUnurbs            *nobj);
  288.  
  289. void APIENTRY gluEndCurve (
  290.     GLUnurbs            *nobj);
  291.  
  292. void APIENTRY gluEndSurface (
  293.     GLUnurbs            *nobj);
  294.  
  295. void APIENTRY gluBeginTrim (
  296.     GLUnurbs            *nobj);
  297.  
  298. void APIENTRY gluEndTrim (
  299.     GLUnurbs            *nobj);
  300.  
  301. void APIENTRY gluPwlCurve (
  302.     GLUnurbs            *nobj, 
  303.     GLint               count, 
  304.     GLfloat             *array, 
  305.     GLint               stride, 
  306.     GLenum              type);
  307.  
  308. void APIENTRY gluNurbsCurve (
  309.     GLUnurbs            *nobj, 
  310.     GLint               nknots, 
  311.     GLfloat             *knot, 
  312.     GLint               stride, 
  313.     GLfloat             *ctlarray, 
  314.     GLint               order, 
  315.     GLenum              type);
  316.  
  317. void APIENTRY 
  318. gluNurbsSurface(     
  319.     GLUnurbs            *nobj, 
  320.     GLint               sknot_count, 
  321.     float               *sknot, 
  322.     GLint               tknot_count, 
  323.     GLfloat             *tknot, 
  324.     GLint               s_stride, 
  325.     GLint               t_stride, 
  326.     GLfloat             *ctlarray, 
  327.     GLint               sorder, 
  328.     GLint               torder, 
  329.     GLenum              type);
  330.  
  331. void APIENTRY 
  332. gluLoadSamplingMatrices (
  333.     GLUnurbs            *nobj, 
  334.     const GLfloat       modelMatrix[16], 
  335.     const GLfloat       projMatrix[16], 
  336.     const GLint         viewport[4] );
  337.  
  338. void APIENTRY 
  339. gluNurbsProperty (
  340.     GLUnurbs            *nobj, 
  341.     GLenum              property, 
  342.     GLfloat             value );
  343.  
  344. void APIENTRY 
  345. gluGetNurbsProperty (
  346.     GLUnurbs            *nobj, 
  347.     GLenum              property, 
  348.     GLfloat             *value );
  349.  
  350. void APIENTRY 
  351. gluNurbsCallback (
  352.     GLUnurbs            *nobj, 
  353.     GLenum              which, 
  354.     void                (CALLBACK* fn)() );
  355.  
  356.  
  357. /****           Callback function prototypes    ****/
  358.  
  359. /* gluQuadricCallback */
  360. typedef void (CALLBACK* GLUquadricErrorProc) (GLenum);
  361.  
  362. /* gluTessCallback */
  363. typedef void (CALLBACK* GLUtessBeginProc)        (GLenum);
  364. typedef void (CALLBACK* GLUtessEdgeFlagProc)     (GLboolean);
  365. typedef void (CALLBACK* GLUtessVertexProc)       (void *);
  366. typedef void (CALLBACK* GLUtessEndProc)          (void);
  367. typedef void (CALLBACK* GLUtessErrorProc)        (GLenum);
  368. typedef void (CALLBACK* GLUtessCombineProc)      (GLdouble[3],
  369.                                                   void*[4], 
  370.                                                   GLfloat[4],
  371.                                                   void** );
  372. typedef void (CALLBACK* GLUtessBeginDataProc)    (GLenum, void *);
  373. typedef void (CALLBACK* GLUtessEdgeFlagDataProc) (GLboolean, void *);
  374. typedef void (CALLBACK* GLUtessVertexDataProc)   (void *, void *);
  375. typedef void (CALLBACK* GLUtessEndDataProc)      (void *);
  376. typedef void (CALLBACK* GLUtessErrorDataProc)    (GLenum, void *);
  377. typedef void (CALLBACK* GLUtessCombineDataProc)  (GLdouble[3],
  378.                                                   void*[4], 
  379.                                                   GLfloat[4],
  380.                                                   void**,
  381.                                                   void* );
  382.  
  383. /* gluNurbsCallback */
  384. typedef void (CALLBACK* GLUnurbsErrorProc)   (GLenum);
  385.  
  386.  
  387. /****           Generic constants               ****/
  388.  
  389. /* Version */
  390. #define GLU_VERSION_1_1                 1
  391. #define GLU_VERSION_1_2                 1
  392.  
  393. /* Errors: (return value 0 = no error) */
  394. #define GLU_INVALID_ENUM        100900
  395. #define GLU_INVALID_VALUE       100901
  396. #define GLU_OUT_OF_MEMORY       100902
  397. #define GLU_INCOMPATIBLE_GL_VERSION     100903
  398.  
  399. /* StringName */
  400. #define GLU_VERSION             100800
  401. #define GLU_EXTENSIONS          100801
  402.  
  403. /* Boolean */
  404. #define GLU_TRUE                GL_TRUE
  405. #define GLU_FALSE               GL_FALSE
  406.  
  407.  
  408. /****           Quadric constants               ****/
  409.  
  410. /* QuadricNormal */
  411. #define GLU_SMOOTH              100000
  412. #define GLU_FLAT                100001
  413. #define GLU_NONE                100002
  414.  
  415. /* QuadricDrawStyle */
  416. #define GLU_POINT               100010
  417. #define GLU_LINE                100011
  418. #define GLU_FILL                100012
  419. #define GLU_SILHOUETTE          100013
  420.  
  421. /* QuadricOrientation */
  422. #define GLU_OUTSIDE             100020
  423. #define GLU_INSIDE              100021
  424.  
  425. /* Callback types: */
  426. /*      GLU_ERROR               100103 */
  427.  
  428.  
  429. /****           Tesselation constants           ****/
  430.  
  431. #define GLU_TESS_MAX_COORD              1.0e150
  432.  
  433. /* TessProperty */
  434. #define GLU_TESS_WINDING_RULE           100140
  435. #define GLU_TESS_BOUNDARY_ONLY          100141
  436. #define GLU_TESS_TOLERANCE              100142
  437.  
  438. /* TessWinding */
  439. #define GLU_TESS_WINDING_ODD            100130
  440. #define GLU_TESS_WINDING_NONZERO        100131
  441. #define GLU_TESS_WINDING_POSITIVE       100132
  442. #define GLU_TESS_WINDING_NEGATIVE       100133
  443. #define GLU_TESS_WINDING_ABS_GEQ_TWO    100134
  444.  
  445. /* TessCallback */
  446. #define GLU_TESS_BEGIN          100100  /* void (CALLBACK*)(GLenum    type)  */
  447. #define GLU_TESS_VERTEX         100101  /* void (CALLBACK*)(void      *data) */
  448. #define GLU_TESS_END            100102  /* void (CALLBACK*)(void)            */
  449. #define GLU_TESS_ERROR          100103  /* void (CALLBACK*)(GLenum    errno) */
  450. #define GLU_TESS_EDGE_FLAG      100104  /* void (CALLBACK*)(GLboolean boundaryEdge)  */
  451. #define GLU_TESS_COMBINE        100105  /* void (CALLBACK*)(GLdouble  coords[3],
  452.                                                             void      *data[4],
  453.                                                             GLfloat   weight[4],
  454.                                                             void      **dataOut)     */
  455. #define GLU_TESS_BEGIN_DATA     100106  /* void (CALLBACK*)(GLenum    type,  
  456.                                                             void      *polygon_data) */
  457. #define GLU_TESS_VERTEX_DATA    100107  /* void (CALLBACK*)(void      *data, 
  458.                                                             void      *polygon_data) */
  459. #define GLU_TESS_END_DATA       100108  /* void (CALLBACK*)(void      *polygon_data) */
  460. #define GLU_TESS_ERROR_DATA     100109  /* void (CALLBACK*)(GLenum    errno, 
  461.                                                             void      *polygon_data) */
  462. #define GLU_TESS_EDGE_FLAG_DATA 100110  /* void (CALLBACK*)(GLboolean boundaryEdge,
  463.                                                             void      *polygon_data) */
  464. #define GLU_TESS_COMBINE_DATA   100111  /* void (CALLBACK*)(GLdouble  coords[3],
  465.                                                             void      *data[4],
  466.                                                             GLfloat   weight[4],
  467.                                                             void      **dataOut,
  468.                                                             void      *polygon_data) */
  469.  
  470. /* TessError */
  471. #define GLU_TESS_ERROR1     100151
  472. #define GLU_TESS_ERROR2     100152
  473. #define GLU_TESS_ERROR3     100153
  474. #define GLU_TESS_ERROR4     100154
  475. #define GLU_TESS_ERROR5     100155
  476. #define GLU_TESS_ERROR6     100156
  477. #define GLU_TESS_ERROR7     100157
  478. #define GLU_TESS_ERROR8     100158
  479.  
  480. #define GLU_TESS_MISSING_BEGIN_POLYGON  GLU_TESS_ERROR1
  481. #define GLU_TESS_MISSING_BEGIN_CONTOUR  GLU_TESS_ERROR2
  482. #define GLU_TESS_MISSING_END_POLYGON    GLU_TESS_ERROR3
  483. #define GLU_TESS_MISSING_END_CONTOUR    GLU_TESS_ERROR4
  484. #define GLU_TESS_COORD_TOO_LARGE        GLU_TESS_ERROR5
  485. #define GLU_TESS_NEED_COMBINE_CALLBACK  GLU_TESS_ERROR6
  486.  
  487. /****           NURBS constants                 ****/
  488.  
  489. /* NurbsProperty */
  490. #define GLU_AUTO_LOAD_MATRIX    100200
  491. #define GLU_CULLING             100201
  492. #define GLU_SAMPLING_TOLERANCE  100203
  493. #define GLU_DISPLAY_MODE        100204
  494. #define GLU_PARAMETRIC_TOLERANCE        100202
  495. #define GLU_SAMPLING_METHOD             100205
  496. #define GLU_U_STEP                      100206
  497. #define GLU_V_STEP                      100207
  498.  
  499. /* NurbsSampling */
  500. #define GLU_PATH_LENGTH                 100215
  501. #define GLU_PARAMETRIC_ERROR            100216
  502. #define GLU_DOMAIN_DISTANCE             100217
  503.  
  504.  
  505. /* NurbsTrim */
  506. #define GLU_MAP1_TRIM_2         100210
  507. #define GLU_MAP1_TRIM_3         100211
  508.  
  509. /* NurbsDisplay */
  510. /*      GLU_FILL                100012 */
  511. #define GLU_OUTLINE_POLYGON     100240
  512. #define GLU_OUTLINE_PATCH       100241
  513.  
  514. /* NurbsCallback */
  515. /*      GLU_ERROR               100103 */
  516.  
  517. /* NurbsErrors */
  518. #define GLU_NURBS_ERROR1        100251
  519. #define GLU_NURBS_ERROR2        100252
  520. #define GLU_NURBS_ERROR3        100253
  521. #define GLU_NURBS_ERROR4        100254
  522. #define GLU_NURBS_ERROR5        100255
  523. #define GLU_NURBS_ERROR6        100256
  524. #define GLU_NURBS_ERROR7        100257
  525. #define GLU_NURBS_ERROR8        100258
  526. #define GLU_NURBS_ERROR9        100259
  527. #define GLU_NURBS_ERROR10       100260
  528. #define GLU_NURBS_ERROR11       100261
  529. #define GLU_NURBS_ERROR12       100262
  530. #define GLU_NURBS_ERROR13       100263
  531. #define GLU_NURBS_ERROR14       100264
  532. #define GLU_NURBS_ERROR15       100265
  533. #define GLU_NURBS_ERROR16       100266
  534. #define GLU_NURBS_ERROR17       100267
  535. #define GLU_NURBS_ERROR18       100268
  536. #define GLU_NURBS_ERROR19       100269
  537. #define GLU_NURBS_ERROR20       100270
  538. #define GLU_NURBS_ERROR21       100271
  539. #define GLU_NURBS_ERROR22       100272
  540. #define GLU_NURBS_ERROR23       100273
  541. #define GLU_NURBS_ERROR24       100274
  542. #define GLU_NURBS_ERROR25       100275
  543. #define GLU_NURBS_ERROR26       100276
  544. #define GLU_NURBS_ERROR27       100277
  545. #define GLU_NURBS_ERROR28       100278
  546. #define GLU_NURBS_ERROR29       100279
  547. #define GLU_NURBS_ERROR30       100280
  548. #define GLU_NURBS_ERROR31       100281
  549. #define GLU_NURBS_ERROR32       100282
  550. #define GLU_NURBS_ERROR33       100283
  551. #define GLU_NURBS_ERROR34       100284
  552. #define GLU_NURBS_ERROR35       100285
  553. #define GLU_NURBS_ERROR36       100286
  554. #define GLU_NURBS_ERROR37       100287
  555.  
  556. /****           Backwards compatibility for old tesselator           ****/
  557.  
  558. void APIENTRY   gluBeginPolygon( GLUtesselator *tess );
  559.  
  560. void APIENTRY   gluNextContour(  GLUtesselator *tess, 
  561.                                  GLenum        type );
  562.  
  563. void APIENTRY   gluEndPolygon(   GLUtesselator *tess );
  564.  
  565. /* Contours types -- obsolete! */
  566. #define GLU_CW          100120
  567. #define GLU_CCW         100121
  568. #define GLU_INTERIOR    100122
  569. #define GLU_EXTERIOR    100123
  570. #define GLU_UNKNOWN     100124
  571.  
  572. /* Names without "TESS_" prefix */
  573. #define GLU_BEGIN       GLU_TESS_BEGIN
  574. #define GLU_VERTEX      GLU_TESS_VERTEX
  575. #define GLU_END         GLU_TESS_END
  576. #define GLU_ERROR       GLU_TESS_ERROR
  577. #define GLU_EDGE_FLAG   GLU_TESS_EDGE_FLAG
  578.  
  579. #ifdef __cplusplus
  580. }
  581. #endif
  582.  
  583. #endif /* __GLU_H__ */
  584. #endif /* __glu_h__ */
  585.