1#ifndef __FREEGLUT_EXT_H__
2#define __FREEGLUT_EXT_H__
3
4/*
5 * freeglut_ext.h
6 *
7 * The non-GLUT-compatible extensions to the freeglut library include file
8 *
9 * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
10 * Written by Pawel W. Olszta, <olszta@sourceforge.net>
11 * Creation date: Thu Dec 2 1999
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the "Software"),
15 * to deal in the Software without restriction, including without limitation
16 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 * and/or sell copies of the Software, and to permit persons to whom the
18 * Software is furnished to do so, subject to the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be included
21 * in all copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
27 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 */
30
31#ifdef __cplusplus
32 extern "C" {
33#endif
34
35/*
36 * Additional GLUT Key definitions for the Special key function
37 */
38#define GLUT_KEY_NUM_LOCK 0x006D
39#define GLUT_KEY_BEGIN 0x006E
40#define GLUT_KEY_DELETE 0x006F
41#define GLUT_KEY_SHIFT_L 0x0070
42#define GLUT_KEY_SHIFT_R 0x0071
43#define GLUT_KEY_CTRL_L 0x0072
44#define GLUT_KEY_CTRL_R 0x0073
45#define GLUT_KEY_ALT_L 0x0074
46#define GLUT_KEY_ALT_R 0x0075
47
48/*
49 * GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window
50 */
51#define GLUT_ACTION_EXIT 0
52#define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1
53#define GLUT_ACTION_CONTINUE_EXECUTION 2
54
55/*
56 * Create a new rendering context when the user opens a new window?
57 */
58#define GLUT_CREATE_NEW_CONTEXT 0
59#define GLUT_USE_CURRENT_CONTEXT 1
60
61/*
62 * Direct/Indirect rendering context options (has meaning only in Unix/X11)
63 */
64#define GLUT_FORCE_INDIRECT_CONTEXT 0
65#define GLUT_ALLOW_DIRECT_CONTEXT 1
66#define GLUT_TRY_DIRECT_CONTEXT 2
67#define GLUT_FORCE_DIRECT_CONTEXT 3
68
69/*
70 * GLUT API Extension macro definitions -- the glutGet parameters
71 */
72#define GLUT_INIT_STATE 0x007C
73
74#define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9
75
76#define GLUT_WINDOW_BORDER_WIDTH 0x01FA
77#define GLUT_WINDOW_BORDER_HEIGHT 0x01FB
78#define GLUT_WINDOW_HEADER_HEIGHT 0x01FB /* Docs say it should always have been GLUT_WINDOW_BORDER_HEIGHT, keep this for backward compatibility */
79
80#define GLUT_VERSION 0x01FC
81
82#define GLUT_RENDERING_CONTEXT 0x01FD
83#define GLUT_DIRECT_RENDERING 0x01FE
84
85#define GLUT_FULL_SCREEN 0x01FF
86
87#define GLUT_SKIP_STALE_MOTION_EVENTS 0x0204
88
89#define GLUT_GEOMETRY_VISUALIZE_NORMALS 0x0205
90
91#define GLUT_STROKE_FONT_DRAW_JOIN_DOTS 0x0206 /* Draw dots between line segments of stroke fonts? */
92
93/*
94 * New tokens for glutInitDisplayMode.
95 * Only one GLUT_AUXn bit may be used at a time.
96 * Value 0x0400 is defined in OpenGLUT.
97 */
98#define GLUT_AUX 0x1000
99
100#define GLUT_AUX1 0x1000
101#define GLUT_AUX2 0x2000
102#define GLUT_AUX3 0x4000
103#define GLUT_AUX4 0x8000
104
105/*
106 * Context-related flags, see fg_state.c
107 * Set the requested OpenGL version
108 */
109#define GLUT_INIT_MAJOR_VERSION 0x0200
110#define GLUT_INIT_MINOR_VERSION 0x0201
111#define GLUT_INIT_FLAGS 0x0202
112#define GLUT_INIT_PROFILE 0x0203
113
114/*
115 * Flags for glutInitContextFlags, see fg_init.c
116 */
117#define GLUT_DEBUG 0x0001
118#define GLUT_FORWARD_COMPATIBLE 0x0002
119
120
121/*
122 * Flags for glutInitContextProfile, see fg_init.c
123 */
124#define GLUT_CORE_PROFILE 0x0001
125#define GLUT_COMPATIBILITY_PROFILE 0x0002
126
127/*
128 * Process loop function, see fg_main.c
129 */
130FGAPI void FGAPIENTRY glutMainLoopEvent( void );
131FGAPI void FGAPIENTRY glutLeaveMainLoop( void );
132FGAPI void FGAPIENTRY glutExit ( void );
133
134/*
135 * Window management functions, see fg_window.c
136 */
137FGAPI void FGAPIENTRY glutFullScreenToggle( void );
138FGAPI void FGAPIENTRY glutLeaveFullScreen( void );
139
140/*
141 * Menu functions
142 */
143FGAPI void FGAPIENTRY glutSetMenuFont( int menuID, void* font );
144
145/*
146 * Window-specific callback functions, see fg_callbacks.c
147 */
148FGAPI void FGAPIENTRY glutKeyboardExtFunc( void (* callback)( int, int, int ) );
149FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) );
150FGAPI void FGAPIENTRY glutPositionFunc( void (* callback)( int, int ) );
151FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) );
152FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) );
153/* And also a destruction callback for menus */
154FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) );
155
156/*
157 * State setting and retrieval functions, see fg_state.c
158 */
159FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value );
160FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size);
161/* A.Donev: User-data manipulation */
162FGAPI void* FGAPIENTRY glutGetWindowData( void );
163FGAPI void FGAPIENTRY glutSetWindowData(void* data);
164FGAPI void* FGAPIENTRY glutGetMenuData( void );
165FGAPI void FGAPIENTRY glutSetMenuData(void* data);
166
167/*
168 * Clipboard access
169 */
170#define GLUT_CLIPBOARD 0
171#define GLUT_PRIMARY 1
172#define GLUT_SECONDARY 2
173FGAPI void FGAPIENTRY glutSetClipboard(int selection, const char *string);
174FGAPI const char * FGAPIENTRY glutGetClipboard(int selection);
175
176/*
177 * Font stuff, see fg_font.c
178 */
179FGAPI int FGAPIENTRY glutBitmapHeight( void* font );
180FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font );
181FGAPI void FGAPIENTRY glutBitmapString( void* font, const unsigned char *string );
182FGAPI void FGAPIENTRY glutStrokeString( void* font, const unsigned char *string );
183
184/*
185 * Geometry functions, see fg_geometry.c
186 */
187FGAPI void FGAPIENTRY glutWireRhombicDodecahedron( void );
188FGAPI void FGAPIENTRY glutSolidRhombicDodecahedron( void );
189FGAPI void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, double offset[3], double scale );
190FGAPI void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, double offset[3], double scale );
191FGAPI void FGAPIENTRY glutWireCylinder( double radius, double height, GLint slices, GLint stacks);
192FGAPI void FGAPIENTRY glutSolidCylinder( double radius, double height, GLint slices, GLint stacks);
193
194/*
195 * Rest of functions for rendering Newell's teaset, found in fg_teapot.c
196 * NB: front facing polygons have clockwise winding, not counter clockwise
197 */
198FGAPI void FGAPIENTRY glutWireTeacup( double size );
199FGAPI void FGAPIENTRY glutSolidTeacup( double size );
200FGAPI void FGAPIENTRY glutWireTeaspoon( double size );
201FGAPI void FGAPIENTRY glutSolidTeaspoon( double size );
202
203/*
204 * Extension functions, see fg_ext.c
205 */
206typedef void (*GLUTproc)();
207FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );
208
209/*
210 * Multi-touch/multi-pointer extensions
211 */
212
213#define GLUT_HAS_MULTI 1
214
215/* TODO: add device_id parameter,
216 cf. http://sourceforge.net/mailarchive/forum.php?thread_name=20120518071314.GA28061%40perso.beuc.net&forum_name=freeglut-developer */
217FGAPI void FGAPIENTRY glutMultiEntryFunc( void (* callback)( int, int ) );
218FGAPI void FGAPIENTRY glutMultiButtonFunc( void (* callback)( int, int, int, int, int ) );
219FGAPI void FGAPIENTRY glutMultiMotionFunc( void (* callback)( int, int, int ) );
220FGAPI void FGAPIENTRY glutMultiPassiveFunc( void (* callback)( int, int, int ) );
221
222/*
223 * Joystick functions, see fg_joystick.c
224 */
225/* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */
226/* If you have a serious need for these functions in your application, please either
227 * contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net,
228 * switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's
229 * "js" library.
230 */
231int glutJoystickGetNumAxes( int ident );
232int glutJoystickGetNumButtons( int ident );
233int glutJoystickNotWorking( int ident );
234float glutJoystickGetDeadBand( int ident, int axis );
235void glutJoystickSetDeadBand( int ident, int axis, float db );
236float glutJoystickGetSaturation( int ident, int axis );
237void glutJoystickSetSaturation( int ident, int axis, float st );
238void glutJoystickSetMinRange( int ident, float *axes );
239void glutJoystickSetMaxRange( int ident, float *axes );
240void glutJoystickSetCenter( int ident, float *axes );
241void glutJoystickGetMinRange( int ident, float *axes );
242void glutJoystickGetMaxRange( int ident, float *axes );
243void glutJoystickGetCenter( int ident, float *axes );
244
245/*
246 * Initialization functions, see fg_init.c
247 */
248/* to get the typedef for va_list */
249#include <stdarg.h>
250FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion );
251FGAPI void FGAPIENTRY glutInitContextFlags( int flags );
252FGAPI void FGAPIENTRY glutInitContextProfile( int profile );
253FGAPI void FGAPIENTRY glutInitErrorFunc( void (* callback)( const char *fmt, va_list ap ) );
254FGAPI void FGAPIENTRY glutInitWarningFunc( void (* callback)( const char *fmt, va_list ap ) );
255
256/* OpenGL >= 2.0 support */
257FGAPI void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib);
258FGAPI void FGAPIENTRY glutSetVertexAttribNormal(GLint attrib);
259FGAPI void FGAPIENTRY glutSetVertexAttribTexCoord2(GLint attrib);
260
261/* Mobile platforms lifecycle */
262FGAPI void FGAPIENTRY glutInitContextFunc(void (* callback)());
263FGAPI void FGAPIENTRY glutAppStatusFunc(void (* callback)(int));
264/* state flags that can be passed to callback set by glutAppStatusFunc */
265#define GLUT_APPSTATUS_PAUSE 0x0001
266#define GLUT_APPSTATUS_RESUME 0x0002
267
268/*
269 * GLUT API macro definitions -- the display mode definitions
270 */
271#define GLUT_CAPTIONLESS 0x0400
272#define GLUT_BORDERLESS 0x0800
273#define GLUT_SRGB 0x1000
274
275#ifdef __cplusplus
276 }
277#endif
278
279/*** END OF FILE ***/
280
281#endif /* __FREEGLUT_EXT_H__ */
282