X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=include%2FGL%2Ffreeglut_std.h;h=5ffc5a082849906dd9547c60a053966303c8e067;hb=630b996f22fe007ccbf7e93cdf5ff12bf2c3cf05;hp=2acbabd1e938b10347dbcc72031cb2930e47e894;hpb=d67937396dc33c86017012859b2d9ed010fc6c88;p=freeglut diff --git a/include/GL/freeglut_std.h b/include/GL/freeglut_std.h index 2acbabd..5ffc5a0 100644 --- a/include/GL/freeglut_std.h +++ b/include/GL/freeglut_std.h @@ -35,61 +35,77 @@ /* * Under windows, we have to differentiate between static and dynamic libraries */ -#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) - +#ifdef _WIN32 /* #pragma may not be supported by some compilers. * Discussion by FreeGLUT developers suggests that * Visual C++ specific code involving pragmas may * need to move to a separate header. 24th Dec 2003 - */ + */ + +/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library + * pragmas or to 0 to exclude library pragmas. + * The default behavior depends on the compiler/platform. + */ +# ifndef FREEGLUT_LIB_PRAGMAS +# if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) +# define FREEGLUT_LIB_PRAGMAS 1 +# else +# define FREEGLUT_LIB_PRAGMAS 0 +# endif +# endif -# define WIN32_LEAN_AND_MEAN -# define NO_MIN_MAX -# include -# undef min -# undef max +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +# ifndef NOMINMAX +# define NOMINMAX +# endif +# include /* Windows static library */ # ifdef FREEGLUT_STATIC -# define FGAPI -# define FGAPIENTRY +# define FGAPI +# define FGAPIENTRY /* Link with Win32 static freeglut lib */ -# if defined(_MSC_VER) -# pragma comment (lib, "freeglut_static.lib") +# if FREEGLUT_LIB_PRAGMAS +# ifdef NDEBUG +# pragma comment (lib, "freeglut_static.lib") +# else +# pragma comment (lib, "freeglut_staticd.lib") +# endif # endif /* Windows shared library (DLL) */ # else -# if defined(FREEGLUT_EXPORTS) -# define FGAPI __declspec(dllexport) -# else -# define FGAPI __declspec(dllimport) - - /* link with Win32 shared freeglut lib */ -# if defined(_MSC_VER) -# ifndef _WIN32_WCE +# define FGAPIENTRY __stdcall +# if defined(FREEGLUT_EXPORTS) +# define FGAPI __declspec(dllexport) +# else +# define FGAPI __declspec(dllimport) + + /* Link with Win32 shared freeglut lib */ +# if FREEGLUT_LIB_PRAGMAS +# ifdef NDEBUG # pragma comment (lib, "freeglut.lib") +# else +# pragma comment (lib, "freeglutd.lib") # endif -# endif +# endif # endif -# define FGAPIENTRY __stdcall - # endif /* Drag in other Windows libraries as required by FreeGLUT */ -# if defined(_MSC_VER) -# ifndef _WIN32_WCE -# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ -# pragma comment (lib, "user32.lib") /* link Windows user lib */ -# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ -# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ -# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ -# endif //_WIN32_WCE +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ +# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ +# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ +# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ +# pragma comment (lib, "user32.lib") /* link Windows user lib */ # endif #else @@ -105,13 +121,28 @@ */ #define FREEGLUT 1 #define GLUT_API_VERSION 4 +#define GLUT_XLIB_IMPLEMENTATION 13 +/* Deprecated: + cf. http://sourceforge.net/mailarchive/forum.php?thread_name=CABcAi1hw7cr4xtigckaGXB5X8wddLfMcbA_rZ3NAuwMrX_zmsw%40mail.gmail.com&forum_name=freeglut-developer */ #define FREEGLUT_VERSION_2_0 1 /* * Always include OpenGL and GLU headers */ -#include -#include +/* Note: FREEGLUT_GLES is only used to cleanly bootstrap headers + inclusion here; use GLES constants directly + (e.g. GL_ES_VERSION_2_0) for all other needs */ +#ifdef FREEGLUT_GLES +# include +# include +# include +#elif __APPLE__ +# include +# include +#else +# include +# include +#endif /* * GLUT API macro definitions -- the special key codes: @@ -182,7 +213,7 @@ * * Steve Baker suggested to make it binary compatible with GLUT: */ -#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) +#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) # define GLUT_STROKE_ROMAN ((void *)0x0000) # define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) # define GLUT_BITMAP_9_BY_15 ((void *)0x0002) @@ -260,7 +291,6 @@ #define GLUT_INIT_DISPLAY_MODE 0x01F8 #define GLUT_ELAPSED_TIME 0x02BC #define GLUT_WINDOW_FORMAT_ID 0x007B -#define GLUT_INIT_STATE 0x007C /* * GLUT API macro definitions -- the glutDeviceGet parameters @@ -378,6 +408,13 @@ #define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 /* + * GLUT API macro definitions -- Spaceball button definitions + */ + +#define GLUT_SPACEBALL_BUTTON_A 0x0001 +#define GLUT_SPACEBALL_BUTTON_B 0x0002 + +/* * Initialization functions, see fglut_init.c */ FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); @@ -387,12 +424,12 @@ FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode ); FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode ); /* - * Process loop function, see freeglut_main.c + * Process loop function, see fg_main.c */ FGAPI void FGAPIENTRY glutMainLoop( void ); /* - * Window management functions, see freeglut_window.c + * Window management functions, see fg_window.c */ FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); @@ -411,20 +448,20 @@ FGAPI void FGAPIENTRY glutPopWindow( void ); FGAPI void FGAPIENTRY glutFullScreen( void ); /* - * Display-connected functions, see freeglut_display.c + * Display-related functions, see fg_display.c */ FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); FGAPI void FGAPIENTRY glutPostRedisplay( void ); FGAPI void FGAPIENTRY glutSwapBuffers( void ); /* - * Mouse cursor functions, see freeglut_cursor.c + * Mouse cursor functions, see fg_cursor.c */ FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); FGAPI void FGAPIENTRY glutSetCursor( int cursor ); /* - * Overlay stuff, see freeglut_overlay.c + * Overlay stuff, see fg_overlay.c */ FGAPI void FGAPIENTRY glutEstablishOverlay( void ); FGAPI void FGAPIENTRY glutRemoveOverlay( void ); @@ -435,7 +472,7 @@ FGAPI void FGAPIENTRY glutShowOverlay( void ); FGAPI void FGAPIENTRY glutHideOverlay( void ); /* - * Menu stuff, see freeglut_menu.c + * Menu stuff, see fg_menu.c */ FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) ); FGAPI void FGAPIENTRY glutDestroyMenu( int menu ); @@ -450,13 +487,13 @@ FGAPI void FGAPIENTRY glutAttachMenu( int button ); FGAPI void FGAPIENTRY glutDetachMenu( int button ); /* - * Global callback functions, see freeglut_callbacks.c + * Global callback functions, see fg_callbacks.c */ FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); /* - * Window-specific callback functions, see freeglut_callbacks.c + * Window-specific callback functions, see fg_callbacks.c */ FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); @@ -485,7 +522,7 @@ FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); /* - * State setting and retrieval functions, see freeglut_state.c + * State setting and retrieval functions, see fg_state.c */ FGAPI int FGAPIENTRY glutGet( GLenum query ); FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); @@ -493,27 +530,29 @@ FGAPI int FGAPIENTRY glutGetModifiers( void ); FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); /* - * Font stuff, see freeglut_font.c + * Font stuff, see fg_font.c */ FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); +FGAPI GLfloat FGAPIENTRY glutStrokeWidthf( void* font, int character ); /* GLUT 3.8 */ FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string ); FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string ); +FGAPI GLfloat FGAPIENTRY glutStrokeLengthf( void* font, const unsigned char *string ); /* GLUT 3.8 */ /* - * Geometry functions, see freeglut_geometry.c + * Geometry functions, see fg_geometry.c */ -FGAPI void FGAPIENTRY glutWireCube( GLdouble size ); -FGAPI void FGAPIENTRY glutSolidCube( GLdouble size ); -FGAPI void FGAPIENTRY glutWireSphere( GLdouble radius, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutSolidSphere( GLdouble radius, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); -FGAPI void FGAPIENTRY glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); -FGAPI void FGAPIENTRY glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutWireCube( double size ); +FGAPI void FGAPIENTRY glutSolidCube( double size ); +FGAPI void FGAPIENTRY glutWireSphere( double radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidSphere( double radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutWireTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutSolidTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); FGAPI void FGAPIENTRY glutWireDodecahedron( void ); FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); FGAPI void FGAPIENTRY glutWireOctahedron( void ); @@ -524,13 +563,14 @@ FGAPI void FGAPIENTRY glutWireIcosahedron( void ); FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); /* - * Teapot rendering functions, found in freeglut_teapot.c + * Teapot rendering functions, found in fg_teapot.c + * NB: front facing polygons have clockwise winding, not counter clockwise */ -FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size ); -FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size ); +FGAPI void FGAPIENTRY glutWireTeapot( double size ); +FGAPI void FGAPIENTRY glutSolidTeapot( double size ); /* - * Game mode functions, see freeglut_gamemode.c + * Game mode functions, see fg_gamemode.c */ FGAPI void FGAPIENTRY glutGameModeString( const char* string ); FGAPI int FGAPIENTRY glutEnterGameMode( void ); @@ -538,7 +578,7 @@ FGAPI void FGAPIENTRY glutLeaveGameMode( void ); FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); /* - * Video resize functions, see freeglut_videoresize.c + * Video resize functions, see fg_videoresize.c */ FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); @@ -547,25 +587,69 @@ FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); /* - * Colormap functions, see freeglut_misc.c + * Colormap functions, see fg_misc.c */ FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); FGAPI void FGAPIENTRY glutCopyColormap( int window ); /* - * Misc keyboard and joystick functions, see freeglut_misc.c + * Misc keyboard and joystick functions, see fg_misc.c */ FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); -FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); /* DEPRECATED 11/4/02 - Do not use */ +FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); /* - * Misc functions, see freeglut_misc.c + * Misc functions, see fg_misc.c */ FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); FGAPI void FGAPIENTRY glutReportErrors( void ); +/* Comment from glut.h of classic GLUT: + + Win32 has an annoying issue where there are multiple C run-time + libraries (CRTs). If the executable is linked with a different CRT + from the GLUT DLL, the GLUT DLL will not share the same CRT static + data seen by the executable. In particular, atexit callbacks registered + in the executable will not be called if GLUT calls its (different) + exit routine). GLUT is typically built with the + "/MD" option (the CRT with multithreading DLL support), but the Visual + C++ linker default is "/ML" (the single threaded CRT). + + One workaround to this issue is requiring users to always link with + the same CRT as GLUT is compiled with. That requires users supply a + non-standard option. GLUT 3.7 has its own built-in workaround where + the executable's "exit" function pointer is covertly passed to GLUT. + GLUT then calls the executable's exit function pointer to ensure that + any "atexit" calls registered by the application are called if GLUT + needs to exit. + + Note that the __glut*WithExit routines should NEVER be called directly. + To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ + +/* to get the prototype for exit() */ +#include + +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) +FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); +FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); +FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int)); +#ifndef FREEGLUT_BUILDING_LIB +#if defined(__GNUC__) +#define FGUNUSED __attribute__((unused)) +#else +#define FGUNUSED +#endif +static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } +#define glutInit glutInit_ATEXIT_HACK +static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } +#define glutCreateWindow glutCreateWindow_ATEXIT_HACK +static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); } +#define glutCreateMenu glutCreateMenu_ATEXIT_HACK +#endif +#endif + #ifdef __cplusplus } #endif