home *** CD-ROM | disk | FTP | other *** search
/ ftp.hitl.washington.edu / ftp.hitl.washington.edu.tar / ftp.hitl.washington.edu / pub / people / peter / glut.h < prev    next >
C/C++ Source or Header  |  2000-01-16  |  13KB  |  396 lines

  1. #ifndef __glut_h__
  2. #define __glut_h__
  3.  
  4. /* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. */
  5.  
  6. /* This program is freely distributable without licensing fees  and is
  7.    provided without guarantee or warrantee expressed or  implied. This
  8.    program is -not- in the public domain. */
  9.  
  10. #include <GL/gl.h>
  11. #include <GL/glu.h>
  12.  
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16.  
  17. /* 
  18.  * GLUT API revision history:
  19.  *
  20.  * GLUT_API_VERSION is updated to reflect incompatible GLUT
  21.  * API changes (interface changes, semantic changes, deletions,
  22.  * or additions).
  23.  *
  24.  * GLUT_API_VERSION=1  First public release of GLUT.  11/29/94
  25.  *
  26.  * GLUT_API_VERSION=2  Added support for OpenGL/GLX multisampling,
  27.  * extension.  Supports new input devices like tablet, dial and button
  28.  * box, and Spaceball.  Easy to query OpenGL extensions.
  29.  *
  30.  * GLUT_API_VERSION=3  glutMenuStatus added.
  31.  *
  32.  */
  33. #ifndef GLUT_API_VERSION  /* allow this to be overriden */
  34. #define GLUT_API_VERSION        3
  35. #endif
  36.  
  37. /* 
  38.  * GLUT implementation revision history:
  39.  * 
  40.  * GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
  41.  * API revisions and implementation revisions (ie, bug fixes).
  42.  *
  43.  * GLUT_XLIB_IMPLEMENTATION=1  mjk's first public release of
  44.  * GLUT Xlib-based implementation.  11/29/94
  45.  *
  46.  * GLUT_XLIB_IMPLEMENTATION=2  mjk's second public release of
  47.  * GLUT Xlib-based implementation providing GLUT version 2 
  48.  * interfaces.
  49.  *
  50.  * GLUT_XLIB_IMPLEMENTATION=3  mjk's GLUT 2.2 images. 4/17/95
  51.  *
  52.  * GLUT_XLIB_IMPLEMENTATION=4  mjk's GLUT 2.3 images. 6/??/95
  53.  *
  54.  * GLUT_XLIB_IMPLEMENTATION=5  mjk's GLUT 3.0 images. 10/??/95
  55.  *
  56.  */
  57. #ifndef GLUT_XLIB_IMPLEMENTATION  /* allow this to be overriden */
  58. #define GLUT_XLIB_IMPLEMENTATION    5
  59. #endif
  60.  
  61. /* display mode bit masks */
  62. #define GLUT_RGB            0
  63. #define GLUT_RGBA            GLUT_RGB
  64. #define GLUT_INDEX            1
  65. #define GLUT_SINGLE            0
  66. #define GLUT_DOUBLE            2
  67. #define GLUT_ACCUM            4
  68. #define GLUT_ALPHA            8
  69. #define GLUT_DEPTH            16
  70. #define GLUT_STENCIL            32
  71. #if (GLUT_API_VERSION >= 2)
  72. #define GLUT_MULTISAMPLE        128
  73. #define GLUT_STEREO            256
  74. #endif
  75. #if (GLUT_API_VERSION >= 3)
  76. #define GLUT_LUMINANCE            512
  77. #endif
  78.  
  79. /* mouse buttons */
  80. #define GLUT_LEFT_BUTTON        0
  81. #define GLUT_MIDDLE_BUTTON        1
  82. #define GLUT_RIGHT_BUTTON        2
  83.  
  84. /* mouse button callback state */
  85. #define GLUT_DOWN            0
  86. #define GLUT_UP                1
  87.  
  88. #if (GLUT_API_VERSION >= 2)
  89. /* function keys */
  90. #define GLUT_KEY_F1            1
  91. #define GLUT_KEY_F2            2
  92. #define GLUT_KEY_F3            3
  93. #define GLUT_KEY_F4            4
  94. #define GLUT_KEY_F5            5
  95. #define GLUT_KEY_F6            6
  96. #define GLUT_KEY_F7            7
  97. #define GLUT_KEY_F8            8
  98. #define GLUT_KEY_F9            9
  99. #define GLUT_KEY_F10            10
  100. #define GLUT_KEY_F11            11
  101. #define GLUT_KEY_F12            12
  102. /* directional keys */
  103. #define GLUT_KEY_LEFT            100
  104. #define GLUT_KEY_UP            101
  105. #define GLUT_KEY_RIGHT            102
  106. #define GLUT_KEY_DOWN            103
  107. #define GLUT_KEY_PAGE_UP        104
  108. #define GLUT_KEY_PAGE_DOWN        105
  109. #define GLUT_KEY_HOME            106
  110. #define GLUT_KEY_END            107
  111. #define GLUT_KEY_INSERT            108
  112. #endif
  113.  
  114. /* entry/exit callback state */
  115. #define GLUT_LEFT            0
  116. #define GLUT_ENTERED            1
  117.  
  118. /* menu usage callback state */
  119. #define GLUT_MENU_NOT_IN_USE        0
  120. #define GLUT_MENU_IN_USE        1
  121.  
  122. /* visibility callback state */
  123. #define GLUT_NOT_VISIBLE        0
  124. #define GLUT_VISIBLE            1
  125.  
  126. /* color index component selection values */
  127. #define GLUT_RED            0
  128. #define GLUT_GREEN            1
  129. #define GLUT_BLUE            2
  130.  
  131. /* layers for use */
  132. #define GLUT_NORMAL            0
  133. #define GLUT_OVERLAY            1
  134.  
  135. /* stroke font opaque addresses (use constants instead in source code) */
  136. extern void *glutStrokeRoman;
  137. extern void *glutStrokeMonoRoman;
  138.  
  139. /* stroke font constants (use these in GLUT program) */
  140. #define GLUT_STROKE_ROMAN        (&glutStrokeRoman)
  141. #define GLUT_STROKE_MONO_ROMAN        (&glutStrokeMonoRoman)
  142.  
  143. /* bitmap font opaque addresses (use constants instead in source code) */
  144. extern void *glutBitmap9By15;
  145. extern void *glutBitmap8By13;
  146. extern void *glutBitmapTimesRoman10;
  147. extern void *glutBitmapTimesRoman24;
  148. extern void *glutBitmapHelvetica10;
  149. extern void *glutBitmapHelvetica12;
  150. extern void *glutBitmapHelvetica18;
  151.  
  152. /* bitmap font constants (use these in GLUT program) */
  153. #define GLUT_BITMAP_9_BY_15        (&glutBitmap9By15)
  154. #define GLUT_BITMAP_8_BY_13        (&glutBitmap8By13)
  155. #define GLUT_BITMAP_TIMES_ROMAN_10    (&glutBitmapTimesRoman10)
  156. #define GLUT_BITMAP_TIMES_ROMAN_24    (&glutBitmapTimesRoman24)
  157. #if (GLUT_API_VERSION >= 3)
  158. #define GLUT_BITMAP_HELVETICA_10    (&glutBitmapHelvetica10)
  159. #define GLUT_BITMAP_HELVETICA_12    (&glutBitmapHelvetica12)
  160. #define GLUT_BITMAP_HELVETICA_18    (&glutBitmapHelvetica18)
  161. #endif
  162.  
  163. /* glutGet parameters */
  164. #define GLUT_WINDOW_X            100
  165. #define GLUT_WINDOW_Y            101
  166. #define GLUT_WINDOW_WIDTH        102
  167. #define GLUT_WINDOW_HEIGHT        103
  168. #define GLUT_WINDOW_BUFFER_SIZE        104
  169. #define GLUT_WINDOW_STENCIL_SIZE    105
  170. #define GLUT_WINDOW_DEPTH_SIZE        106
  171. #define GLUT_WINDOW_RED_SIZE        107
  172. #define GLUT_WINDOW_GREEN_SIZE        108
  173. #define GLUT_WINDOW_BLUE_SIZE        109
  174. #define GLUT_WINDOW_ALPHA_SIZE        110
  175. #define GLUT_WINDOW_ACCUM_RED_SIZE    111
  176. #define GLUT_WINDOW_ACCUM_GREEN_SIZE    112
  177. #define GLUT_WINDOW_ACCUM_BLUE_SIZE    113
  178. #define GLUT_WINDOW_ACCUM_ALPHA_SIZE    114
  179. #define GLUT_WINDOW_DOUBLEBUFFER    115
  180. #define GLUT_WINDOW_RGBA        116
  181. #define GLUT_WINDOW_PARENT        117
  182. #define GLUT_WINDOW_NUM_CHILDREN    118
  183. #define GLUT_WINDOW_COLORMAP_SIZE    119
  184. #if (GLUT_API_VERSION >= 2)
  185. #define GLUT_WINDOW_NUM_SAMPLES        120
  186. #define GLUT_WINDOW_STEREO        121
  187. #endif
  188. #if (GLUT_API_VERSION >= 3)
  189. #define GLUT_WINDOW_CURSOR        122
  190. #endif
  191. #define GLUT_SCREEN_WIDTH        200
  192. #define GLUT_SCREEN_HEIGHT        201
  193. #define GLUT_SCREEN_WIDTH_MM        202
  194. #define GLUT_SCREEN_HEIGHT_MM        203
  195. #define GLUT_MENU_NUM_ITEMS        300
  196. #define GLUT_DISPLAY_MODE_POSSIBLE    400
  197. #define GLUT_INIT_WINDOW_X        500
  198. #define GLUT_INIT_WINDOW_Y        501
  199. #define GLUT_INIT_WINDOW_WIDTH        502
  200. #define GLUT_INIT_WINDOW_HEIGHT        503
  201. #define GLUT_INIT_DISPLAY_MODE        504
  202. #if (GLUT_API_VERSION >= 2)
  203. #define GLUT_ELAPSED_TIME        700
  204. #endif
  205.  
  206. #if (GLUT_API_VERSION >= 2)
  207. /* glutDeviceGet parameters */
  208. #define GLUT_HAS_KEYBOARD        600
  209. #define GLUT_HAS_MOUSE            601
  210. #define GLUT_HAS_SPACEBALL        602
  211. #define GLUT_HAS_DIAL_AND_BUTTON_BOX    603
  212. #define GLUT_HAS_TABLET            604
  213. #define GLUT_NUM_MOUSE_BUTTONS        605
  214. #define GLUT_NUM_SPACEBALL_BUTTONS    606
  215. #define GLUT_NUM_BUTTON_BOX_BUTTONS    607
  216. #define GLUT_NUM_DIALS            608
  217. #define GLUT_NUM_TABLET_BUTTONS        609
  218. #endif
  219.  
  220. #if (GLUT_API_VERSION >= 3)
  221. /* glutLayerGet parameters */
  222. #define GLUT_OVERLAY_POSSIBLE           800
  223. #define GLUT_LAYER_IN_USE        801
  224. #define GLUT_HAS_OVERLAY        802
  225. #define GLUT_TRANSPARENT_INDEX        803
  226. #define GLUT_NORMAL_DAMAGED        804
  227. #define GLUT_OVERLAY_DAMAGED        805
  228.  
  229. /* glutUseLayer parameters */
  230. #define GLUT_NORMAL            0
  231. #define GLUT_OVERLAY            1
  232.  
  233. /* glutGetModifiers return mask */
  234. #define GLUT_ACTIVE_SHIFT               1
  235. #define GLUT_ACTIVE_CTRL                2
  236. #define GLUT_ACTIVE_ALT                 4
  237.  
  238. /* glutSetCursor parameters */
  239. /* Basic arrows */
  240. #define GLUT_CURSOR_RIGHT_ARROW        0
  241. #define GLUT_CURSOR_LEFT_ARROW        1
  242. /* Symbolic cursor shapees */
  243. #define GLUT_CURSOR_INFO        2
  244. #define GLUT_CURSOR_DESTROY        3
  245. #define GLUT_CURSOR_HELP        4
  246. #define GLUT_CURSOR_CYCLE        5
  247. #define GLUT_CURSOR_SPRAY        6
  248. #define GLUT_CURSOR_WAIT        7
  249. #define GLUT_CURSOR_TEXT        8
  250. #define GLUT_CURSOR_CROSSHAIR        9
  251. /* Directional cursors */
  252. #define GLUT_CURSOR_UP_DOWN        10
  253. #define GLUT_CURSOR_LEFT_RIGHT        11
  254. /* Sizing cursors */
  255. #define GLUT_CURSOR_TOP_SIDE        12
  256. #define GLUT_CURSOR_BOTTOM_SIDE        13
  257. #define GLUT_CURSOR_LEFT_SIDE        14
  258. #define GLUT_CURSOR_RIGHT_SIDE        15
  259. #define GLUT_CURSOR_TOP_LEFT_CORNER    16
  260. #define GLUT_CURSOR_TOP_RIGHT_CORNER    17
  261. #define GLUT_CURSOR_BOTTOM_RIGHT_CORNER    18
  262. #define GLUT_CURSOR_BOTTOM_LEFT_CORNER    19
  263. /* Inherit from parent window */
  264. #define GLUT_CURSOR_INHERIT        100
  265. /* Blank cursor */
  266. #define GLUT_CURSOR_NONE        101
  267. /* Fullscreen crosshair (if available) */
  268. #define GLUT_CURSOR_FULL_CROSSHAIR    102
  269. #endif
  270.  
  271. /* GLUT initialization sub-API */
  272. extern void glutInit(int *argcp, char **argv);
  273. extern void glutInitDisplayMode(unsigned int mode);
  274. extern void glutInitWindowPosition(int x, int y);
  275. extern void glutInitWindowSize(int width, int height);
  276. extern void glutMainLoop(void);
  277.  
  278. /* GLUT window sub-api */
  279. extern int glutCreateWindow(char *title);
  280. extern int glutCreateSubWindow(int win, int x, int y, int width, int height);
  281. extern void glutDestroyWindow(int win);
  282. extern void glutPostRedisplay(void);
  283. extern void glutSwapBuffers(void);
  284. extern int glutGetWindow(void);
  285. extern void glutSetWindow(int win);
  286. extern void glutSetWindowTitle(char *title);
  287. extern void glutSetIconTitle(char *title);
  288. extern void glutPositionWindow(int x, int y);
  289. extern void glutReshapeWindow(int width, int height);
  290. extern void glutPopWindow(void);
  291. extern void glutPushWindow(void);
  292. extern void glutIconifyWindow(void);
  293. extern void glutShowWindow(void);
  294. extern void glutHideWindow(void);
  295. #if (GLUT_API_VERSION >= 3)
  296. extern void glutFullScreen(void);
  297. extern void glutSetCursor(int cursor);
  298.  
  299. /* GLUT overlay sub-API */
  300. extern void glutEstablishOverlay(void);
  301. extern void glutRemoveOverlay(void);
  302. extern void glutUseLayer(GLenum layer);
  303. extern void glutPostOverlayRedisplay(void);
  304. extern void glutShowOverlay(void);
  305. extern void glutHideOverlay(void);
  306. #endif
  307.  
  308. /* GLUT menu sub-API */
  309. extern int glutCreateMenu(void (*)(int));
  310. extern void glutDestroyMenu(int menu);
  311. extern int glutGetMenu(void);
  312. extern void glutSetMenu(int menu);
  313. extern void glutAddMenuEntry(char *label, int value);
  314. extern void glutAddSubMenu(char *label, int submenu);
  315. extern void glutChangeToMenuEntry(int item, char *label, int value);
  316. extern void glutChangeToSubMenu(int item, char *label, int submenu);
  317. extern void glutRemoveMenuItem(int item);
  318. extern void glutAttachMenu(int button);
  319. extern void glutDetachMenu(int button);
  320.  
  321. /* GLUT callback sub-api */
  322. extern void glutDisplayFunc(void (*)(void));
  323. extern void glutReshapeFunc(void (*)(int width, int height));
  324. extern void glutKeyboardFunc(void (*)(unsigned char key, int x, int y));
  325. extern void glutMouseFunc(void (*)(int button, int state, int x, int y));
  326. extern void glutMotionFunc(void (*)(int x, int y));
  327. extern void glutPassiveMotionFunc(void (*)(int x, int y));
  328. extern void glutEntryFunc(void (*)(int state));
  329. extern void glutVisibilityFunc(void (*)(int state));
  330. extern void glutIdleFunc(void (*)(void));
  331. extern void glutTimerFunc(unsigned int millis, void (*)(int value), int value);
  332. extern void glutMenuStateFunc(void (*)(int state));
  333. #if (GLUT_API_VERSION >= 2)
  334. extern void glutSpecialFunc(void (*)(int key, int x, int y));
  335. extern void glutSpaceballMotionFunc(void (*)(int x, int y, int z));
  336. extern void glutSpaceballRotateFunc(void (*)(int x, int y, int z));
  337. extern void glutSpaceballButtonFunc(void (*)(int button, int state));
  338. extern void glutButtonBoxFunc(void (*)(int button, int state));
  339. extern void glutDialsFunc(void (*)(int dial, int value));
  340. extern void glutTabletMotionFunc(void (*)(int x, int y));
  341. extern void glutTabletButtonFunc(void (*)(int button, int state, int x, int y));
  342. #if (GLUT_API_VERSION >= 3)
  343. extern void glutMenuStatusFunc(void (*)(int status, int x, int y));
  344. extern void glutOverlayDisplayFunc(void (*)(void));
  345. #endif
  346. #endif
  347.  
  348. /* GLUT color index sub-api */
  349. extern void glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
  350. extern GLfloat glutGetColor(int ndx, int component);
  351. extern void glutCopyColormap(int win);
  352.  
  353. /* GLUT state retrieval sub-api */
  354. extern int glutGet(GLenum type);
  355. extern int glutDeviceGet(GLenum type);
  356. #if (GLUT_API_VERSION >= 2)
  357. /* GLUT extension support sub-API */
  358. extern int glutExtensionSupported(char *name);
  359. #endif
  360. #if (GLUT_API_VERSION >= 3)
  361. extern int glutGetModifiers(void);
  362. extern int glutLayerGet(GLenum type);
  363. #endif
  364.  
  365. /* GLUT font sub-API */
  366. extern void glutBitmapCharacter(void *font, int character);
  367. extern int glutBitmapWidth(void *font, int character);
  368. extern void glutStrokeCharacter(void *font, int character);
  369. extern int glutStrokeWidth(void *font, int character);
  370.  
  371. /* GLUT pre-built models sub-API */
  372. extern void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
  373. extern void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
  374. extern void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
  375. extern void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
  376. extern void glutWireCube(GLdouble size);
  377. extern void glutSolidCube(GLdouble size);
  378. extern void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
  379. extern void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
  380. extern void glutWireDodecahedron(void);
  381. extern void glutSolidDodecahedron(void);
  382. extern void glutWireTeapot(GLdouble size);
  383. extern void glutSolidTeapot(GLdouble size);
  384. extern void glutWireOctahedron(void);
  385. extern void glutSolidOctahedron(void);
  386. extern void glutWireTetrahedron(void);
  387. extern void glutSolidTetrahedron(void);
  388. extern void glutWireIcosahedron(void);
  389. extern void glutSolidIcosahedron(void);
  390.  
  391. #ifdef __cplusplus
  392. }
  393.  
  394. #endif
  395. #endif                  /* __glut_h__ */
  396.