1 //  ---------------------------------------------------------------------------
2 //
3 //  @file       MiniGLUT.h
4 //  @brief      A subset of GLUT definitions needed to compile helper functions
5 //              implemented in TwEventGLUT.c
6 //
7 //  notes:    - Private header
8 //            - AntTweakBar.dll does not need to link with GLUT,
9 //              it just needs some definitions for its helper functions.
10 //            - This header is provided to avoid the need of having GLUT
11 //              installed to recompile AntTweakBar.
12 //            - Do not use this header in your own programs, better use the
13 //              GLUT.h header from the actual GLUT library SDK :
14 //              http://opengl.org/resources/libraries/glut
15 //
16 //  ---------------------------------------------------------------------------
17 
18 #if !defined MINI_GLUT_INCLUDED
19 #define MINI_GLUT_INCLUDED
20 
21 #if defined(_WIN32) || defined(_WIN64)
22 #   define WIN32_LEAN_AND_MEAN
23 #   include <windows.h> // needed by gl.h
24 #   define GLUT_CALL     __stdcall
25 #   define GLUT_CALLBACK __cdecl
26 #   define GLUT_API      __declspec(dllimport)
27 #else
28 #   define GLUT_CALL
29 #   define GLUT_CALLBACK
30 #   define GLUT_API      extern
31 #endif
32 
33 #if defined(_MACOSX)
34 #   include <OpenGL/gl.h>
35 #   include <OpenGL/glu.h>
36 #else
37 #   include <GL/gl.h>  // must be included after windows.h
38 #   include <GL/glu.h>
39 #endif
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 
46 // Mouse buttons
47 #define GLUT_LEFT_BUTTON    0
48 #define GLUT_MIDDLE_BUTTON  1
49 #define GLUT_RIGHT_BUTTON   2
50 
51 // Mouse button state
52 #define GLUT_DOWN           0
53 #define GLUT_UP             1
54 
55 // glutGetModifiers return mask
56 #define GLUT_ACTIVE_SHIFT   1
57 #define GLUT_ACTIVE_CTRL    2
58 #define GLUT_ACTIVE_ALT     4
59 
60 // function keys
61 #define GLUT_KEY_F1         1
62 #define GLUT_KEY_F2         2
63 #define GLUT_KEY_F3         3
64 #define GLUT_KEY_F4         4
65 #define GLUT_KEY_F5         5
66 #define GLUT_KEY_F6         6
67 #define GLUT_KEY_F7         7
68 #define GLUT_KEY_F8         8
69 #define GLUT_KEY_F9         9
70 #define GLUT_KEY_F10        10
71 #define GLUT_KEY_F11        11
72 #define GLUT_KEY_F12        12
73 
74 // directional keys
75 #define GLUT_KEY_LEFT       100
76 #define GLUT_KEY_UP         101
77 #define GLUT_KEY_RIGHT      102
78 #define GLUT_KEY_DOWN       103
79 #define GLUT_KEY_PAGE_UP    104
80 #define GLUT_KEY_PAGE_DOWN  105
81 #define GLUT_KEY_HOME       106
82 #define GLUT_KEY_END        107
83 #define GLUT_KEY_INSERT     108
84 
85 // display mode bit masks
86 #define GLUT_RGB            0
87 #define GLUT_RGBA           GLUT_RGB
88 #define GLUT_INDEX          1
89 #define GLUT_SINGLE         0
90 #define GLUT_DOUBLE         2
91 #define GLUT_ACCUM          4
92 #define GLUT_ALPHA          8
93 #define GLUT_DEPTH          16
94 #define GLUT_STENCIL        32
95 
96 // timer
97 #define GLUT_ELAPSED_TIME   ((GLenum) 700)
98 
99 
100 // functions subset
101 GLUT_API void GLUT_CALL glutInit(int *argcp, char **argv);
102 GLUT_API void GLUT_CALL glutInitDisplayMode(unsigned int mode);
103 GLUT_API int  GLUT_CALL glutCreateWindow(const char *title);
104 GLUT_API int  GLUT_CALL glutGetWindow(void);
105 GLUT_API void GLUT_CALL glutSetWindow(int win);
106 GLUT_API int  GLUT_CALL glutCreateSubWindow(int win, int x, int y, int width, int height);
107 GLUT_API int  GLUT_CALL glutGet(GLenum type);
108 GLUT_API void GLUT_CALL glutSwapBuffers();
109 GLUT_API void GLUT_CALL glutPostRedisplay();
110 GLUT_API void GLUT_CALL glutInitWindowPosition(int x, int y);
111 GLUT_API void GLUT_CALL glutInitWindowSize(int width, int height);
112 GLUT_API void GLUT_CALL glutPositionWindow(int x, int y);
113 GLUT_API void GLUT_CALL glutReshapeWindow(int width, int height);
114 GLUT_API void GLUT_CALL glutMainLoop();
115 GLUT_API int  GLUT_CALL glutCreateMenu(void (GLUT_CALLBACK *func)(int));
116 GLUT_API void GLUT_CALL glutDisplayFunc(void (GLUT_CALLBACK *func)(void));
117 GLUT_API void GLUT_CALL glutReshapeFunc(void (GLUT_CALLBACK *func)(int width, int height));
118 GLUT_API void GLUT_CALL glutKeyboardFunc(void (GLUT_CALLBACK *func)(unsigned char key, int x, int y));
119 GLUT_API void GLUT_CALL glutMouseFunc(void (GLUT_CALLBACK *func)(int button, int state, int x, int y));
120 GLUT_API void GLUT_CALL glutMotionFunc(void (GLUT_CALLBACK *func)(int x, int y));
121 GLUT_API void GLUT_CALL glutPassiveMotionFunc(void (GLUT_CALLBACK *func)(int x, int y));
122 GLUT_API void GLUT_CALL glutSpecialFunc(void (GLUT_CALLBACK *func)(int key, int x, int y));
123 GLUT_API int  GLUT_CALL glutGetModifiers(void);
124 GLUT_API void GLUT_CALL glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
125 GLUT_API void GLUT_CALL glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
126 GLUT_API void GLUT_CALL glutSolidTeapot(GLdouble size);
127 
128 // GLUT exit problem workaround (see glut.h)
129 #if (defined(_WIN32) || defined(_WIN64)) && !defined(GLUT_DISABLE_ATEXIT_HACK)
130     extern void __cdecl exit(int);
131     GLUT_API void GLUT_CALL __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
glutInit_ATEXIT_HACK(int * argcp,char ** argv)132     static void GLUT_CALL glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
133     #define glutInit glutInit_ATEXIT_HACK
134 #endif
135 
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif // !defined MINI_GLUT_INCLUDED
142 
143