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