1 | #ifndef __FREEGLUT_STD_H__ |
2 | #define __FREEGLUT_STD_H__ |
3 | |
4 | /* |
5 | * freeglut_std.h |
6 | * |
7 | * The GLUT-compatible part of 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 | * Under windows, we have to differentiate between static and dynamic libraries |
37 | */ |
38 | #ifdef _WIN32 |
39 | /* #pragma may not be supported by some compilers. |
40 | * Discussion by FreeGLUT developers suggests that |
41 | * Visual C++ specific code involving pragmas may |
42 | * need to move to a separate header. 24th Dec 2003 |
43 | */ |
44 | |
45 | /* Define FREEGLUT_LIB_PRAGMAS to 1 to include library |
46 | * pragmas or to 0 to exclude library pragmas. |
47 | * The default behavior depends on the compiler/platform. |
48 | */ |
49 | # ifndef FREEGLUT_LIB_PRAGMAS |
50 | # if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) |
51 | # define FREEGLUT_LIB_PRAGMAS 1 |
52 | # else |
53 | # define FREEGLUT_LIB_PRAGMAS 0 |
54 | # endif |
55 | # endif |
56 | |
57 | # ifndef WIN32_LEAN_AND_MEAN |
58 | # define WIN32_LEAN_AND_MEAN 1 |
59 | # endif |
60 | # ifndef NOMINMAX |
61 | # define NOMINMAX |
62 | # endif |
63 | # include <windows.h> |
64 | |
65 | /* Windows static library */ |
66 | # ifdef FREEGLUT_STATIC |
67 | |
68 | # define FGAPI |
69 | # define FGAPIENTRY |
70 | |
71 | /* Link with Win32 static freeglut lib */ |
72 | # if FREEGLUT_LIB_PRAGMAS |
73 | # ifdef NDEBUG |
74 | # pragma comment (lib, "freeglut_static.lib") |
75 | # else |
76 | # pragma comment (lib, "freeglut_staticd.lib") |
77 | # endif |
78 | # endif |
79 | |
80 | /* Windows shared library (DLL) */ |
81 | # else |
82 | |
83 | # define FGAPIENTRY __stdcall |
84 | # if defined(FREEGLUT_EXPORTS) |
85 | # define FGAPI __declspec(dllexport) |
86 | # else |
87 | # define FGAPI __declspec(dllimport) |
88 | |
89 | /* Link with Win32 shared freeglut lib */ |
90 | # if FREEGLUT_LIB_PRAGMAS |
91 | # ifdef NDEBUG |
92 | # pragma comment (lib, "freeglut.lib") |
93 | # else |
94 | # pragma comment (lib, "freeglutd.lib") |
95 | # endif |
96 | # endif |
97 | |
98 | # endif |
99 | |
100 | # endif |
101 | |
102 | /* Drag in other Windows libraries as required by FreeGLUT */ |
103 | # if FREEGLUT_LIB_PRAGMAS |
104 | # pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ |
105 | # pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ |
106 | # pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ |
107 | # pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ |
108 | # pragma comment (lib, "user32.lib") /* link Windows user lib */ |
109 | # endif |
110 | |
111 | #else |
112 | |
113 | /* Non-Windows definition of FGAPI and FGAPIENTRY */ |
114 | # define FGAPI |
115 | # define FGAPIENTRY |
116 | |
117 | #endif |
118 | |
119 | /* |
120 | * The freeglut and GLUT API versions |
121 | */ |
122 | #define FREEGLUT 1 |
123 | #define GLUT_API_VERSION 6 |
124 | #define GLUT_XLIB_IMPLEMENTATION 13 |
125 | /* Deprecated: |
126 | cf. http://sourceforge.net/mailarchive/forum.php?thread_name=CABcAi1hw7cr4xtigckaGXB5X8wddLfMcbA_rZ3NAuwMrX_zmsw%40mail.gmail.com&forum_name=freeglut-developer */ |
127 | #define FREEGLUT_VERSION_2_0 1 |
128 | |
129 | /* |
130 | * Always include OpenGL and GLU headers |
131 | */ |
132 | /* Note: FREEGLUT_GLES is only used to cleanly bootstrap headers |
133 | inclusion here; use GLES constants directly |
134 | (e.g. GL_ES_VERSION_2_0) for all other needs */ |
135 | #ifdef FREEGLUT_GLES |
136 | # include <EGL/egl.h> |
137 | # include <GLES/gl.h> |
138 | # include <GLES2/gl2.h> |
139 | #elif __APPLE__ |
140 | # include <OpenGL/gl.h> |
141 | # include <OpenGL/glu.h> |
142 | #else |
143 | # include <GL/gl.h> |
144 | # include <GL/glu.h> |
145 | #endif |
146 | |
147 | /* |
148 | * GLUT API macro definitions -- the special key codes: |
149 | */ |
150 | #define GLUT_KEY_F1 0x0001 |
151 | #define GLUT_KEY_F2 0x0002 |
152 | #define GLUT_KEY_F3 0x0003 |
153 | #define GLUT_KEY_F4 0x0004 |
154 | #define GLUT_KEY_F5 0x0005 |
155 | #define GLUT_KEY_F6 0x0006 |
156 | #define GLUT_KEY_F7 0x0007 |
157 | #define GLUT_KEY_F8 0x0008 |
158 | #define GLUT_KEY_F9 0x0009 |
159 | #define GLUT_KEY_F10 0x000A |
160 | #define GLUT_KEY_F11 0x000B |
161 | #define GLUT_KEY_F12 0x000C |
162 | #define GLUT_KEY_LEFT 0x0064 |
163 | #define GLUT_KEY_UP 0x0065 |
164 | #define GLUT_KEY_RIGHT 0x0066 |
165 | #define GLUT_KEY_DOWN 0x0067 |
166 | #define GLUT_KEY_PAGE_UP 0x0068 |
167 | #define GLUT_KEY_PAGE_DOWN 0x0069 |
168 | #define GLUT_KEY_HOME 0x006A |
169 | #define GLUT_KEY_END 0x006B |
170 | #define GLUT_KEY_INSERT 0x006C |
171 | |
172 | /* |
173 | * GLUT API macro definitions -- mouse state definitions |
174 | */ |
175 | #define GLUT_LEFT_BUTTON 0x0000 |
176 | #define GLUT_MIDDLE_BUTTON 0x0001 |
177 | #define GLUT_RIGHT_BUTTON 0x0002 |
178 | #define GLUT_DOWN 0x0000 |
179 | #define GLUT_UP 0x0001 |
180 | #define GLUT_LEFT 0x0000 |
181 | #define GLUT_ENTERED 0x0001 |
182 | |
183 | /* |
184 | * GLUT API macro definitions -- the display mode definitions |
185 | */ |
186 | #define GLUT_RGB 0x0000 |
187 | #define GLUT_RGBA 0x0000 |
188 | #define GLUT_INDEX 0x0001 |
189 | #define GLUT_SINGLE 0x0000 |
190 | #define GLUT_DOUBLE 0x0002 |
191 | #define GLUT_ACCUM 0x0004 |
192 | #define GLUT_ALPHA 0x0008 |
193 | #define GLUT_DEPTH 0x0010 |
194 | #define GLUT_STENCIL 0x0020 |
195 | #define GLUT_MULTISAMPLE 0x0080 |
196 | #define GLUT_STEREO 0x0100 |
197 | #define GLUT_LUMINANCE 0x0200 |
198 | |
199 | /* |
200 | * GLUT API macro definitions -- windows and menu related definitions |
201 | */ |
202 | #define 0x0000 |
203 | #define 0x0001 |
204 | #define GLUT_NOT_VISIBLE 0x0000 |
205 | #define GLUT_VISIBLE 0x0001 |
206 | #define GLUT_HIDDEN 0x0000 |
207 | #define GLUT_FULLY_RETAINED 0x0001 |
208 | #define GLUT_PARTIALLY_RETAINED 0x0002 |
209 | #define GLUT_FULLY_COVERED 0x0003 |
210 | |
211 | /* |
212 | * GLUT API macro definitions -- fonts definitions |
213 | * |
214 | * Steve Baker suggested to make it binary compatible with GLUT: |
215 | */ |
216 | #if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) |
217 | # define GLUT_STROKE_ROMAN ((void *)0x0000) |
218 | # define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) |
219 | # define GLUT_BITMAP_9_BY_15 ((void *)0x0002) |
220 | # define GLUT_BITMAP_8_BY_13 ((void *)0x0003) |
221 | # define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004) |
222 | # define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005) |
223 | # define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006) |
224 | # define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007) |
225 | # define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008) |
226 | #else |
227 | /* |
228 | * I don't really know if it's a good idea... But here it goes: |
229 | */ |
230 | extern void* glutStrokeRoman; |
231 | extern void* glutStrokeMonoRoman; |
232 | extern void* glutBitmap9By15; |
233 | extern void* glutBitmap8By13; |
234 | extern void* glutBitmapTimesRoman10; |
235 | extern void* glutBitmapTimesRoman24; |
236 | extern void* glutBitmapHelvetica10; |
237 | extern void* glutBitmapHelvetica12; |
238 | extern void* glutBitmapHelvetica18; |
239 | |
240 | /* |
241 | * Those pointers will be used by following definitions: |
242 | */ |
243 | # define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman) |
244 | # define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman) |
245 | # define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15) |
246 | # define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13) |
247 | # define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10) |
248 | # define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24) |
249 | # define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10) |
250 | # define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12) |
251 | # define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18) |
252 | #endif |
253 | |
254 | /* |
255 | * GLUT API macro definitions -- the glutGet parameters |
256 | */ |
257 | #define GLUT_WINDOW_X 0x0064 |
258 | #define GLUT_WINDOW_Y 0x0065 |
259 | #define GLUT_WINDOW_WIDTH 0x0066 |
260 | #define GLUT_WINDOW_HEIGHT 0x0067 |
261 | #define GLUT_WINDOW_BUFFER_SIZE 0x0068 |
262 | #define GLUT_WINDOW_STENCIL_SIZE 0x0069 |
263 | #define GLUT_WINDOW_DEPTH_SIZE 0x006A |
264 | #define GLUT_WINDOW_RED_SIZE 0x006B |
265 | #define GLUT_WINDOW_GREEN_SIZE 0x006C |
266 | #define GLUT_WINDOW_BLUE_SIZE 0x006D |
267 | #define GLUT_WINDOW_ALPHA_SIZE 0x006E |
268 | #define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F |
269 | #define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070 |
270 | #define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071 |
271 | #define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072 |
272 | #define GLUT_WINDOW_DOUBLEBUFFER 0x0073 |
273 | #define GLUT_WINDOW_RGBA 0x0074 |
274 | #define GLUT_WINDOW_PARENT 0x0075 |
275 | #define GLUT_WINDOW_NUM_CHILDREN 0x0076 |
276 | #define GLUT_WINDOW_COLORMAP_SIZE 0x0077 |
277 | #define GLUT_WINDOW_NUM_SAMPLES 0x0078 |
278 | #define GLUT_WINDOW_STEREO 0x0079 |
279 | #define GLUT_WINDOW_CURSOR 0x007A |
280 | |
281 | #define GLUT_SCREEN_WIDTH 0x00C8 |
282 | #define GLUT_SCREEN_HEIGHT 0x00C9 |
283 | #define GLUT_SCREEN_WIDTH_MM 0x00CA |
284 | #define GLUT_SCREEN_HEIGHT_MM 0x00CB |
285 | #define 0x012C |
286 | #define GLUT_DISPLAY_MODE_POSSIBLE 0x0190 |
287 | #define GLUT_INIT_WINDOW_X 0x01F4 |
288 | #define GLUT_INIT_WINDOW_Y 0x01F5 |
289 | #define GLUT_INIT_WINDOW_WIDTH 0x01F6 |
290 | #define GLUT_INIT_WINDOW_HEIGHT 0x01F7 |
291 | #define GLUT_INIT_DISPLAY_MODE 0x01F8 |
292 | #define GLUT_ELAPSED_TIME 0x02BC |
293 | #define GLUT_WINDOW_FORMAT_ID 0x007B |
294 | |
295 | /* |
296 | * GLUT API macro definitions -- the glutDeviceGet parameters |
297 | */ |
298 | #define GLUT_HAS_KEYBOARD 0x0258 |
299 | #define GLUT_HAS_MOUSE 0x0259 |
300 | #define GLUT_HAS_SPACEBALL 0x025A |
301 | #define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B |
302 | #define GLUT_HAS_TABLET 0x025C |
303 | #define GLUT_NUM_MOUSE_BUTTONS 0x025D |
304 | #define GLUT_NUM_SPACEBALL_BUTTONS 0x025E |
305 | #define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F |
306 | #define GLUT_NUM_DIALS 0x0260 |
307 | #define GLUT_NUM_TABLET_BUTTONS 0x0261 |
308 | #define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262 |
309 | #define GLUT_DEVICE_KEY_REPEAT 0x0263 |
310 | #define GLUT_HAS_JOYSTICK 0x0264 |
311 | #define GLUT_OWNS_JOYSTICK 0x0265 |
312 | #define GLUT_JOYSTICK_BUTTONS 0x0266 |
313 | #define GLUT_JOYSTICK_AXES 0x0267 |
314 | #define GLUT_JOYSTICK_POLL_RATE 0x0268 |
315 | |
316 | /* |
317 | * GLUT API macro definitions -- the glutLayerGet parameters |
318 | */ |
319 | #define GLUT_OVERLAY_POSSIBLE 0x0320 |
320 | #define GLUT_LAYER_IN_USE 0x0321 |
321 | #define GLUT_HAS_OVERLAY 0x0322 |
322 | #define GLUT_TRANSPARENT_INDEX 0x0323 |
323 | #define GLUT_NORMAL_DAMAGED 0x0324 |
324 | #define GLUT_OVERLAY_DAMAGED 0x0325 |
325 | |
326 | /* |
327 | * GLUT API macro definitions -- the glutVideoResizeGet parameters |
328 | */ |
329 | #define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384 |
330 | #define GLUT_VIDEO_RESIZE_IN_USE 0x0385 |
331 | #define GLUT_VIDEO_RESIZE_X_DELTA 0x0386 |
332 | #define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387 |
333 | #define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388 |
334 | #define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389 |
335 | #define GLUT_VIDEO_RESIZE_X 0x038A |
336 | #define GLUT_VIDEO_RESIZE_Y 0x038B |
337 | #define GLUT_VIDEO_RESIZE_WIDTH 0x038C |
338 | #define GLUT_VIDEO_RESIZE_HEIGHT 0x038D |
339 | |
340 | /* |
341 | * GLUT API macro definitions -- the glutUseLayer parameters |
342 | */ |
343 | #define GLUT_NORMAL 0x0000 |
344 | #define GLUT_OVERLAY 0x0001 |
345 | |
346 | /* |
347 | * GLUT API macro definitions -- the glutGetModifiers parameters |
348 | */ |
349 | #define GLUT_ACTIVE_SHIFT 0x0001 |
350 | #define GLUT_ACTIVE_CTRL 0x0002 |
351 | #define GLUT_ACTIVE_ALT 0x0004 |
352 | |
353 | /* |
354 | * GLUT API macro definitions -- the glutSetCursor parameters |
355 | */ |
356 | #define GLUT_CURSOR_RIGHT_ARROW 0x0000 |
357 | #define GLUT_CURSOR_LEFT_ARROW 0x0001 |
358 | #define GLUT_CURSOR_INFO 0x0002 |
359 | #define GLUT_CURSOR_DESTROY 0x0003 |
360 | #define GLUT_CURSOR_HELP 0x0004 |
361 | #define GLUT_CURSOR_CYCLE 0x0005 |
362 | #define GLUT_CURSOR_SPRAY 0x0006 |
363 | #define GLUT_CURSOR_WAIT 0x0007 |
364 | #define GLUT_CURSOR_TEXT 0x0008 |
365 | #define GLUT_CURSOR_CROSSHAIR 0x0009 |
366 | #define GLUT_CURSOR_UP_DOWN 0x000A |
367 | #define GLUT_CURSOR_LEFT_RIGHT 0x000B |
368 | #define GLUT_CURSOR_TOP_SIDE 0x000C |
369 | #define GLUT_CURSOR_BOTTOM_SIDE 0x000D |
370 | #define GLUT_CURSOR_LEFT_SIDE 0x000E |
371 | #define GLUT_CURSOR_RIGHT_SIDE 0x000F |
372 | #define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010 |
373 | #define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011 |
374 | #define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012 |
375 | #define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013 |
376 | #define GLUT_CURSOR_INHERIT 0x0064 |
377 | #define GLUT_CURSOR_NONE 0x0065 |
378 | #define GLUT_CURSOR_FULL_CROSSHAIR 0x0066 |
379 | |
380 | /* |
381 | * GLUT API macro definitions -- RGB color component specification definitions |
382 | */ |
383 | #define GLUT_RED 0x0000 |
384 | #define GLUT_GREEN 0x0001 |
385 | #define GLUT_BLUE 0x0002 |
386 | |
387 | /* |
388 | * GLUT API macro definitions -- additional keyboard and joystick definitions |
389 | */ |
390 | #define GLUT_KEY_REPEAT_OFF 0x0000 |
391 | #define GLUT_KEY_REPEAT_ON 0x0001 |
392 | #define GLUT_KEY_REPEAT_DEFAULT 0x0002 |
393 | |
394 | #define GLUT_JOYSTICK_BUTTON_A 0x0001 |
395 | #define GLUT_JOYSTICK_BUTTON_B 0x0002 |
396 | #define GLUT_JOYSTICK_BUTTON_C 0x0004 |
397 | #define GLUT_JOYSTICK_BUTTON_D 0x0008 |
398 | |
399 | /* |
400 | * GLUT API macro definitions -- game mode definitions |
401 | */ |
402 | #define GLUT_GAME_MODE_ACTIVE 0x0000 |
403 | #define GLUT_GAME_MODE_POSSIBLE 0x0001 |
404 | #define GLUT_GAME_MODE_WIDTH 0x0002 |
405 | #define GLUT_GAME_MODE_HEIGHT 0x0003 |
406 | #define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004 |
407 | #define GLUT_GAME_MODE_REFRESH_RATE 0x0005 |
408 | #define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 |
409 | |
410 | /* |
411 | * Initialization functions, see fglut_init.c |
412 | */ |
413 | FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); |
414 | FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y ); |
415 | FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height ); |
416 | FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode ); |
417 | FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode ); |
418 | |
419 | /* |
420 | * Process loop function, see fg_main.c |
421 | */ |
422 | FGAPI void FGAPIENTRY glutMainLoop( void ); |
423 | |
424 | /* |
425 | * Window management functions, see fg_window.c |
426 | */ |
427 | FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); |
428 | FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); |
429 | FGAPI void FGAPIENTRY glutDestroyWindow( int window ); |
430 | FGAPI void FGAPIENTRY glutSetWindow( int window ); |
431 | FGAPI int FGAPIENTRY glutGetWindow( void ); |
432 | FGAPI void FGAPIENTRY glutSetWindowTitle( const char* title ); |
433 | FGAPI void FGAPIENTRY glutSetIconTitle( const char* title ); |
434 | FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height ); |
435 | FGAPI void FGAPIENTRY glutPositionWindow( int x, int y ); |
436 | FGAPI void FGAPIENTRY glutShowWindow( void ); |
437 | FGAPI void FGAPIENTRY glutHideWindow( void ); |
438 | FGAPI void FGAPIENTRY glutIconifyWindow( void ); |
439 | FGAPI void FGAPIENTRY glutPushWindow( void ); |
440 | FGAPI void FGAPIENTRY glutPopWindow( void ); |
441 | FGAPI void FGAPIENTRY glutFullScreen( void ); |
442 | |
443 | /* |
444 | * Display-related functions, see fg_display.c |
445 | */ |
446 | FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); |
447 | FGAPI void FGAPIENTRY glutPostRedisplay( void ); |
448 | FGAPI void FGAPIENTRY glutSwapBuffers( void ); |
449 | |
450 | /* |
451 | * Mouse cursor functions, see fg_cursor.c |
452 | */ |
453 | FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); |
454 | FGAPI void FGAPIENTRY glutSetCursor( int cursor ); |
455 | |
456 | /* |
457 | * Overlay stuff, see fg_overlay.c |
458 | */ |
459 | FGAPI void FGAPIENTRY glutEstablishOverlay( void ); |
460 | FGAPI void FGAPIENTRY glutRemoveOverlay( void ); |
461 | FGAPI void FGAPIENTRY glutUseLayer( GLenum layer ); |
462 | FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void ); |
463 | FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window ); |
464 | FGAPI void FGAPIENTRY glutShowOverlay( void ); |
465 | FGAPI void FGAPIENTRY glutHideOverlay( void ); |
466 | |
467 | /* |
468 | * Menu stuff, see fg_menu.c |
469 | */ |
470 | FGAPI int FGAPIENTRY ( void (* callback)( int ) ); |
471 | FGAPI void FGAPIENTRY ( int ); |
472 | FGAPI int FGAPIENTRY ( void ); |
473 | FGAPI void FGAPIENTRY ( int ); |
474 | FGAPI void FGAPIENTRY ( const char* label, int value ); |
475 | FGAPI void FGAPIENTRY ( const char* label, int ); |
476 | FGAPI void FGAPIENTRY ( int item, const char* label, int value ); |
477 | FGAPI void FGAPIENTRY ( int item, const char* label, int value ); |
478 | FGAPI void FGAPIENTRY ( int item ); |
479 | FGAPI void FGAPIENTRY ( int button ); |
480 | FGAPI void FGAPIENTRY ( int button ); |
481 | |
482 | /* |
483 | * Global callback functions, see fg_callbacks.c |
484 | */ |
485 | FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); |
486 | FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); |
487 | |
488 | /* |
489 | * Window-specific callback functions, see fg_callbacks.c |
490 | */ |
491 | FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); |
492 | FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); |
493 | FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ); |
494 | FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ); |
495 | FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ); |
496 | FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ); |
497 | FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ); |
498 | FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ); |
499 | FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ); |
500 | |
501 | FGAPI void FGAPIENTRY glutKeyboardDownFunc( void (* callback)( unsigned char, int, int ) ); |
502 | FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ); |
503 | FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ); |
504 | FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); |
505 | FGAPI void FGAPIENTRY ( void (* callback)( int ) ); |
506 | FGAPI void FGAPIENTRY ( void (* callback)( int, int, int ) ); |
507 | FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ); |
508 | FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ); |
509 | |
510 | FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ); |
511 | FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ); |
512 | FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ); |
513 | FGAPI void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ); |
514 | FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ); |
515 | FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); |
516 | FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); |
517 | |
518 | /* |
519 | * State setting and retrieval functions, see fg_state.c |
520 | */ |
521 | FGAPI int FGAPIENTRY glutGet( GLenum query ); |
522 | FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); |
523 | FGAPI int FGAPIENTRY glutGetModifiers( void ); |
524 | FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); |
525 | |
526 | /* |
527 | * Font stuff, see fg_font.c |
528 | */ |
529 | FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); |
530 | FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); |
531 | FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); |
532 | FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); |
533 | FGAPI GLfloat FGAPIENTRY glutStrokeWidthf( void* font, int character ); /* GLUT 3.8 */ |
534 | FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string ); |
535 | FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string ); |
536 | FGAPI GLfloat FGAPIENTRY glutStrokeLengthf( void* font, const unsigned char *string ); /* GLUT 3.8 */ |
537 | |
538 | /* |
539 | * Geometry functions, see fg_geometry.c |
540 | */ |
541 | |
542 | FGAPI void FGAPIENTRY glutWireCube( double size ); |
543 | FGAPI void FGAPIENTRY glutSolidCube( double size ); |
544 | FGAPI void FGAPIENTRY glutWireSphere( double radius, GLint slices, GLint stacks ); |
545 | FGAPI void FGAPIENTRY glutSolidSphere( double radius, GLint slices, GLint stacks ); |
546 | FGAPI void FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks ); |
547 | FGAPI void FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks ); |
548 | FGAPI void FGAPIENTRY glutWireTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); |
549 | FGAPI void FGAPIENTRY glutSolidTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); |
550 | FGAPI void FGAPIENTRY glutWireDodecahedron( void ); |
551 | FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); |
552 | FGAPI void FGAPIENTRY glutWireOctahedron( void ); |
553 | FGAPI void FGAPIENTRY glutSolidOctahedron( void ); |
554 | FGAPI void FGAPIENTRY glutWireTetrahedron( void ); |
555 | FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); |
556 | FGAPI void FGAPIENTRY glutWireIcosahedron( void ); |
557 | FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); |
558 | |
559 | /* |
560 | * Teapot rendering functions, found in fg_teapot.c |
561 | * NB: front facing polygons have clockwise winding, not counter clockwise |
562 | */ |
563 | FGAPI void FGAPIENTRY glutWireTeapot( double size ); |
564 | FGAPI void FGAPIENTRY glutSolidTeapot( double size ); |
565 | |
566 | /* |
567 | * Game mode functions, see fg_gamemode.c |
568 | */ |
569 | FGAPI void FGAPIENTRY glutGameModeString( const char* string ); |
570 | FGAPI int FGAPIENTRY glutEnterGameMode( void ); |
571 | FGAPI void FGAPIENTRY glutLeaveGameMode( void ); |
572 | FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); |
573 | |
574 | /* |
575 | * Video resize functions, see fg_videoresize.c |
576 | */ |
577 | FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); |
578 | FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); |
579 | FGAPI void FGAPIENTRY glutStopVideoResizing( void ); |
580 | FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); |
581 | FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); |
582 | |
583 | /* |
584 | * Colormap functions, see fg_misc.c |
585 | */ |
586 | FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); |
587 | FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); |
588 | FGAPI void FGAPIENTRY glutCopyColormap( int window ); |
589 | |
590 | /* |
591 | * Misc keyboard and joystick functions, see fg_misc.c |
592 | */ |
593 | FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); |
594 | FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); |
595 | FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); |
596 | |
597 | /* |
598 | * Misc functions, see fg_misc.c |
599 | */ |
600 | FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); |
601 | FGAPI void FGAPIENTRY glutReportErrors( void ); |
602 | |
603 | /* Comment from glut.h of classic GLUT: |
604 | |
605 | Win32 has an annoying issue where there are multiple C run-time |
606 | libraries (CRTs). If the executable is linked with a different CRT |
607 | from the GLUT DLL, the GLUT DLL will not share the same CRT static |
608 | data seen by the executable. In particular, atexit callbacks registered |
609 | in the executable will not be called if GLUT calls its (different) |
610 | exit routine). GLUT is typically built with the |
611 | "/MD" option (the CRT with multithreading DLL support), but the Visual |
612 | C++ linker default is "/ML" (the single threaded CRT). |
613 | |
614 | One workaround to this issue is requiring users to always link with |
615 | the same CRT as GLUT is compiled with. That requires users supply a |
616 | non-standard option. GLUT 3.7 has its own built-in workaround where |
617 | the executable's "exit" function pointer is covertly passed to GLUT. |
618 | GLUT then calls the executable's exit function pointer to ensure that |
619 | any "atexit" calls registered by the application are called if GLUT |
620 | needs to exit. |
621 | |
622 | Note that the __glut*WithExit routines should NEVER be called directly. |
623 | To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ |
624 | |
625 | /* to get the prototype for exit() */ |
626 | #include <stdlib.h> |
627 | |
628 | #if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) |
629 | FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); |
630 | FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); |
631 | FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int)); |
632 | #ifndef FREEGLUT_BUILDING_LIB |
633 | #if defined(__GNUC__) |
634 | #define FGUNUSED __attribute__((unused)) |
635 | #else |
636 | #define FGUNUSED |
637 | #endif |
638 | static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } |
639 | #define glutInit glutInit_ATEXIT_HACK |
640 | static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } |
641 | #define glutCreateWindow glutCreateWindow_ATEXIT_HACK |
642 | static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); } |
643 | #define glutCreateMenu glutCreateMenu_ATEXIT_HACK |
644 | #endif |
645 | #endif |
646 | |
647 | #ifdef __cplusplus |
648 | } |
649 | #endif |
650 | |
651 | /*** END OF FILE ***/ |
652 | |
653 | #endif /* __FREEGLUT_STD_H__ */ |
654 | |
655 | |