1 #ifndef __glut_h__
2 #define __glut_h__
3 
4 /* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */
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 #if defined(_WIN32)
11 
12 /* GLUT 3.7 now tries to avoid including <windows.h>
13    to avoid name space pollution, but Win32's <GL/gl.h>
14    needs APIENTRY and WINGDIAPI defined properly. */
15 # if 0
16 #  define  WIN32_LEAN_AND_MEAN
17 #  include <windows.h>
18 # else
19    /* XXX This is from Win32's <windef.h> */
20 #  ifndef APIENTRY
21 #   define GLUT_APIENTRY_DEFINED
22 #   if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
23 #    define APIENTRY    __stdcall
24 #   else
25 #    define APIENTRY
26 #   endif
27 #  endif
28    /* XXX This is from Win32's <winnt.h> */
29 #  ifndef CALLBACK
30 #   if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
31 #    define CALLBACK __stdcall
32 #   else
33 #    define CALLBACK
34 #   endif
35 #  endif
36    /* XXX This is from Win32's <wingdi.h> and <winnt.h> */
37 #  ifndef WINGDIAPI
38 #   define GLUT_WINGDIAPI_DEFINED
39 #   define WINGDIAPI __declspec(dllimport)
40 #  endif
41    /* XXX This is from Win32's <ctype.h> */
42 #  ifndef _WCHAR_T_DEFINED
43 typedef unsigned short wchar_t;
44 #   define _WCHAR_T_DEFINED
45 #  endif
46 # endif
47 
48 #pragma comment (lib, "winmm.lib")     /* link with Windows MultiMedia lib */
49 #pragma comment (lib, "opengl32.lib")  /* link with Microsoft OpenGL lib */
50 #pragma comment (lib, "glu32.lib")     /* link with OpenGL Utility lib */
51 
52 #pragma warning (disable:4244)	/* Disable bogus conversion warnings. */
53 #pragma warning (disable:4305)  /* VC++ 5.0 version of above warning. */
54 
55 #endif
56 
57 #include <GL/gl.h>
58 #include <GL/glu.h>
59 
60 /* define APIENTRY and CALLBACK to null string if we aren't on Win32 */
61 #if !defined(_WIN32)
62 #define APIENTRY
63 #define GLUT_APIENTRY_DEFINED
64 #define CALLBACK
65 #endif
66 
67 #ifdef __cplusplus
68 extern "C" {
69 #endif
70 
71 /**
72  GLUT API revision history:
73 
74  GLUT_API_VERSION is updated to reflect incompatible GLUT
75  API changes (interface changes, semantic changes, deletions,
76  or additions).
77 
78  GLUT_API_VERSION=1  First public release of GLUT.  11/29/94
79 
80  GLUT_API_VERSION=2  Added support for OpenGL/GLX multisampling,
81  extension.  Supports new input devices like tablet, dial and button
82  box, and Spaceball.  Easy to query OpenGL extensions.
83 
84  GLUT_API_VERSION=3  glutMenuStatus added.
85 
86  GLUT_API_VERSION=4  glutInitDisplayString, glutWarpPointer,
87  glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
88  video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
89  glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
90  glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
91 **/
92 #ifndef GLUT_API_VERSION  /* allow this to be overriden */
93 #define GLUT_API_VERSION		3
94 #endif
95 
96 /**
97  GLUT implementation revision history:
98 
99  GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
100  API revisions and implementation revisions (ie, bug fixes).
101 
102  GLUT_XLIB_IMPLEMENTATION=1  mjk's first public release of
103  GLUT Xlib-based implementation.  11/29/94
104 
105  GLUT_XLIB_IMPLEMENTATION=2  mjk's second public release of
106  GLUT Xlib-based implementation providing GLUT version 2
107  interfaces.
108 
109  GLUT_XLIB_IMPLEMENTATION=3  mjk's GLUT 2.2 images. 4/17/95
110 
111  GLUT_XLIB_IMPLEMENTATION=4  mjk's GLUT 2.3 images. 6/?/95
112 
113  GLUT_XLIB_IMPLEMENTATION=5  mjk's GLUT 3.0 images. 10/?/95
114 
115  GLUT_XLIB_IMPLEMENTATION=7  mjk's GLUT 3.1+ with glutWarpPoitner.  7/24/96
116 
117  GLUT_XLIB_IMPLEMENTATION=8  mjk's GLUT 3.1+ with glutWarpPoitner
118  and video resize.  1/3/97
119 
120  GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
121 
122  GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
123 
124  GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
125 
126  GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 release with GameGLUT support.
127 **/
128 #ifndef GLUT_XLIB_IMPLEMENTATION  /* Allow this to be overriden. */
129 #define GLUT_XLIB_IMPLEMENTATION	13
130 #endif
131 
132 /* Display mode bit masks. */
133 #define GLUT_RGB			0
134 #define GLUT_RGBA			GLUT_RGB
135 #define GLUT_INDEX			1
136 #define GLUT_SINGLE			0
137 #define GLUT_DOUBLE			2
138 #define GLUT_ACCUM			4
139 #define GLUT_ALPHA			8
140 #define GLUT_DEPTH			16
141 #define GLUT_STENCIL			32
142 #if (GLUT_API_VERSION >= 2)
143 #define GLUT_MULTISAMPLE		128
144 #define GLUT_STEREO			256
145 #endif
146 #if (GLUT_API_VERSION >= 3)
147 #define GLUT_LUMINANCE			512
148 #endif
149 
150 /* Mouse buttons. */
151 #define GLUT_LEFT_BUTTON		0
152 #define GLUT_MIDDLE_BUTTON		1
153 #define GLUT_RIGHT_BUTTON		2
154 
155 /* Mouse button  state. */
156 #define GLUT_DOWN			0
157 #define GLUT_UP				1
158 
159 #if (GLUT_API_VERSION >= 2)
160 /* function keys */
161 #define GLUT_KEY_F1			1
162 #define GLUT_KEY_F2			2
163 #define GLUT_KEY_F3			3
164 #define GLUT_KEY_F4			4
165 #define GLUT_KEY_F5			5
166 #define GLUT_KEY_F6			6
167 #define GLUT_KEY_F7			7
168 #define GLUT_KEY_F8			8
169 #define GLUT_KEY_F9			9
170 #define GLUT_KEY_F10			10
171 #define GLUT_KEY_F11			11
172 #define GLUT_KEY_F12			12
173 /* directional keys */
174 #define GLUT_KEY_LEFT			100
175 #define GLUT_KEY_UP			101
176 #define GLUT_KEY_RIGHT			102
177 #define GLUT_KEY_DOWN			103
178 #define GLUT_KEY_PAGE_UP		104
179 #define GLUT_KEY_PAGE_DOWN		105
180 #define GLUT_KEY_HOME			106
181 #define GLUT_KEY_END			107
182 #define GLUT_KEY_INSERT			108
183 #endif
184 
185 /* Entry/exit  state. */
186 #define GLUT_LEFT			0
187 #define GLUT_ENTERED			1
188 
189 /* Menu usage  state. */
190 #define GLUT_MENU_NOT_IN_USE		0
191 #define GLUT_MENU_IN_USE		1
192 
193 /* Visibility  state. */
194 #define GLUT_NOT_VISIBLE		0
195 #define GLUT_VISIBLE			1
196 
197 /* Window status  state. */
198 #define GLUT_HIDDEN			0
199 #define GLUT_FULLY_RETAINED		1
200 #define GLUT_PARTIALLY_RETAINED		2
201 #define GLUT_FULLY_COVERED		3
202 
203 /* Color index component selection values. */
204 #define GLUT_RED			0
205 #define GLUT_GREEN			1
206 #define GLUT_BLUE			2
207 
208 /* Layers for use. */
209 #define GLUT_NORMAL			0
210 #define GLUT_OVERLAY			1
211 
212 #if defined(_WIN32)
213 /* Stroke font constants (use these in GLUT program). */
214 #define GLUT_STROKE_ROMAN		((void*)0)
215 #define GLUT_STROKE_MONO_ROMAN		((void*)1)
216 
217 /* Bitmap font constants (use these in GLUT program). */
218 #define GLUT_BITMAP_9_BY_15		((void*)2)
219 #define GLUT_BITMAP_8_BY_13		((void*)3)
220 #define GLUT_BITMAP_TIMES_ROMAN_10	((void*)4)
221 #define GLUT_BITMAP_TIMES_ROMAN_24	((void*)5)
222 #if (GLUT_API_VERSION >= 3)
223 #define GLUT_BITMAP_HELVETICA_10	((void*)6)
224 #define GLUT_BITMAP_HELVETICA_12	((void*)7)
225 #define GLUT_BITMAP_HELVETICA_18	((void*)8)
226 #endif
227 #else
228 /* Stroke font opaque addresses (use constants instead in source code). */
229 extern void *glutStrokeRoman;
230 extern void *glutStrokeMonoRoman;
231 
232 /* Stroke font constants (use these in GLUT program). */
233 #define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
234 #define GLUT_STROKE_MONO_ROMAN		(&glutStrokeMonoRoman)
235 
236 /* Bitmap font opaque addresses (use constants instead in source code). */
237 extern void *glutBitmap9By15;
238 extern void *glutBitmap8By13;
239 extern void *glutBitmapTimesRoman10;
240 extern void *glutBitmapTimesRoman24;
241 extern void *glutBitmapHelvetica10;
242 extern void *glutBitmapHelvetica12;
243 extern void *glutBitmapHelvetica18;
244 
245 /* Bitmap font constants (use these in GLUT program). */
246 #define GLUT_BITMAP_9_BY_15		(&glutBitmap9By15)
247 #define GLUT_BITMAP_8_BY_13		(&glutBitmap8By13)
248 #define GLUT_BITMAP_TIMES_ROMAN_10	(&glutBitmapTimesRoman10)
249 #define GLUT_BITMAP_TIMES_ROMAN_24	(&glutBitmapTimesRoman24)
250 #if (GLUT_API_VERSION >= 3)
251 #define GLUT_BITMAP_HELVETICA_10	(&glutBitmapHelvetica10)
252 #define GLUT_BITMAP_HELVETICA_12	(&glutBitmapHelvetica12)
253 #define GLUT_BITMAP_HELVETICA_18	(&glutBitmapHelvetica18)
254 #endif
255 #endif
256 
257 /* glutGet parameters. */
258 #define GLUT_WINDOW_X			100
259 #define GLUT_WINDOW_Y			101
260 #define GLUT_WINDOW_WIDTH		102
261 #define GLUT_WINDOW_HEIGHT		103
262 #define GLUT_WINDOW_BUFFER_SIZE		104
263 #define GLUT_WINDOW_STENCIL_SIZE	105
264 #define GLUT_WINDOW_DEPTH_SIZE		106
265 #define GLUT_WINDOW_RED_SIZE		107
266 #define GLUT_WINDOW_GREEN_SIZE		108
267 #define GLUT_WINDOW_BLUE_SIZE		109
268 #define GLUT_WINDOW_ALPHA_SIZE		110
269 #define GLUT_WINDOW_ACCUM_RED_SIZE	111
270 #define GLUT_WINDOW_ACCUM_GREEN_SIZE	112
271 #define GLUT_WINDOW_ACCUM_BLUE_SIZE	113
272 #define GLUT_WINDOW_ACCUM_ALPHA_SIZE	114
273 #define GLUT_WINDOW_DOUBLEBUFFER	115
274 #define GLUT_WINDOW_RGBA		116
275 #define GLUT_WINDOW_PARENT		117
276 #define GLUT_WINDOW_NUM_CHILDREN	118
277 #define GLUT_WINDOW_COLORMAP_SIZE	119
278 #if (GLUT_API_VERSION >= 2)
279 #define GLUT_WINDOW_NUM_SAMPLES		120
280 #define GLUT_WINDOW_STEREO		121
281 #endif
282 #if (GLUT_API_VERSION >= 3)
283 #define GLUT_WINDOW_CURSOR		122
284 #endif
285 #define GLUT_SCREEN_WIDTH		200
286 #define GLUT_SCREEN_HEIGHT		201
287 #define GLUT_SCREEN_WIDTH_MM		202
288 #define GLUT_SCREEN_HEIGHT_MM		203
289 #define GLUT_MENU_NUM_ITEMS		300
290 #define GLUT_DISPLAY_MODE_POSSIBLE	400
291 #define GLUT_INIT_WINDOW_X		500
292 #define GLUT_INIT_WINDOW_Y		501
293 #define GLUT_INIT_WINDOW_WIDTH		502
294 #define GLUT_INIT_WINDOW_HEIGHT		503
295 #define GLUT_INIT_DISPLAY_MODE		504
296 #if (GLUT_API_VERSION >= 2)
297 #define GLUT_ELAPSED_TIME		700
298 #endif
299 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
300 #define GLUT_WINDOW_FORMAT_ID		123
301 #endif
302 
303 #if (GLUT_API_VERSION >= 2)
304 /* glutDeviceGet parameters. */
305 #define GLUT_HAS_KEYBOARD		600
306 #define GLUT_HAS_MOUSE			601
307 #define GLUT_HAS_SPACEBALL		602
308 #define GLUT_HAS_DIAL_AND_BUTTON_BOX	603
309 #define GLUT_HAS_TABLET			604
310 #define GLUT_NUM_MOUSE_BUTTONS		605
311 #define GLUT_NUM_SPACEBALL_BUTTONS	606
312 #define GLUT_NUM_BUTTON_BOX_BUTTONS	607
313 #define GLUT_NUM_DIALS			608
314 #define GLUT_NUM_TABLET_BUTTONS		609
315 #endif
316 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
317 #define GLUT_DEVICE_IGNORE_KEY_REPEAT   610
318 #define GLUT_DEVICE_KEY_REPEAT          611
319 #define GLUT_HAS_JOYSTICK		612
320 #define GLUT_OWNS_JOYSTICK		613
321 #define GLUT_JOYSTICK_BUTTONS		614
322 #define GLUT_JOYSTICK_AXES		615
323 #define GLUT_JOYSTICK_POLL_RATE		616
324 #endif
325 
326 #if (GLUT_API_VERSION >= 3)
327 /* glutLayerGet parameters. */
328 #define GLUT_OVERLAY_POSSIBLE           800
329 #define GLUT_LAYER_IN_USE		801
330 #define GLUT_HAS_OVERLAY		802
331 #define GLUT_TRANSPARENT_INDEX		803
332 #define GLUT_NORMAL_DAMAGED		804
333 #define GLUT_OVERLAY_DAMAGED		805
334 
335 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
336 /* glutVideoResizeGet parameters. */
337 #define GLUT_VIDEO_RESIZE_POSSIBLE	900
338 #define GLUT_VIDEO_RESIZE_IN_USE	901
339 #define GLUT_VIDEO_RESIZE_X_DELTA	902
340 #define GLUT_VIDEO_RESIZE_Y_DELTA	903
341 #define GLUT_VIDEO_RESIZE_WIDTH_DELTA	904
342 #define GLUT_VIDEO_RESIZE_HEIGHT_DELTA	905
343 #define GLUT_VIDEO_RESIZE_X		906
344 #define GLUT_VIDEO_RESIZE_Y		907
345 #define GLUT_VIDEO_RESIZE_WIDTH		908
346 #define GLUT_VIDEO_RESIZE_HEIGHT	909
347 #endif
348 
349 /* glutUseLayer parameters. */
350 #define GLUT_NORMAL			0
351 #define GLUT_OVERLAY			1
352 
353 /* glutGetModifiers return mask. */
354 #define GLUT_ACTIVE_SHIFT               1
355 #define GLUT_ACTIVE_CTRL                2
356 #define GLUT_ACTIVE_ALT                 4
357 
358 /* glutSetCursor parameters. */
359 /* Basic arrows. */
360 #define GLUT_CURSOR_RIGHT_ARROW		0
361 #define GLUT_CURSOR_LEFT_ARROW		1
362 /* Symbolic cursor shapes. */
363 #define GLUT_CURSOR_INFO		2
364 #define GLUT_CURSOR_DESTROY		3
365 #define GLUT_CURSOR_HELP		4
366 #define GLUT_CURSOR_CYCLE		5
367 #define GLUT_CURSOR_SPRAY		6
368 #define GLUT_CURSOR_WAIT		7
369 #define GLUT_CURSOR_TEXT		8
370 #define GLUT_CURSOR_CROSSHAIR		9
371 /* Directional cursors. */
372 #define GLUT_CURSOR_UP_DOWN		10
373 #define GLUT_CURSOR_LEFT_RIGHT		11
374 /* Sizing cursors. */
375 #define GLUT_CURSOR_TOP_SIDE		12
376 #define GLUT_CURSOR_BOTTOM_SIDE		13
377 #define GLUT_CURSOR_LEFT_SIDE		14
378 #define GLUT_CURSOR_RIGHT_SIDE		15
379 #define GLUT_CURSOR_TOP_LEFT_CORNER	16
380 #define GLUT_CURSOR_TOP_RIGHT_CORNER	17
381 #define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	18
382 #define GLUT_CURSOR_BOTTOM_LEFT_CORNER	19
383 /* Inherit from parent window. */
384 #define GLUT_CURSOR_INHERIT		100
385 /* Blank cursor. */
386 #define GLUT_CURSOR_NONE		101
387 /* Fullscreen crosshair (if available). */
388 #define GLUT_CURSOR_FULL_CROSSHAIR	102
389 #endif
390 
391 /* GLUT initialization sub-API. */
392 extern void APIENTRY glutInit(int *argcp, char **argv);
393 extern void APIENTRY glutInitDisplayMode(unsigned int mode);
394 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
395 extern void APIENTRY glutInitDisplayString(const char *string);
396 #endif
397 extern void APIENTRY glutInitWindowPosition(int x, int y);
398 extern void APIENTRY glutInitWindowSize(int width, int height);
399 extern void APIENTRY glutMainLoop(void);
400 
401 /* GLUT window sub-API. */
402 extern int APIENTRY glutCreateWindow(const char *title);
403 extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
404 extern void APIENTRY glutDestroyWindow(int win);
405 extern void APIENTRY glutPostRedisplay(void);
406 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
407 extern void APIENTRY glutPostWindowRedisplay(int win);
408 #endif
409 extern void APIENTRY glutSwapBuffers(void);
410 extern int APIENTRY glutGetWindow(void);
411 extern void APIENTRY glutSetWindow(int win);
412 extern void APIENTRY glutSetWindowTitle(const char *title);
413 extern void APIENTRY glutSetIconTitle(const char *title);
414 extern void APIENTRY glutPositionWindow(int x, int y);
415 extern void APIENTRY glutReshapeWindow(int width, int height);
416 extern void APIENTRY glutPopWindow(void);
417 extern void APIENTRY glutPushWindow(void);
418 extern void APIENTRY glutIconifyWindow(void);
419 extern void APIENTRY glutShowWindow(void);
420 extern void APIENTRY glutHideWindow(void);
421 #if (GLUT_API_VERSION >= 3)
422 extern void APIENTRY glutFullScreen(void);
423 extern void APIENTRY glutSetCursor(int cursor);
424 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
425 extern void APIENTRY glutWarpPointer(int x, int y);
426 #endif
427 
428 /* GLUT overlay sub-API. */
429 extern void APIENTRY glutEstablishOverlay(void);
430 extern void APIENTRY glutRemoveOverlay(void);
431 extern void APIENTRY glutUseLayer(GLenum layer);
432 extern void APIENTRY glutPostOverlayRedisplay(void);
433 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
434 extern void APIENTRY glutPostWindowOverlayRedisplay(int win);
435 #endif
436 extern void APIENTRY glutShowOverlay(void);
437 extern void APIENTRY glutHideOverlay(void);
438 #endif
439 
440 /* GLUT menu sub-API. */
441 extern int APIENTRY glutCreateMenu(void (*)(int));
442 extern void APIENTRY glutDestroyMenu(int menu);
443 extern int APIENTRY glutGetMenu(void);
444 extern void APIENTRY glutSetMenu(int menu);
445 extern void APIENTRY glutAddMenuEntry(const char *label, int value);
446 extern void APIENTRY glutAddSubMenu(const char *label, int submenu);
447 extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
448 extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
449 extern void APIENTRY glutRemoveMenuItem(int item);
450 extern void APIENTRY glutAttachMenu(int button);
451 extern void APIENTRY glutDetachMenu(int button);
452 
453 /* GLUT window callback sub-API. */
454 extern void APIENTRY glutDisplayFunc(void (*func)(void));
455 extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height));
456 extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
457 extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y));
458 extern void APIENTRY glutMotionFunc(void (*func)(int x, int y));
459 extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y));
460 extern void APIENTRY glutEntryFunc(void (*func)(int state));
461 extern void APIENTRY glutVisibilityFunc(void (*func)(int state));
462 extern void APIENTRY glutIdleFunc(void (*func)(void));
463 extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
464 extern void APIENTRY glutMenuStateFunc(void (*func)(int state));
465 #if (GLUT_API_VERSION >= 2)
466 extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y));
467 extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z));
468 extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z));
469 extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state));
470 extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state));
471 extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value));
472 extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y));
473 extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y));
474 #if (GLUT_API_VERSION >= 3)
475 extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y));
476 extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void));
477 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
478 extern void APIENTRY glutWindowStatusFunc(void (*func)(int state));
479 #endif
480 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
481 extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));
482 extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y));
483 extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
484 #endif
485 #endif
486 #endif
487 
488 /* GLUT color index sub-API. */
489 extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
490 extern GLfloat APIENTRY glutGetColor(int ndx, int component);
491 extern void APIENTRY glutCopyColormap(int win);
492 
493 /* GLUT state retrieval sub-API. */
494 extern int APIENTRY glutGet(GLenum type);
495 extern int APIENTRY glutDeviceGet(GLenum type);
496 #if (GLUT_API_VERSION >= 2)
497 /* GLUT extension support sub-API */
498 extern int APIENTRY glutExtensionSupported(const char *name);
499 #endif
500 #if (GLUT_API_VERSION >= 3)
501 extern int APIENTRY glutGetModifiers(void);
502 extern int APIENTRY glutLayerGet(GLenum type);
503 #endif
504 
505 /* GLUT font sub-API */
506 extern void APIENTRY glutBitmapCharacter(void *font, int character);
507 extern int APIENTRY glutBitmapWidth(void *font, int character);
508 extern void APIENTRY glutStrokeCharacter(void *font, int character);
509 extern int APIENTRY glutStrokeWidth(void *font, int character);
510 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
511 extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
512 extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
513 #endif
514 
515 /* GLUT pre-built models sub-API */
516 extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
517 extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
518 extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
519 extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
520 extern void APIENTRY glutWireCube(GLdouble size);
521 extern void APIENTRY glutSolidCube(GLdouble size);
522 extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
523 extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
524 extern void APIENTRY glutWireDodecahedron(void);
525 extern void APIENTRY glutSolidDodecahedron(void);
526 extern void APIENTRY glutWireTeapot(GLdouble size);
527 extern void APIENTRY glutSolidTeapot(GLdouble size);
528 extern void APIENTRY glutWireOctahedron(void);
529 extern void APIENTRY glutSolidOctahedron(void);
530 extern void APIENTRY glutWireTetrahedron(void);
531 extern void APIENTRY glutSolidTetrahedron(void);
532 extern void APIENTRY glutWireIcosahedron(void);
533 extern void APIENTRY glutSolidIcosahedron(void);
534 
535 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
536 /* GLUT video resize sub-API. */
537 extern int APIENTRY glutVideoResizeGet(GLenum param);
538 extern void APIENTRY glutSetupVideoResizing(void);
539 extern void APIENTRY glutStopVideoResizing(void);
540 extern void APIENTRY glutVideoResize(int x, int y, int width, int height);
541 extern void APIENTRY glutVideoPan(int x, int y, int width, int height);
542 
543 /* GLUT debugging sub-API. */
544 extern void APIENTRY glutReportErrors(void);
545 #endif
546 
547 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
548 /* GLUT device control sub-API. */
549 /* glutSetKeyRepeat modes. */
550 #define GLUT_KEY_REPEAT_OFF		0
551 #define GLUT_KEY_REPEAT_ON		1
552 #define GLUT_KEY_REPEAT_DEFAULT		2
553 
554 /* Joystick button masks. */
555 #define GLUT_JOYSTICK_BUTTON_A		1
556 #define GLUT_JOYSTICK_BUTTON_B		2
557 #define GLUT_JOYSTICK_BUTTON_C		4
558 #define GLUT_JOYSTICK_BUTTON_D		8
559 
560 extern void APIENTRY glutIgnoreKeyRepeat(int ignore);
561 extern void APIENTRY glutSetKeyRepeat(int repeatMode);
562 extern void APIENTRY glutForceJoystickFunc(void);
563 
564 /* GLUT game mode sub-API. */
565 /* glutGameModeGet. */
566 #define GLUT_GAME_MODE_ACTIVE           0
567 #define GLUT_GAME_MODE_POSSIBLE         1
568 #define GLUT_GAME_MODE_WIDTH            2
569 #define GLUT_GAME_MODE_HEIGHT           3
570 #define GLUT_GAME_MODE_PIXEL_DEPTH      4
571 #define GLUT_GAME_MODE_REFRESH_RATE     5
572 #define GLUT_GAME_MODE_DISPLAY_CHANGED  6
573 
574 extern void APIENTRY glutGameModeString(const char *string);
575 extern int APIENTRY glutEnterGameMode(void);
576 extern void APIENTRY glutLeaveGameMode(void);
577 extern int APIENTRY glutGameModeGet(GLenum mode);
578 #endif
579 
580 #ifdef __cplusplus
581 }
582 
583 #endif
584 
585 #ifdef GLUT_APIENTRY_DEFINED
586 # undef GLUT_APIENTRY_DEFINED
587 # undef APIENTRY
588 #endif
589 
590 #ifdef GLUT_WINGDIAPI_DEFINED
591 # undef GLUT_WINGDIAPI_DEFINED
592 # undef WINGDIAPI
593 #endif
594 
595 #endif                  /* __glut_h__ */
596