X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=include%2FGL%2Ffreeglut_std.h;h=ce0ad2ab003a0107f8c280389ebbe8fa2a307f87;hb=38af3c363f39b393fe466510f2d1c2de8cde0beb;hp=f79923394fdcbbd7072f970e1635abdc76edc25b;hpb=356c71cfd2e068359d499e428bba55563d03bd9f;p=freeglut diff --git a/include/GL/freeglut_std.h b/include/GL/freeglut_std.h index f799233..ce0ad2a 100644 --- a/include/GL/freeglut_std.h +++ b/include/GL/freeglut_std.h @@ -43,7 +43,7 @@ */ /* Define FREEGLUT_LIB_PRAGMAS to 1 to include library - * pragmas or to 1 to exclude library pragmas. + * pragmas or to 0 to exclude library pragmas. * The default behavior depends on the compiler/platform. */ # ifndef FREEGLUT_LIB_PRAGMAS @@ -57,8 +57,10 @@ # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN 1 # endif -# define NOMINMAX -# include +# ifndef NOMINMAX +# define NOMINMAX +# endif +# include /* Windows static library */ # ifdef FREEGLUT_STATIC @@ -117,8 +119,19 @@ /* * Always include OpenGL and GLU headers */ -#include -#include +/* Note: FREEGLUT_GLES1 and FREEGLUT_GLES2 are 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_GLES2 +# include +# include +#elif FREEGLUT_GLES1 +# include +# include +#else +# include +# include +#endif /* * GLUT API macro definitions -- the special key codes: @@ -171,8 +184,6 @@ #define GLUT_MULTISAMPLE 0x0080 #define GLUT_STEREO 0x0100 #define GLUT_LUMINANCE 0x0200 -#define GLUT_CAPTIONLESS 0x0400 -#define GLUT_BORDERLESS 0x0800 /* * GLUT API macro definitions -- windows and menu related definitions @@ -513,15 +524,21 @@ FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* stri /* * Geometry functions, see freeglut_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 ); +#ifndef GL_ES_VERSION_2_0 +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 ); +#endif +#ifndef EGL_VERSION_1_0 +FGAPI void FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks ); +#endif + +#ifndef GL_ES_VERSION_2_0 +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 ); @@ -530,12 +547,16 @@ FGAPI void FGAPIENTRY glutWireTetrahedron( void ); FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); FGAPI void FGAPIENTRY glutWireIcosahedron( void ); FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); +#endif /* * Teapot rendering functions, found in freeglut_teapot.c */ +/* TODO: doesn't work with GLES1 yet */ +#ifndef EGL_VERSION_1_0 FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size ); FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size ); +#endif /* * Game mode functions, see freeglut_gamemode.c @@ -574,6 +595,50 @@ FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); 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