From: <sp...@us...> - 2008-11-02 19:38:08
|
Revision: 747 http://freeglut.svn.sourceforge.net/freeglut/?rev=747&view=rev Author: spanne Date: 2008-11-02 19:38:05 +0000 (Sun, 02 Nov 2008) Log Message: ----------- Make a wgl/glXGetProcAddress abstraction available internally. We will need this to get the new context creation function. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_ext.c trunk/freeglut/freeglut/src/freeglut_internal.h Modified: trunk/freeglut/freeglut/src/freeglut_ext.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_ext.c 2008-11-02 19:26:36 UTC (rev 746) +++ trunk/freeglut/freeglut/src/freeglut_ext.c 2008-11-02 19:38:05 UTC (rev 747) @@ -29,7 +29,7 @@ #include <GL/freeglut.h> #include "freeglut_internal.h" -static GLUTproc fghGetProcAddress( const char* procName ) +static GLUTproc fghGetGLUTProcAddress( const char* procName ) { /* optimization: quick initial check */ if( strncmp( procName, "glut", 4 ) != 0 ) @@ -199,23 +199,25 @@ } -GLUTproc FGAPIENTRY -glutGetProcAddress( const char *procName ) +SFG_Proc fghGetProcAddress( const char *procName ) { - GLUTproc p; - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" ); - - /* Try GLUT functions first */ - p = fghGetProcAddress( procName ); - if( p != NULL ) - return p; - - /* Try core GL functions */ #if TARGET_HOST_MS_WINDOWS - return(GLUTproc)wglGetProcAddress( ( LPCSTR )procName ); + return (SFG_Proc)wglGetProcAddress( ( LPCSTR )procName ); #elif TARGET_HOST_POSIX_X11 && defined( GLX_ARB_get_proc_address ) - return(GLUTproc)glXGetProcAddressARB( ( const GLubyte * )procName ); + return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName ); #else return NULL; #endif } + + +GLUTproc FGAPIENTRY +glutGetProcAddress( const char *procName ) +{ + GLUTproc p; + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" ); + + /* Try GLUT functions first, then core GL functions */ + p = fghGetGLUTProcAddress( procName ); + return ( p != NULL ) ? p : fghGetProcAddress( procName ); +} Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-02 19:26:36 UTC (rev 746) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-02 19:38:05 UTC (rev 747) @@ -909,6 +909,8 @@ int fgHintPresent(Window window, Atom property, Atom hint); #endif +SFG_Proc fghGetProcAddress( const char *procName ); + #endif /* FREEGLUT_INTERNAL_H */ /*** END OF FILE ***/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2008-11-05 18:45:38
|
Revision: 754 http://freeglut.svn.sourceforge.net/freeglut/?rev=754&view=rev Author: spanne Date: 2008-11-05 18:45:36 +0000 (Wed, 05 Nov 2008) Log Message: ----------- freeglut_internal.h needs some GL types, but it is not self-contained. TODO: Move freeglut.h #include into freeglut_internal.h itself? Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c trunk/freeglut/freeglut/src/freeglut_stroke_mono_roman.c trunk/freeglut/freeglut/src/freeglut_stroke_roman.c Modified: trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-05 18:24:43 UTC (rev 753) +++ trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-05 18:45:36 UTC (rev 754) @@ -40,6 +40,7 @@ * structure to match GLUT. */ +#include <GL/freeglut.h> #include "freeglut_internal.h" #if TARGET_HOST_POSIX_X11 Modified: trunk/freeglut/freeglut/src/freeglut_stroke_mono_roman.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_stroke_mono_roman.c 2008-11-05 18:24:43 UTC (rev 753) +++ trunk/freeglut/freeglut/src/freeglut_stroke_mono_roman.c 2008-11-05 18:45:36 UTC (rev 754) @@ -28,6 +28,7 @@ /* This file has been automatically generated by the genstroke utility. */ +#include <GL/freeglut.h> #include "freeglut_internal.h" /* char: 0x20 */ Modified: trunk/freeglut/freeglut/src/freeglut_stroke_roman.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_stroke_roman.c 2008-11-05 18:24:43 UTC (rev 753) +++ trunk/freeglut/freeglut/src/freeglut_stroke_roman.c 2008-11-05 18:45:36 UTC (rev 754) @@ -28,6 +28,7 @@ /* This file has been automatically generated by the genstroke utility. */ +#include <GL/freeglut.h> #include "freeglut_internal.h" /* char: 0x20 */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2008-11-17 14:50:21
|
Revision: 760 http://freeglut.svn.sourceforge.net/freeglut/?rev=760&view=rev Author: fayjf Date: 2008-11-17 14:50:08 +0000 (Mon, 17 Nov 2008) Log Message: ----------- Allowing "freeglut" to compile without errors under *nix. Before this, there were problems with conflicting definitions of the GLUT font definitions. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c trunk/freeglut/freeglut/src/freeglut_internal.h Modified: trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-06 19:17:13 UTC (rev 759) +++ trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-17 14:50:08 UTC (rev 760) @@ -54,15 +54,6 @@ float bottom ; }; -struct freeglutBitmapFont -{ - const char *name ; - const int num_chars ; - const int first ; - const void *ch ; -}; - - struct freeglutStrokeFont glutStrokeRoman ; struct freeglutStrokeFont glutStrokeMonoRoman ; Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-06 19:17:13 UTC (rev 759) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-17 14:50:08 UTC (rev 760) @@ -687,6 +687,18 @@ float xorig, yorig; /* Relative origin of the character */ }; +#if TARGET_HOST_POSIX_X11 + +struct freeglutBitmapFont +{ + const char *name ; + const int num_chars ; + const int first ; + const void *ch ; +}; + +#endif + /* The stroke font structures */ typedef struct tagSFG_StrokeVertex SFG_StrokeVertex; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2008-11-20 11:59:36
|
Revision: 761 http://freeglut.svn.sourceforge.net/freeglut/?rev=761&view=rev Author: spanne Date: 2008-11-20 11:59:29 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Yet another try to make the font definitions compile on all platforms. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c trunk/freeglut/freeglut/src/freeglut_internal.h Modified: trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-17 14:50:08 UTC (rev 760) +++ trunk/freeglut/freeglut/src/freeglut_glutfont_definitions.c 2008-11-20 11:59:29 UTC (rev 761) @@ -40,7 +40,37 @@ * structure to match GLUT. */ -#include <GL/freeglut.h> +/* + * freeglut_internal.h uses some GL types, but including the GL header portably + * is a bit tricky, so we include freeglut_std.h here, which contains the + * necessary machinery. But this poses another problem, caused by the ugly + * original defintion of the font constants in "classic" GLUT: They are defined + * as void* externally, so we move them temporarily out of the way by AN EXTREME + * CPP HACK. + */ + +#define glutStrokeRoman glutStrokeRomanIGNOREME +#define glutStrokeMonoRoman glutStrokeMonoRomanIGNOREME +#define glutBitmap9By15 glutBitmap9By15IGNOREME +#define glutBitmap8By13 glutBitmap8By13IGNOREME +#define glutBitmapTimesRoman10 glutBitmapTimesRoman10IGNOREME +#define glutBitmapTimesRoman24 glutBitmapTimesRoman24IGNOREME +#define glutBitmapHelvetica10 glutBitmapHelvetica10IGNOREME +#define glutBitmapHelvetica12 glutBitmapHelvetica12IGNOREME +#define glutBitmapHelvetica18 glutBitmapHelvetica18IGNOREME + +#include <GL/freeglut_std.h> + +#undef glutStrokeRoman +#undef glutStrokeMonoRoman +#undef glutBitmap9By15 +#undef glutBitmap8By13 +#undef glutBitmapTimesRoman10 +#undef glutBitmapTimesRoman24 +#undef glutBitmapHelvetica10 +#undef glutBitmapHelvetica12 +#undef glutBitmapHelvetica18 + #include "freeglut_internal.h" #if TARGET_HOST_POSIX_X11 @@ -54,6 +84,15 @@ float bottom ; }; +struct freeglutBitmapFont +{ + const char *name ; + const int num_chars ; + const int first ; + const void *ch ; +}; + + struct freeglutStrokeFont glutStrokeRoman ; struct freeglutStrokeFont glutStrokeMonoRoman ; Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-17 14:50:08 UTC (rev 760) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-20 11:59:29 UTC (rev 761) @@ -687,18 +687,6 @@ float xorig, yorig; /* Relative origin of the character */ }; -#if TARGET_HOST_POSIX_X11 - -struct freeglutBitmapFont -{ - const char *name ; - const int num_chars ; - const int first ; - const void *ch ; -}; - -#endif - /* The stroke font structures */ typedef struct tagSFG_StrokeVertex SFG_StrokeVertex; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-02-02 22:43:54
|
Revision: 762 http://freeglut.svn.sourceforge.net/freeglut/?rev=762&view=rev Author: fayjf Date: 2009-02-02 22:43:50 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Fixing bug [ 1804696 ] Warnings when building on OpenSolaris as updated 2/2/09 by Nigel Stewart Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_joystick.c Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2008-11-20 11:59:29 UTC (rev 761) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2009-02-02 22:43:50 UTC (rev 762) @@ -57,6 +57,11 @@ */ #endif +/* Detect both SunPro and gcc compilers on Sun Solaris */ +#if defined (__SVR4) && defined (__sun) +# define TARGET_HOST_SOLARIS 1 +#endif + #ifndef TARGET_HOST_MS_WINDOWS # define TARGET_HOST_MS_WINDOWS 0 #endif @@ -69,6 +74,10 @@ # define TARGET_HOST_MAC_OSX 0 #endif +#ifndef TARGET_HOST_SOLARIS +# define TARGET_HOST_SOLARIS 0 +#endif + /* -- FIXED CONFIGURATION LIMITS ------------------------------------------- */ #define FREEGLUT_MAX_MENUS 3 Modified: trunk/freeglut/freeglut/src/freeglut_joystick.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_joystick.c 2008-11-20 11:59:29 UTC (rev 761) +++ trunk/freeglut/freeglut/src/freeglut_joystick.c 2009-02-02 22:43:50 UTC (rev 762) @@ -1394,7 +1394,7 @@ # endif #endif -#if defined( __linux__ ) +#if defined( __linux__ ) || TARGET_HOST_SOLARIS /* Default for older Linux systems. */ joy->num_axes = 2; joy->num_buttons = 32; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-02-03 14:31:48
|
Revision: 763 http://freeglut.svn.sourceforge.net/freeglut/?rev=763&view=rev Author: fayjf Date: 2009-02-03 14:31:36 +0000 (Tue, 03 Feb 2009) Log Message: ----------- A further response to bug [ 1804696 ] Warnings when building on OpenSolaris -- per comment by Nigel Stewart on that bug report Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_joystick.c trunk/freeglut/freeglut/src/freeglut_main.c Modified: trunk/freeglut/freeglut/src/freeglut_joystick.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_joystick.c 2009-02-02 22:43:50 UTC (rev 762) +++ trunk/freeglut/freeglut/src/freeglut_joystick.c 2009-02-03 14:31:36 UTC (rev 763) @@ -1060,7 +1060,7 @@ # ifdef JS_NEW unsigned char u; # else -# if defined( __linux__ ) +# if defined( __linux__ ) || TARGET_HOST_SOLARIS int counter = 0; # endif # endif Modified: trunk/freeglut/freeglut/src/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_main.c 2009-02-02 22:43:50 UTC (rev 762) +++ trunk/freeglut/freeglut/src/freeglut_main.c 2009-02-03 14:31:36 UTC (rev 763) @@ -308,7 +308,7 @@ * 32-bit, where the GLUT API return value is also overflowed. */ unsigned long fgSystemTime(void) { -#if HAVE_GETTIMEOFDAY +#if TARGET_HOST_SOLARIS || HAVE_GETTIMEOFDAY struct timeval now; gettimeofday( &now, NULL ); return now.tv_usec/1000 + now.tv_sec*1000; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-02-13 03:22:20
|
Revision: 766 http://freeglut.svn.sourceforge.net/freeglut/?rev=766&view=rev Author: fayjf Date: 2009-02-13 03:22:17 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Adding OpenGL 3.0 context detection for Windows per e-mail from Paul Martz dated Thu 2/12/2009 9:03 AM (more or less) Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_main.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2009-02-03 21:22:08 UTC (rev 765) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2009-02-13 03:22:17 UTC (rev 766) @@ -813,6 +813,7 @@ #if TARGET_HOST_MS_WINDOWS LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); +GLboolean fgNewWGLCreateContext( SFG_Window* window ); GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type ); #endif Modified: trunk/freeglut/freeglut/src/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_main.c 2009-02-03 21:22:08 UTC (rev 765) +++ trunk/freeglut/freeglut/src/freeglut_main.c 2009-02-13 03:22:17 UTC (rev 766) @@ -1621,6 +1621,10 @@ window->Window.Context = wglCreateContext( window->Window.Device ); } + +#if !defined(_WIN32_WCE) + fgNewWGLCreateContext( window ); +#endif } window->State.NeedToResize = GL_TRUE; Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-03 21:22:08 UTC (rev 765) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 03:22:17 UTC (rev 766) @@ -283,6 +283,83 @@ #define WGL_SAMPLES_ARB 0x2042 +#ifndef WGL_ARB_create_context +#define WGL_ARB_create_context 1 +#ifdef WGL_WGLEXT_PROTOTYPES +extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *); +#endif /* WGL_WGLEXT_PROTOTYPES */ +typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); + +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +#endif + + +GLboolean fgNewWGLCreateContext( SFG_Window* window ) +{ + if( (fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) && + (fgState.MajorVersion > 2) ) + { + PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB=NULL; + + wglMakeCurrent( window->Window.Device, + window->Window.Context ); + + wglGetEntensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); + if (wglGetEntensionsStringARB) + { + const char * pWglExtString=wglGetEntensionsStringARB(window->Window.Device); + if (pWglExtString) + { + if (strstr(pWglExtString, "WGL_ARB_create_context")) + { + /* new context creation */ + HGLRC context; + int attribs[7]; + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; + + attribs[0] = WGL_CONTEXT_MAJOR_VERSION_ARB; + attribs[1] = fgState.MajorVersion; + attribs[2] = WGL_CONTEXT_MINOR_VERSION_ARB; + attribs[3] = fgState.MinorVersion; + attribs[4] = WGL_CONTEXT_FLAGS_ARB; + attribs[5] = ((fgState.ContextFlags & GLUT_DEBUG) ? WGL_CONTEXT_DEBUG_BIT_ARB : 0) | + ((fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) ? WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB : 0); + attribs[6] = 0; + + wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); + if ( wglCreateContextAttribsARB == NULL ) + { + fgError( "wglCreateContextAttribsARB not found" ); + } + + context = wglCreateContextAttribsARB( window->Window.Device, 0, attribs ); + if ( context == NULL ) + { + fgError( "Unable to create OpenGL %d.%d context (flags %x)", + fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags ); + } + else + { + fgWarning( "Success 3.0" ); + wglMakeCurrent( NULL, NULL ); + wglDeleteContext( window->Window.Context ); + window->Window.Context = context; + } + } + } + } + } + + return GL_TRUE; +} + + GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2009-02-13 18:24:49
|
Revision: 771 http://freeglut.svn.sourceforge.net/freeglut/?rev=771&view=rev Author: spanne Date: 2009-02-13 18:24:46 +0000 (Fri, 13 Feb 2009) Log Message: ----------- More refactorings: Removed useless return value. Simplified control structures even more. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2009-02-13 18:16:41 UTC (rev 770) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2009-02-13 18:24:46 UTC (rev 771) @@ -813,7 +813,7 @@ #if TARGET_HOST_MS_WINDOWS LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); -GLboolean fgNewWGLCreateContext( SFG_Window* window ); +void fgNewWGLCreateContext( SFG_Window* window ); GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type ); #endif Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:16:41 UTC (rev 770) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:24:46 UTC (rev 771) @@ -300,14 +300,17 @@ #endif -GLboolean fgNewWGLCreateContext( SFG_Window* window ) +void fgNewWGLCreateContext( SFG_Window* window ) { PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB; + HGLRC context; + int attribs[7]; + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; if( (fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) && (fgState.MajorVersion > 2) ) { - return GL_TRUE; + return; } wglMakeCurrent( window->Window.Device, @@ -316,25 +319,16 @@ wglGetEntensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); if ( wglGetEntensionsStringARB == NULL ) { - return GL_TRUE; + return; } const char * pWglExtString=wglGetEntensionsStringARB(window->Window.Device); - if ( pWglExtString == NULL ) + if (( pWglExtString == NULL ) || ( strstr(pWglExtString, "WGL_ARB_create_context") == NULL )) { - return GL_TRUE; + return; } - if ( strstr(pWglExtString, "WGL_ARB_create_context") == NULL ) - { - return GL_TRUE; - } - /* new context creation */ - HGLRC context; - int attribs[7]; - PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; - attribs[0] = WGL_CONTEXT_MAJOR_VERSION_ARB; attribs[1] = fgState.MajorVersion; attribs[2] = WGL_CONTEXT_MINOR_VERSION_ARB; @@ -356,15 +350,10 @@ fgError( "Unable to create OpenGL %d.%d context (flags %x)", fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags ); } - else - { - fgWarning( "Success 3.0" ); - wglMakeCurrent( NULL, NULL ); - wglDeleteContext( window->Window.Context ); - window->Window.Context = context; - } - return GL_TRUE; + wglMakeCurrent( NULL, NULL ); + wglDeleteContext( window->Window.Context ); + window->Window.Context = context; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-03-17 17:19:13
|
Revision: 804 http://freeglut.svn.sourceforge.net/freeglut/?rev=804&view=rev Author: fayjf Date: 2009-03-17 17:19:05 +0000 (Tue, 17 Mar 2009) Log Message: ----------- Removing some build warnings from deprecated functions for VS2008 per e-mail from Diederick Niehorster dated Tue 3/10/2009 Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_init.c trunk/freeglut/freeglut/src/freeglut_input_devices.c Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2009-03-17 15:43:25 UTC (rev 803) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2009-03-17 17:19:05 UTC (rev 804) @@ -677,6 +677,11 @@ char* geometry = NULL; int i, j, argc = *pargc; +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + size_t sLen; + errno_t err; +#endif + if( fgState.Initialised ) fgError( "illegal glutInit() reinitialization attempt" ); @@ -696,7 +701,14 @@ /* check if GLUT_FPS env var is set */ #ifndef _WIN32_WCE { +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + char* fps = NULL; + err = _dupenv_s( &fps, &sLen, "GLUT_FPS" ); + if (err) + fgError("Error getting GLUT_FPS environment variable"); +#else const char *fps = getenv( "GLUT_FPS" ); +#endif if( fps ) { int interval; @@ -707,9 +719,18 @@ else fgState.FPSInterval = interval; } +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + free ( fps ); fps = NULL; /* dupenv_s allocates a string that we must free */ +#endif } - displayName = getenv( "DISPLAY"); +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + err = _dupenv_s( &displayName, &sLen, "DISPLAY" ); + if (err) + fgError("Error getting DISPLAY environment variable"); +#else + displayName = getenv( "DISPLAY" ); +#endif for( i = 1; i < argc; i++ ) { @@ -794,6 +815,9 @@ * variable for opening the X display (see code above): */ fghInitialize( displayName ); +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + free ( displayName ); displayName = NULL; /* dupenv_s allocates a string that we must free */ +#endif /* * Geometry parsing deffered until here because we may need the screen @@ -892,12 +916,19 @@ * delimited by blanks or tabs. */ char *token ; +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + char *next_token = NULL; +#endif size_t len = strlen ( displayMode ); char *buffer = (char *)malloc ( (len+1) * sizeof(char) ); memcpy ( buffer, displayMode, len ); buffer[len] = '\0'; +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + token = strtok_s ( buffer, " \t", &next_token ); +#else token = strtok ( buffer, " \t" ); +#endif while ( token ) { /* Process this token */ @@ -1074,7 +1105,11 @@ break ; } +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + token = strtok_s ( NULL, " \t", &next_token ); +#else token = strtok ( NULL, " \t" ); +#endif } free ( buffer ); Modified: trunk/freeglut/freeglut/src/freeglut_input_devices.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_input_devices.c 2009-03-17 15:43:25 UTC (rev 803) +++ trunk/freeglut/freeglut/src/freeglut_input_devices.c 2009-03-17 17:19:05 UTC (rev 804) @@ -139,7 +139,14 @@ const char *dial_device=NULL; if( !fgState.InputDevsInitialised ) { +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + size_t sLen; + errno_t err = _dupenv_s( &dial_device, &sLen, "GLUT_DIALS_SERIAL" ); + if (err) + fgError("Error getting GLUT_DIALS_SERIAL environment variable"); +#else dial_device = getenv ( "GLUT_DIALS_SERIAL" ); +#endif #if TARGET_HOST_MS_WINDOWS if (!dial_device){ static char devname[256]; @@ -156,6 +163,9 @@ #endif if ( !dial_device ) return; if ( !( dialbox_port = serial_open ( dial_device ) ) ) return; +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + free ( dial_device ); dial_device = NULL; /* dupenv_s allocates a string that we must free */ +#endif serial_putchar(dialbox_port,DIAL_INITIALIZE); glutTimerFunc ( 10, poll_dials, 0 ); fgState.InputDevsInitialised = GL_TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2009-03-26 16:12:52
|
Revision: 806 http://freeglut.svn.sourceforge.net/freeglut/?rev=806&view=rev Author: spanne Date: 2009-03-26 16:12:42 +0000 (Thu, 26 Mar 2009) Log Message: ----------- Unbreak the build: C++ style comments are not allowed in ISO C90 Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_init.c trunk/freeglut/freeglut/src/freeglut_input_devices.c Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2009-03-19 14:55:14 UTC (rev 805) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2009-03-26 16:12:42 UTC (rev 806) @@ -677,7 +677,8 @@ char* geometry = NULL; int i, j, argc = *pargc; -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) size_t sLen; errno_t err; #endif @@ -701,7 +702,8 @@ /* check if GLUT_FPS env var is set */ #ifndef _WIN32_WCE { -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) char* fps = NULL; err = _dupenv_s( &fps, &sLen, "GLUT_FPS" ); if (err) @@ -719,12 +721,14 @@ else fgState.FPSInterval = interval; } -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) free ( fps ); fps = NULL; /* dupenv_s allocates a string that we must free */ #endif } -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) err = _dupenv_s( &displayName, &sLen, "DISPLAY" ); if (err) fgError("Error getting DISPLAY environment variable"); @@ -815,7 +819,8 @@ * variable for opening the X display (see code above): */ fghInitialize( displayName ); -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) free ( displayName ); displayName = NULL; /* dupenv_s allocates a string that we must free */ #endif @@ -916,7 +921,8 @@ * delimited by blanks or tabs. */ char *token ; -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) char *next_token = NULL; #endif size_t len = strlen ( displayMode ); @@ -924,7 +930,8 @@ memcpy ( buffer, displayMode, len ); buffer[len] = '\0'; -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) token = strtok_s ( buffer, " \t", &next_token ); #else token = strtok ( buffer, " \t" ); @@ -1105,7 +1112,8 @@ break ; } -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) token = strtok_s ( NULL, " \t", &next_token ); #else token = strtok ( NULL, " \t" ); Modified: trunk/freeglut/freeglut/src/freeglut_input_devices.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_input_devices.c 2009-03-19 14:55:14 UTC (rev 805) +++ trunk/freeglut/freeglut/src/freeglut_input_devices.c 2009-03-26 16:12:42 UTC (rev 806) @@ -138,7 +138,8 @@ { if( !fgState.InputDevsInitialised ) { -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) char *dial_device=NULL; size_t sLen; errno_t err = _dupenv_s( &dial_device, &sLen, "GLUT_DIALS_SERIAL" ); @@ -164,7 +165,8 @@ #endif if ( !dial_device ) return; if ( !( dialbox_port = serial_open ( dial_device ) ) ) return; -#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) // will return true for VC8 (VC2005) and higher + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) free ( dial_device ); dial_device = NULL; /* dupenv_s allocates a string that we must free */ #endif serial_putchar(dialbox_port,DIAL_INITIALIZE); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-07-10 16:18:07
|
Revision: 828 http://freeglut.svn.sourceforge.net/freeglut/?rev=828&view=rev Author: fayjf Date: 2009-07-10 16:18:06 +0000 (Fri, 10 Jul 2009) Log Message: ----------- Making the "AT_EXIT" hack look a bit less like a copy-and-paste Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_init.c trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_menu.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2009-06-22 18:54:41 UTC (rev 827) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2009-07-10 16:18:06 UTC (rev 828) @@ -854,13 +854,13 @@ } } -#ifdef _WIN32 -void (__cdecl *__glutExitFunc)( int retval ) = NULL; +#ifdef TARGET_HOST_MS_WINDOWS +void (__cdecl *__glutExitFunc)( int return_value ) = NULL; -void FGAPIENTRY __glutInitWithExit( int *argcp, char **argv, void (__cdecl *exitfunc)(int) ) +void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) ) { - __glutExitFunc = exitfunc; - glutInit(argcp, argv); + __glutExitFunc = exit_function; + glutInit(pargc, argv); } #endif Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2009-06-22 18:54:41 UTC (rev 827) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2009-07-10 16:18:06 UTC (rev 828) @@ -934,7 +934,7 @@ SFG_Proc fghGetProcAddress( const char *procName ); #ifdef _WIN32 -extern void (__cdecl *__glutExitFunc)( int retval ); +extern void (__cdecl *__glutExitFunc)( int return_value ); #endif #endif /* FREEGLUT_INTERNAL_H */ Modified: trunk/freeglut/freeglut/src/freeglut_menu.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_menu.c 2009-06-22 18:54:41 UTC (rev 827) +++ trunk/freeglut/freeglut/src/freeglut_menu.c 2009-07-10 16:18:06 UTC (rev 828) @@ -779,10 +779,10 @@ return fgCreateMenu( callback )->ID; } -#ifdef _WIN32 -int FGAPIENTRY __glutCreateMenuWithExit( void(* callback)( int ), void (__cdecl *exitfunc)(int) ) +#ifdef TARGET_HOST_MS_WINDOWS +int FGAPIENTRY __glutCreateMenuWithExit( void(* callback)( int ), void (__cdecl *exit_function)(int) ) { - __glutExitFunc = exitfunc; + __glutExitFunc = exit_function; return glutCreateMenu( callback ); } #endif Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-06-22 18:54:41 UTC (rev 827) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-07-10 16:18:06 UTC (rev 828) @@ -1094,9 +1094,9 @@ } #ifdef _WIN32 -int FGAPIENTRY __glutCreateWindowWithExit( const char *title, void (__cdecl *exitfunc)(int) ) +int FGAPIENTRY __glutCreateWindowWithExit( const char *title, void (__cdecl *exit_function)(int) ) { - __glutExitFunc = exitfunc; + __glutExitFunc = exit_function; return glutCreateWindow( title ); } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-01-29 04:01:30
|
Revision: 1020 http://freeglut.svn.sourceforge.net/freeglut/?rev=1020&view=rev Author: fayjf Date: 2012-01-29 04:01:24 +0000 (Sun, 29 Jan 2012) Log Message: ----------- Splitting out the platform-specific code from "fghJoystickInit" Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_joystick.c trunk/freeglut/freeglut/src/mswin/freeglut_joystick_mswin.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_joystick.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_joystick.c 2012-01-29 03:51:12 UTC (rev 1019) +++ trunk/freeglut/freeglut/src/Common/freeglut_joystick.c 2012-01-29 04:01:24 UTC (rev 1020) @@ -388,6 +388,7 @@ /* External function declarations (mostly platform-specific) */ +extern void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident ); extern void fgPlatformJoystickClose ( int ident ); /* @@ -401,6 +402,14 @@ */ #if TARGET_HOST_MACINTOSH +void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident ) +{ + fgJoystick[ ident ]->id = ident; + snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */ + fgJoystick[ ident ]->error = GL_FALSE; +} + + void fgPlatformJoystickClose ( int ident ) { ISpSuspend( ); @@ -410,6 +419,51 @@ #endif #if TARGET_HOST_MAC_OSX +void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident ) +{ + fgJoystick[ ident ]->id = ident; + fgJoystick[ ident ]->error = GL_FALSE; + fgJoystick[ ident ]->num_axes = 0; + fgJoystick[ ident ]->num_buttons = 0; + + if( numDevices < 0 ) + { + /* do first-time init (since we can't over-ride jsInit, hmm */ + numDevices = 0; + + mach_port_t masterPort; + IOReturn rv = IOMasterPort( bootstrap_port, &masterPort ); + if( rv != kIOReturnSuccess ) + { + fgWarning( "error getting master Mach port" ); + return; + } + fghJoystickFindDevices( masterPort ); + } + + if ( ident >= numDevices ) + { + fgJoystick[ ident ]->error = GL_TRUE; + return; + } + + /* get the name now too */ + CFDictionaryRef properties = getCFProperties( ioDevices[ ident ] ); + CFTypeRef ref = CFDictionaryGetValue( properties, + CFSTR( kIOHIDProductKey ) ); + if (!ref) + ref = CFDictionaryGetValue(properties, CFSTR( "USB Product Name" ) ); + + if( !ref || + !CFStringGetCString( ( CFStringRef )ref, name, 128, + CFStringGetSystemEncoding( ) ) ) + { + fgWarning( "error getting device name" ); + name[ 0 ] = '\0'; + } +} + + void fgPlatformJoystickClose ( int ident ) { ( *( fgJoystick[ ident ]->hidDev ) )-> @@ -418,6 +472,33 @@ #endif #if TARGET_HOST_POSIX_X11 +void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident ) +{ +#if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ ) + fgJoystick[ ident ]->id = ident; + fgJoystick[ ident ]->error = GL_FALSE; + + fgJoystick[ ident ]->os = calloc( 1, sizeof( struct os_specific_s ) ); + memset( fgJoystick[ ident ]->os, 0, sizeof( struct os_specific_s ) ); + if( ident < USB_IDENT_OFFSET ) + fgJoystick[ ident ]->os->is_analog = 1; + if( fgJoystick[ ident ]->os->is_analog ) + snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", AJSDEV, ident ); + else + snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", UHIDDEV, + ident - USB_IDENT_OFFSET ); +#elif defined( __linux__ ) + fgJoystick[ ident ]->id = ident; + fgJoystick[ ident ]->error = GL_FALSE; + + snprintf( fgJoystick[ident]->fname, sizeof(fgJoystick[ident]->fname), "/dev/input/js%d", ident ); + + if( access( fgJoystick[ ident ]->fname, F_OK ) != 0 ) + snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); +#endif +} + + void fgPlatformJoystickClose ( int ident ) { #if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ ) @@ -1486,98 +1567,8 @@ fgJoystick[ ident ]->num_axes = fgJoystick[ ident ]->num_buttons = 0; fgJoystick[ ident ]->error = GL_TRUE; -#if TARGET_HOST_MACINTOSH - fgJoystick[ ident ]->id = ident; - snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */ - fgJoystick[ ident ]->error = GL_FALSE; -#endif + fgPlatformJoystickInit( fgJoystick, ident ); -#if TARGET_HOST_MAC_OSX - fgJoystick[ ident ]->id = ident; - fgJoystick[ ident ]->error = GL_FALSE; - fgJoystick[ ident ]->num_axes = 0; - fgJoystick[ ident ]->num_buttons = 0; - - if( numDevices < 0 ) - { - /* do first-time init (since we can't over-ride jsInit, hmm */ - numDevices = 0; - - mach_port_t masterPort; - IOReturn rv = IOMasterPort( bootstrap_port, &masterPort ); - if( rv != kIOReturnSuccess ) - { - fgWarning( "error getting master Mach port" ); - return; - } - fghJoystickFindDevices( masterPort ); - } - - if ( ident >= numDevices ) - { - fgJoystick[ ident ]->error = GL_TRUE; - return; - } - - /* get the name now too */ - CFDictionaryRef properties = getCFProperties( ioDevices[ ident ] ); - CFTypeRef ref = CFDictionaryGetValue( properties, - CFSTR( kIOHIDProductKey ) ); - if (!ref) - ref = CFDictionaryGetValue(properties, CFSTR( "USB Product Name" ) ); - - if( !ref || - !CFStringGetCString( ( CFStringRef )ref, name, 128, - CFStringGetSystemEncoding( ) ) ) - { - fgWarning( "error getting device name" ); - name[ 0 ] = '\0'; - } -#endif - -#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) - switch( ident ) - { - case 0: - fgJoystick[ ident ]->js_id = JOYSTICKID1; - fgJoystick[ ident ]->error = GL_FALSE; - break; - case 1: - fgJoystick[ ident ]->js_id = JOYSTICKID2; - fgJoystick[ ident ]->error = GL_FALSE; - break; - default: - fgJoystick[ ident ]->num_axes = 0; - fgJoystick[ ident ]->error = GL_TRUE; - return; - } -#endif - -#if TARGET_HOST_POSIX_X11 -# if defined( __FreeBSD__ ) || defined(__FreeBSD_kernel__) || defined( __NetBSD__ ) - fgJoystick[ ident ]->id = ident; - fgJoystick[ ident ]->error = GL_FALSE; - - fgJoystick[ ident ]->os = calloc( 1, sizeof( struct os_specific_s ) ); - memset( fgJoystick[ ident ]->os, 0, sizeof( struct os_specific_s ) ); - if( ident < USB_IDENT_OFFSET ) - fgJoystick[ ident ]->os->is_analog = 1; - if( fgJoystick[ ident ]->os->is_analog ) - snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", AJSDEV, ident ); - else - snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", UHIDDEV, - ident - USB_IDENT_OFFSET ); -# elif defined( __linux__ ) - fgJoystick[ ident ]->id = ident; - fgJoystick[ ident ]->error = GL_FALSE; - - snprintf( fgJoystick[ident]->fname, sizeof(fgJoystick[ident]->fname), "/dev/input/js%d", ident ); - - if( access( fgJoystick[ ident ]->fname, F_OK ) != 0 ) - snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); -# endif -#endif - fghJoystickOpen( fgJoystick[ ident ] ); } Modified: trunk/freeglut/freeglut/src/mswin/freeglut_joystick_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/freeglut_joystick_mswin.c 2012-01-29 03:51:12 UTC (rev 1019) +++ trunk/freeglut/freeglut/src/mswin/freeglut_joystick_mswin.c 2012-01-29 04:01:24 UTC (rev 1020) @@ -30,6 +30,27 @@ #if !defined(_WIN32_WCE) +void fgPlatformJoystickInit( SFG_Joystick *fgJoystick[], int ident ) +{ + switch( ident ) + { + case 0: + fgJoystick[ ident ]->js_id = JOYSTICKID1; + fgJoystick[ ident ]->error = GL_FALSE; + break; + case 1: + fgJoystick[ ident ]->js_id = JOYSTICKID2; + fgJoystick[ ident ]->error = GL_FALSE; + break; + default: + fgJoystick[ ident ]->num_axes = 0; + fgJoystick[ ident ]->error = GL_TRUE; + return; + } +} + + + void fgPlatformJoystickClose ( int ident ) { /* Do nothing special */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-01-29 19:17:25
|
Revision: 1030 http://freeglut.svn.sourceforge.net/freeglut/?rev=1030&view=rev Author: fayjf Date: 2012-01-29 19:17:18 +0000 (Sun, 29 Jan 2012) Log Message: ----------- Moving the platform-specific window state fields into their own substructure Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_internal.h trunk/freeglut/freeglut/src/Common/freeglut_main.c trunk/freeglut/freeglut/src/Common/freeglut_structure.c trunk/freeglut/freeglut/src/Common/freeglut_window.c trunk/freeglut/freeglut/src/mswin/freeglut_internal_mswin.h trunk/freeglut/freeglut/src/mswin/freeglut_window_mswin.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_internal.h 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/Common/freeglut_internal.h 2012-01-29 19:17:18 UTC (rev 1030) @@ -419,20 +419,25 @@ }; /* Window's state description. This structure should be kept portable. */ +#if TARGET_HOST_POSIX_X11 +typedef struct tagSFG_PlatformWindowState SFG_PlatformWindowState; +struct tagSFG_PlatformWindowState +{ + int OldWidth; /* Window width from before a resize */ + int OldHeight; /* " height " " " " */ +}; +#endif + + typedef struct tagSFG_WindowState SFG_WindowState; struct tagSFG_WindowState { /* Note that on Windows, sizes always refer to the client area, thus without the window decorations */ int Width; /* Window's width in pixels */ int Height; /* The same about the height */ -#if TARGET_HOST_POSIX_X11 - int OldWidth; /* Window width from before a resize */ - int OldHeight; /* " height " " " " */ -#elif TARGET_HOST_MS_WINDOWS - RECT OldRect; /* window rect - stored before the window is made fullscreen */ - DWORD OldStyle; /* window style - stored before the window is made fullscreen */ -#endif + SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize */ + GLboolean Redisplay; /* Do we have to redisplay? */ GLboolean Visible; /* Is the window visible now */ Modified: trunk/freeglut/freeglut/src/Common/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_main.c 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/Common/freeglut_main.c 2012-01-29 19:17:18 UTC (rev 1030) @@ -1001,13 +1001,13 @@ height = event.xconfigure.height; } - if( ( width != window->State.OldWidth ) || - ( height != window->State.OldHeight ) ) + if( ( width != window->State.pWState.OldWidth ) || + ( height != window->State.pWState.OldHeight ) ) { SFG_Window *current_window = fgStructure.CurrentWindow; - window->State.OldWidth = width; - window->State.OldHeight = height; + window->State.pWState.OldWidth = width; + window->State.pWState.OldHeight = height; if( FETCH_WCB( *window, Reshape ) ) INVOKE_WCB( *window, Reshape, ( width, height ) ); else Modified: trunk/freeglut/freeglut/src/Common/freeglut_structure.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_structure.c 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/Common/freeglut_structure.c 2012-01-29 19:17:18 UTC (rev 1030) @@ -65,7 +65,7 @@ { window->Window.pContext.FBConfig = NULL; - window->State.OldHeight = window->State.OldWidth = -1; + window->State.pWState.OldHeight = window->State.pWState.OldWidth = -1; } #endif Modified: trunk/freeglut/freeglut/src/Common/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_window.c 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/Common/freeglut_window.c 2012-01-29 19:17:18 UTC (rev 1030) @@ -449,8 +449,8 @@ /* restore original window size */ SFG_Window *win = fgStructure.CurrentWindow; fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE; - fgStructure.CurrentWindow->State.Width = win->State.OldWidth; - fgStructure.CurrentWindow->State.Height = win->State.OldHeight; + fgStructure.CurrentWindow->State.Width = win->State.pWState.OldWidth; + fgStructure.CurrentWindow->State.Height = win->State.pWState.OldHeight; } else { /* resize the window to cover the entire screen */ Modified: trunk/freeglut/freeglut/src/mswin/freeglut_internal_mswin.h =================================================================== --- trunk/freeglut/freeglut/src/mswin/freeglut_internal_mswin.h 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/mswin/freeglut_internal_mswin.h 2012-01-29 19:17:18 UTC (rev 1030) @@ -85,6 +85,16 @@ }; +/* Window's state description. This structure should be kept portable. */ +typedef struct tagSFG_PlatformWindowState SFG_PlatformWindowState; +struct tagSFG_PlatformWindowState +{ + RECT OldRect; /* window rect - stored before the window is made fullscreen */ + DWORD OldStyle; /* window style - stored before the window is made fullscreen */ +}; + + + /* Joystick-Specific Definitions */ #if !defined(_WIN32_WCE) # define _JS_MAX_AXES 8 Modified: trunk/freeglut/freeglut/src/mswin/freeglut_window_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/freeglut_window_mswin.c 2012-01-29 13:14:08 UTC (rev 1029) +++ trunk/freeglut/freeglut/src/mswin/freeglut_window_mswin.c 2012-01-29 19:17:18 UTC (rev 1030) @@ -978,10 +978,10 @@ /* store current window rect */ - GetWindowRect( win->Window.Handle, &win->State.OldRect ); + GetWindowRect( win->Window.Handle, &win->State.pWState.OldRect ); /* store current window style */ - win->State.OldStyle = s = GetWindowLong(win->Window.Handle, GWL_STYLE); + win->State.pWState.OldStyle = s = GetWindowLong(win->Window.Handle, GWL_STYLE); /* remove decorations from style and add popup style*/ s &= ~WS_OVERLAPPEDWINDOW; @@ -992,7 +992,7 @@ /* For fullscreen mode, find the monitor that is covered the most * by the window and get its rect as the resize target. */ - hMonitor= MonitorFromRect(&win->State.OldRect, MONITOR_DEFAULTTONEAREST); + hMonitor= MonitorFromRect(&win->State.pWState.OldRect, MONITOR_DEFAULTTONEAREST); mi.cbSize = sizeof(mi); GetMonitorInfo(hMonitor, &mi); rect = mi.rcMonitor; @@ -1048,16 +1048,16 @@ } /* restore style of window before making it fullscreen */ - SetWindowLong(win->Window.Handle, GWL_STYLE, win->State.OldStyle); + SetWindowLong(win->Window.Handle, GWL_STYLE, win->State.pWState.OldStyle); SetWindowPos(win->Window.Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); /* Then resize */ SetWindowPos(win->Window.Handle, HWND_TOP, - win->State.OldRect.left, - win->State.OldRect.top, - win->State.OldRect.right - win->State.OldRect.left, - win->State.OldRect.bottom - win->State.OldRect.top, + win->State.pWState.OldRect.left, + win->State.pWState.OldRect.top, + win->State.pWState.OldRect.right - win->State.pWState.OldRect.left, + win->State.pWState.OldRect.bottom - win->State.pWState.OldRect.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | SWP_NOZORDER ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-02-04 05:22:39
|
Revision: 1038 http://freeglut.svn.sourceforge.net/freeglut/?rev=1038&view=rev Author: fayjf Date: 2012-02-04 05:22:33 +0000 (Sat, 04 Feb 2012) Log Message: ----------- Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_glutfont_definitions.c trunk/freeglut/freeglut/src/x11/freeglut_glutfont_definitions_x11.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_glutfont_definitions.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_glutfont_definitions.c 2012-02-04 05:21:57 UTC (rev 1037) +++ trunk/freeglut/freeglut/src/Common/freeglut_glutfont_definitions.c 2012-02-04 05:22:33 UTC (rev 1038) @@ -1,108 +0,0 @@ -/* - * freeglut_glutfont_definitions.c - * - * Bitmap and stroke fonts displaying. - * - * Copyright (c) 2003 Stephen J. Baker (whether he wants it or not). - * All Rights Reserved. - * Written by John F. Fay <fa...@so...>, who releases the - * copyright over to the "freeglut" project lead. - * Creation date: Mon July 21 2003 - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * This file is necessary for the *nix version of "freeglut" because the - * original GLUT defined its font variables in rather an unusual way. - * Publicly, in "glut.h", they were defined as "void *". Privately, - * in one of the source code files, they were defined as pointers to a - * structure. Most compilers and linkers are satisfied with the "void *" - * and don't go any farther, but some of them balked. In particular, - * when compiling with "freeglut" and then trying to run using the GLUT - * ".so" library, some of them would give an error. So we are having to - * create this file to define the variables as pointers to an unusual - * structure to match GLUT. - */ - -/* - * freeglut_internal.h uses some GL types, but including the GL header portably - * is a bit tricky, so we include freeglut_std.h here, which contains the - * necessary machinery. But this poses another problem, caused by the ugly - * original defintion of the font constants in "classic" GLUT: They are defined - * as void* externally, so we move them temporarily out of the way by AN EXTREME - * CPP HACK. - */ - -#define glutStrokeRoman glutStrokeRomanIGNOREME -#define glutStrokeMonoRoman glutStrokeMonoRomanIGNOREME -#define glutBitmap9By15 glutBitmap9By15IGNOREME -#define glutBitmap8By13 glutBitmap8By13IGNOREME -#define glutBitmapTimesRoman10 glutBitmapTimesRoman10IGNOREME -#define glutBitmapTimesRoman24 glutBitmapTimesRoman24IGNOREME -#define glutBitmapHelvetica10 glutBitmapHelvetica10IGNOREME -#define glutBitmapHelvetica12 glutBitmapHelvetica12IGNOREME -#define glutBitmapHelvetica18 glutBitmapHelvetica18IGNOREME - -#include <GL/freeglut_std.h> - -#undef glutStrokeRoman -#undef glutStrokeMonoRoman -#undef glutBitmap9By15 -#undef glutBitmap8By13 -#undef glutBitmapTimesRoman10 -#undef glutBitmapTimesRoman24 -#undef glutBitmapHelvetica10 -#undef glutBitmapHelvetica12 -#undef glutBitmapHelvetica18 - -#include "freeglut_internal.h" - -#if TARGET_HOST_POSIX_X11 - -struct freeglutStrokeFont -{ - const char *name ; - int num_chars ; - void *ch ; - float top ; - float bottom ; -}; - -struct freeglutBitmapFont -{ - const char *name ; - const int num_chars ; - const int first ; - const void *ch ; -}; - - -struct freeglutStrokeFont glutStrokeRoman ; -struct freeglutStrokeFont glutStrokeMonoRoman ; - -struct freeglutBitmapFont glutBitmap9By15 ; -struct freeglutBitmapFont glutBitmap8By13 ; -struct freeglutBitmapFont glutBitmapTimesRoman10 ; -struct freeglutBitmapFont glutBitmapTimesRoman24 ; -struct freeglutBitmapFont glutBitmapHelvetica10 ; -struct freeglutBitmapFont glutBitmapHelvetica12 ; -struct freeglutBitmapFont glutBitmapHelvetica18 ; - -#endif - Modified: trunk/freeglut/freeglut/src/x11/freeglut_glutfont_definitions_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/freeglut_glutfont_definitions_x11.c 2012-02-04 05:21:57 UTC (rev 1037) +++ trunk/freeglut/freeglut/src/x11/freeglut_glutfont_definitions_x11.c 2012-02-04 05:22:33 UTC (rev 1038) @@ -0,0 +1,108 @@ +/* + * freeglut_glutfont_definitions.c + * + * Bitmap and stroke fonts displaying. + * + * Copyright (c) 2003 Stephen J. Baker (whether he wants it or not). + * All Rights Reserved. + * Written by John F. Fay <fa...@so...>, who releases the + * copyright over to the "freeglut" project lead. + * Creation date: Mon July 21 2003 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * This file is necessary for the *nix version of "freeglut" because the + * original GLUT defined its font variables in rather an unusual way. + * Publicly, in "glut.h", they were defined as "void *". Privately, + * in one of the source code files, they were defined as pointers to a + * structure. Most compilers and linkers are satisfied with the "void *" + * and don't go any farther, but some of them balked. In particular, + * when compiling with "freeglut" and then trying to run using the GLUT + * ".so" library, some of them would give an error. So we are having to + * create this file to define the variables as pointers to an unusual + * structure to match GLUT. + */ + +/* + * freeglut_internal.h uses some GL types, but including the GL header portably + * is a bit tricky, so we include freeglut_std.h here, which contains the + * necessary machinery. But this poses another problem, caused by the ugly + * original defintion of the font constants in "classic" GLUT: They are defined + * as void* externally, so we move them temporarily out of the way by AN EXTREME + * CPP HACK. + */ + +#define glutStrokeRoman glutStrokeRomanIGNOREME +#define glutStrokeMonoRoman glutStrokeMonoRomanIGNOREME +#define glutBitmap9By15 glutBitmap9By15IGNOREME +#define glutBitmap8By13 glutBitmap8By13IGNOREME +#define glutBitmapTimesRoman10 glutBitmapTimesRoman10IGNOREME +#define glutBitmapTimesRoman24 glutBitmapTimesRoman24IGNOREME +#define glutBitmapHelvetica10 glutBitmapHelvetica10IGNOREME +#define glutBitmapHelvetica12 glutBitmapHelvetica12IGNOREME +#define glutBitmapHelvetica18 glutBitmapHelvetica18IGNOREME + +#include <GL/freeglut_std.h> + +#undef glutStrokeRoman +#undef glutStrokeMonoRoman +#undef glutBitmap9By15 +#undef glutBitmap8By13 +#undef glutBitmapTimesRoman10 +#undef glutBitmapTimesRoman24 +#undef glutBitmapHelvetica10 +#undef glutBitmapHelvetica12 +#undef glutBitmapHelvetica18 + +#include "freeglut_internal.h" + +#if TARGET_HOST_POSIX_X11 + +struct freeglutStrokeFont +{ + const char *name ; + int num_chars ; + void *ch ; + float top ; + float bottom ; +}; + +struct freeglutBitmapFont +{ + const char *name ; + const int num_chars ; + const int first ; + const void *ch ; +}; + + +struct freeglutStrokeFont glutStrokeRoman ; +struct freeglutStrokeFont glutStrokeMonoRoman ; + +struct freeglutBitmapFont glutBitmap9By15 ; +struct freeglutBitmapFont glutBitmap8By13 ; +struct freeglutBitmapFont glutBitmapTimesRoman10 ; +struct freeglutBitmapFont glutBitmapTimesRoman24 ; +struct freeglutBitmapFont glutBitmapHelvetica10 ; +struct freeglutBitmapFont glutBitmapHelvetica12 ; +struct freeglutBitmapFont glutBitmapHelvetica18 ; + +#endif + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-02-04 14:28:39
|
Revision: 1044 http://freeglut.svn.sourceforge.net/freeglut/?rev=1044&view=rev Author: fayjf Date: 2012-02-04 14:28:32 +0000 (Sat, 04 Feb 2012) Log Message: ----------- Splitting the X11-specific code from "freeglut_init.c" into its own file Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_init.c trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_init.c 2012-02-04 14:14:04 UTC (rev 1043) +++ trunk/freeglut/freeglut/src/Common/freeglut_init.c 2012-02-04 14:28:32 UTC (rev 1044) @@ -29,10 +29,6 @@ #include <GL/freeglut.h> #include "freeglut_internal.h" -#if TARGET_HOST_POSIX_X11 -#include <limits.h> /* LONG_MAX */ -#endif - /* * TODO BEFORE THE STABLE RELEASE: * @@ -104,225 +100,7 @@ extern void fgPlatformDeinitialiseInputDevices ( void ); extern void fgPlatformCloseDisplay ( void ); -#if TARGET_HOST_POSIX_X11 -/* Return the atom associated with "name". */ -static Atom fghGetAtom(const char * name) -{ - return XInternAtom(fgDisplay.pDisplay.Display, name, False); -} - -/* - * Check if "property" is set on "window". The property's values are returned - * through "data". If the property is set and is of type "type", return the - * number of elements in "data". Return zero otherwise. In both cases, use - * "Xfree()" to free "data". - */ -static int fghGetWindowProperty(Window window, - Atom property, - Atom type, - unsigned char ** data) -{ - /* - * Caller always has to use "Xfree()" to free "data", since - * "XGetWindowProperty() always allocates one extra byte in prop_return - * [i.e. "data"] (even if the property is zero length) [..]". - */ - - int status; /* Returned by "XGetWindowProperty". */ - - Atom type_returned; - int temp_format; /* Not used. */ - unsigned long number_of_elements; - unsigned long temp_bytes_after; /* Not used. */ - - - status = XGetWindowProperty(fgDisplay.pDisplay.Display, - window, - property, - 0, - LONG_MAX, - False, - type, - &type_returned, - &temp_format, - &number_of_elements, - &temp_bytes_after, - data); - - FREEGLUT_INTERNAL_ERROR_EXIT(status == Success, - "XGetWindowProperty failled", - "fghGetWindowProperty"); - - if (type_returned != type) - { - number_of_elements = 0; - } - - return number_of_elements; -} - -/* Check if the window manager is NET WM compliant. */ -static int fghNetWMSupported(void) -{ - Atom wm_check; - Window ** window_ptr_1; - - int number_of_windows; - int net_wm_supported; - - - net_wm_supported = 0; - - wm_check = fghGetAtom("_NET_SUPPORTING_WM_CHECK"); - window_ptr_1 = malloc(sizeof(Window *)); - - /* - * Check that the window manager has set this property on the root window. - * The property must be the ID of a child window. - */ - number_of_windows = fghGetWindowProperty(fgDisplay.pDisplay.RootWindow, - wm_check, - XA_WINDOW, - (unsigned char **) window_ptr_1); - if (number_of_windows == 1) - { - Window ** window_ptr_2; - - window_ptr_2 = malloc(sizeof(Window *)); - - /* Check that the window has the same property set to the same value. */ - number_of_windows = fghGetWindowProperty(**window_ptr_1, - wm_check, - XA_WINDOW, - (unsigned char **) window_ptr_2); - if ((number_of_windows == 1) && (**window_ptr_1 == **window_ptr_2)) - { - /* NET WM compliant */ - net_wm_supported = 1; - } - - XFree(*window_ptr_2); - free(window_ptr_2); - } - - XFree(*window_ptr_1); - free(window_ptr_1); - - return net_wm_supported; -} - -/* Check if "hint" is present in "property" for "window". */ -int fgHintPresent(Window window, Atom property, Atom hint) -{ - Atom *atoms; - int number_of_atoms; - int supported; - int i; - - supported = 0; - - number_of_atoms = fghGetWindowProperty(window, - property, - XA_ATOM, - (unsigned char **) &atoms); - for (i = 0; i < number_of_atoms; i++) - { - if (atoms[i] == hint) - { - supported = 1; - break; - } - } - - XFree(atoms); - return supported; -} - -#endif /* TARGET_HOST_POSIX_X11 */ - - -#if TARGET_HOST_POSIX_X11 -/* - * A call to this function should initialize all the display stuff... - */ -void fgPlatformInitialize( const char* displayName ) -{ - fgDisplay.pDisplay.Display = XOpenDisplay( displayName ); - - if( fgDisplay.pDisplay.Display == NULL ) - fgError( "failed to open display '%s'", XDisplayName( displayName ) ); - - if( !glXQueryExtension( fgDisplay.pDisplay.Display, NULL, NULL ) ) - fgError( "OpenGL GLX extension not supported by display '%s'", - XDisplayName( displayName ) ); - - fgDisplay.pDisplay.Screen = DefaultScreen( fgDisplay.pDisplay.Display ); - fgDisplay.pDisplay.RootWindow = RootWindow( - fgDisplay.pDisplay.Display, - fgDisplay.pDisplay.Screen - ); - - fgDisplay.ScreenWidth = DisplayWidth( - fgDisplay.pDisplay.Display, - fgDisplay.pDisplay.Screen - ); - fgDisplay.ScreenHeight = DisplayHeight( - fgDisplay.pDisplay.Display, - fgDisplay.pDisplay.Screen - ); - - fgDisplay.ScreenWidthMM = DisplayWidthMM( - fgDisplay.pDisplay.Display, - fgDisplay.pDisplay.Screen - ); - fgDisplay.ScreenHeightMM = DisplayHeightMM( - fgDisplay.pDisplay.Display, - fgDisplay.pDisplay.Screen - ); - - fgDisplay.pDisplay.Connection = ConnectionNumber( fgDisplay.pDisplay.Display ); - - /* Create the window deletion atom */ - fgDisplay.pDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW"); - - /* Create the state and full screen atoms */ - fgDisplay.pDisplay.State = None; - fgDisplay.pDisplay.StateFullScreen = None; - - if (fghNetWMSupported()) - { - const Atom supported = fghGetAtom("_NET_SUPPORTED"); - const Atom state = fghGetAtom("_NET_WM_STATE"); - - /* Check if the state hint is supported. */ - if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, state)) - { - const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN"); - - fgDisplay.pDisplay.State = state; - - /* Check if the window manager supports full screen. */ - /** Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/ - if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, full_screen)) - { - fgDisplay.pDisplay.StateFullScreen = full_screen; - } - } - } - - - fgState.Initialised = GL_TRUE; - - atexit(fgDeinitialize); - - /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */ - fgInitialiseInputDevices(); -} - -#endif - - void fghParseCommandLineArguments ( int* pargc, char** argv, char **pDisplayName, char **pGeometry ) { #ifndef _WIN32_WCE @@ -436,34 +214,6 @@ } -#if TARGET_HOST_POSIX_X11 -void fgPlatformDeinitialiseInputDevices ( void ) -{ - fghCloseInputDevices (); - - fgState.JoysticksInitialised = GL_FALSE; - fgState.InputDevsInitialised = GL_FALSE; -} - - -void fgPlatformCloseDisplay ( void ) -{ - /* - * Make sure all X-client data we have created will be destroyed on - * display closing - */ - XSetCloseDownMode( fgDisplay.pDisplay.Display, DestroyAll ); - - /* - * Close the display connection, destroying all windows we have - * created so far - */ - XCloseDisplay( fgDisplay.pDisplay.Display ); -} - -#endif - - /* * Perform the freeglut deinitialization... */ Modified: trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c 2012-02-04 14:14:04 UTC (rev 1043) +++ trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c 2012-02-04 14:28:32 UTC (rev 1044) @@ -0,0 +1,267 @@ +/* + * freeglut_init_x11.c + * + * Various freeglut initialization functions. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, <ol...@so...> + * Copied for Platform code by Evan Felix <karcaw at gmail.com> + * Creation date: Thur Feb 2 2012 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define FREEGLUT_BUILDING_LIB +#include <limits.h> /* LONG_MAX */ +#include <GL/freeglut.h> +#include "freeglut_internal.h" + +/* Return the atom associated with "name". */ +static Atom fghGetAtom(const char * name) +{ + return XInternAtom(fgDisplay.pDisplay.Display, name, False); +} + +/* + * Check if "property" is set on "window". The property's values are returned + * through "data". If the property is set and is of type "type", return the + * number of elements in "data". Return zero otherwise. In both cases, use + * "Xfree()" to free "data". + */ +static int fghGetWindowProperty(Window window, + Atom property, + Atom type, + unsigned char ** data) +{ + /* + * Caller always has to use "Xfree()" to free "data", since + * "XGetWindowProperty() always allocates one extra byte in prop_return + * [i.e. "data"] (even if the property is zero length) [..]". + */ + + int status; /* Returned by "XGetWindowProperty". */ + + Atom type_returned; + int temp_format; /* Not used. */ + unsigned long number_of_elements; + unsigned long temp_bytes_after; /* Not used. */ + + + status = XGetWindowProperty(fgDisplay.pDisplay.Display, + window, + property, + 0, + LONG_MAX, + False, + type, + &type_returned, + &temp_format, + &number_of_elements, + &temp_bytes_after, + data); + + FREEGLUT_INTERNAL_ERROR_EXIT(status == Success, + "XGetWindowProperty failled", + "fghGetWindowProperty"); + + if (type_returned != type) + { + number_of_elements = 0; + } + + return number_of_elements; +} + +/* Check if the window manager is NET WM compliant. */ +static int fghNetWMSupported(void) +{ + Atom wm_check; + Window ** window_ptr_1; + + int number_of_windows; + int net_wm_supported; + + + net_wm_supported = 0; + + wm_check = fghGetAtom("_NET_SUPPORTING_WM_CHECK"); + window_ptr_1 = malloc(sizeof(Window *)); + + /* + * Check that the window manager has set this property on the root window. + * The property must be the ID of a child window. + */ + number_of_windows = fghGetWindowProperty(fgDisplay.pDisplay.RootWindow, + wm_check, + XA_WINDOW, + (unsigned char **) window_ptr_1); + if (number_of_windows == 1) + { + Window ** window_ptr_2; + + window_ptr_2 = malloc(sizeof(Window *)); + + /* Check that the window has the same property set to the same value. */ + number_of_windows = fghGetWindowProperty(**window_ptr_1, + wm_check, + XA_WINDOW, + (unsigned char **) window_ptr_2); + if ((number_of_windows == 1) && (**window_ptr_1 == **window_ptr_2)) + { + /* NET WM compliant */ + net_wm_supported = 1; + } + + XFree(*window_ptr_2); + free(window_ptr_2); + } + + XFree(*window_ptr_1); + free(window_ptr_1); + + return net_wm_supported; +} + +/* Check if "hint" is present in "property" for "window". */ +int fgHintPresent(Window window, Atom property, Atom hint) +{ + Atom *atoms; + int number_of_atoms; + int supported; + int i; + + supported = 0; + + number_of_atoms = fghGetWindowProperty(window, + property, + XA_ATOM, + (unsigned char **) &atoms); + for (i = 0; i < number_of_atoms; i++) + { + if (atoms[i] == hint) + { + supported = 1; + break; + } + } + + XFree(atoms); + return supported; +} + +/* + * A call to this function should initialize all the display stuff... + */ +void fgPlatformInitialize( const char* displayName ) +{ + fgDisplay.pDisplay.Display = XOpenDisplay( displayName ); + + if( fgDisplay.pDisplay.Display == NULL ) + fgError( "failed to open display '%s'", XDisplayName( displayName ) ); + + if( !glXQueryExtension( fgDisplay.pDisplay.Display, NULL, NULL ) ) + fgError( "OpenGL GLX extension not supported by display '%s'", + XDisplayName( displayName ) ); + + fgDisplay.pDisplay.Screen = DefaultScreen( fgDisplay.pDisplay.Display ); + fgDisplay.pDisplay.RootWindow = RootWindow( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen + ); + + fgDisplay.ScreenWidth = DisplayWidth( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen + ); + fgDisplay.ScreenHeight = DisplayHeight( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen + ); + + fgDisplay.ScreenWidthMM = DisplayWidthMM( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen + ); + fgDisplay.ScreenHeightMM = DisplayHeightMM( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen + ); + + fgDisplay.pDisplay.Connection = ConnectionNumber( fgDisplay.pDisplay.Display ); + + /* Create the window deletion atom */ + fgDisplay.pDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW"); + + /* Create the state and full screen atoms */ + fgDisplay.pDisplay.State = None; + fgDisplay.pDisplay.StateFullScreen = None; + + if (fghNetWMSupported()) + { + const Atom supported = fghGetAtom("_NET_SUPPORTED"); + const Atom state = fghGetAtom("_NET_WM_STATE"); + + /* Check if the state hint is supported. */ + if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, state)) + { + const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN"); + + fgDisplay.pDisplay.State = state; + + /* Check if the window manager supports full screen. */ + /** Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/ + if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, full_screen)) + { + fgDisplay.pDisplay.StateFullScreen = full_screen; + } + } + } + + + fgState.Initialised = GL_TRUE; + + atexit(fgDeinitialize); + + /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */ + fgInitialiseInputDevices(); +} + +void fgPlatformDeinitialiseInputDevices ( void ) +{ + fghCloseInputDevices (); + + fgState.JoysticksInitialised = GL_FALSE; + fgState.InputDevsInitialised = GL_FALSE; +} + + +void fgPlatformCloseDisplay ( void ) +{ + /* + * Make sure all X-client data we have created will be destroyed on + * display closing + */ + XSetCloseDownMode( fgDisplay.pDisplay.Display, DestroyAll ); + + /* + * Close the display connection, destroying all windows we have + * created so far + */ + XCloseDisplay( fgDisplay.pDisplay.Display ); +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-02-05 04:16:43
|
Revision: 1060 http://freeglut.svn.sourceforge.net/freeglut/?rev=1060&view=rev Author: fayjf Date: 2012-02-05 04:16:37 +0000 (Sun, 05 Feb 2012) Log Message: ----------- Splitting the X11-specific "freeglut_ext.c" code into its own file Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_ext.c trunk/freeglut/freeglut/src/x11/freeglut_ext_x11.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_ext.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_ext.c 2012-02-05 04:13:31 UTC (rev 1059) +++ trunk/freeglut/freeglut/src/Common/freeglut_ext.c 2012-02-05 04:16:37 UTC (rev 1060) @@ -203,37 +203,7 @@ } -#if TARGET_HOST_POSIX_X11 -GLUTproc fgPlatformGetGLUTProcAddress( const char* procName ) -{ - /* optimization: quick initial check */ - if( strncmp( procName, "glut", 4 ) != 0 ) - return NULL; -#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x; - CHECK_NAME(glutJoystickFunc); - CHECK_NAME(glutForceJoystickFunc); - CHECK_NAME(glutGameModeString); - CHECK_NAME(glutEnterGameMode); - CHECK_NAME(glutLeaveGameMode); - CHECK_NAME(glutGameModeGet); -#undef CHECK_NAME - - return NULL; -} - - -SFG_Proc fgPlatformGetProcAddress( const char *procName ) -{ -#if defined( GLX_ARB_get_proc_address ) - return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName ); -#else - return NULL; -#endif -} -#endif - - GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName ) { Modified: trunk/freeglut/freeglut/src/x11/freeglut_ext_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/freeglut_ext_x11.c 2012-02-05 04:13:31 UTC (rev 1059) +++ trunk/freeglut/freeglut/src/x11/freeglut_ext_x11.c 2012-02-05 04:16:37 UTC (rev 1060) @@ -0,0 +1,60 @@ +/* + * freeglut_ext.c + * + * Functions related to OpenGL extensions. + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, <ol...@so...> + * Copied for Platform code by Evan Felix <karcaw at gmail.com> + * Creation date: Thur Feb 2 2012 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define GLX_GLXEXT_PROTOTYPES +#include <GL/freeglut.h> +#include "freeglut_internal.h" + +GLUTproc fgPlatformGlutGetProcAddress( const char* procName ) +{ + /* optimization: quick initial check */ + if( strncmp( procName, "glut", 4 ) != 0 ) + return NULL; + +#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x; + CHECK_NAME(glutJoystickFunc); + CHECK_NAME(glutForceJoystickFunc); + CHECK_NAME(glutGameModeString); + CHECK_NAME(glutEnterGameMode); + CHECK_NAME(glutLeaveGameMode); + CHECK_NAME(glutGameModeGet); +#undef CHECK_NAME + + return NULL; +} + + +SFG_Proc fgPlatformGetProcAddress( const char *procName ) +{ +#if defined( GLX_ARB_get_proc_address ) + return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName ); +#else + return NULL; +#endif +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2012-02-05 13:53:06
|
Revision: 1064 http://freeglut.svn.sourceforge.net/freeglut/?rev=1064&view=rev Author: fayjf Date: 2012-02-05 13:53:00 +0000 (Sun, 05 Feb 2012) Log Message: ----------- Moving an X11-specific function call to destroy a context to the X11-specific file Modified Paths: -------------- trunk/freeglut/freeglut/src/Common/freeglut_init.c trunk/freeglut/freeglut/src/mswin/freeglut_init_mswin.c trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c Modified: trunk/freeglut/freeglut/src/Common/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/Common/freeglut_init.c 2012-02-05 05:54:30 UTC (rev 1063) +++ trunk/freeglut/freeglut/src/Common/freeglut_init.c 2012-02-05 13:53:00 UTC (rev 1064) @@ -99,6 +99,7 @@ extern void fgPlatformInitialize( const char* displayName ); extern void fgPlatformDeinitialiseInputDevices ( void ); extern void fgPlatformCloseDisplay ( void ); +extern void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext ); void fghParseCommandLineArguments ( int* pargc, char** argv, char **pDisplayName, char **pGeometry ) @@ -234,10 +235,7 @@ /* If there was a menu created, destroy the rendering context */ if( fgStructure.MenuContext ) { -#if TARGET_HOST_POSIX_X11 - /* Note that the MVisualInfo is not owned by the MenuContext! */ - glXDestroyContext( fgDisplay.pDisplay.Display, fgStructure.MenuContext->MContext ); -#endif + fgPlatformDestroyContext (fgDisplay.pDisplay, fgStructure.MenuContext->MContext ); free( fgStructure.MenuContext ); fgStructure.MenuContext = NULL; } Modified: trunk/freeglut/freeglut/src/mswin/freeglut_init_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/freeglut_init_mswin.c 2012-02-05 05:54:30 UTC (rev 1063) +++ trunk/freeglut/freeglut/src/mswin/freeglut_init_mswin.c 2012-02-05 13:53:00 UTC (rev 1064) @@ -158,8 +158,11 @@ timeEndPeriod ( 1 ); } +void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext ) +{ + /* Do nothing -- this is required for X11 */ +} - /* * Everything down to the end of the next two functions is copied from the X sources. */ Modified: trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c 2012-02-05 05:54:30 UTC (rev 1063) +++ trunk/freeglut/freeglut/src/x11/freeglut_init_x11.c 2012-02-05 13:53:00 UTC (rev 1064) @@ -265,3 +265,9 @@ XCloseDisplay( fgDisplay.pDisplay.Display ); } + +void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext ) +{ + /* Note that the MVisualInfo is not owned by the MenuContext! */ + glXDestroyContext( pDisplay.Display, MContext ); +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <be...@us...> - 2012-03-17 14:24:48
|
Revision: 1182 http://freeglut.svn.sourceforge.net/freeglut/?rev=1182&view=rev Author: beuc Date: 2012-03-17 14:24:42 +0000 (Sat, 17 Mar 2012) Log Message: ----------- EGL: implement fgPlatformSetWindow Modified Paths: -------------- trunk/freeglut/freeglut/src/android/fg_window_android.c trunk/freeglut/freeglut/src/egl/fg_window_egl.c trunk/freeglut/freeglut/src/egl/fg_window_egl.h Modified: trunk/freeglut/freeglut/src/android/fg_window_android.c =================================================================== --- trunk/freeglut/freeglut/src/android/fg_window_android.c 2012-03-17 14:18:33 UTC (rev 1181) +++ trunk/freeglut/freeglut/src/android/fg_window_android.c 2012-03-17 14:24:42 UTC (rev 1182) @@ -92,11 +92,6 @@ /* Window pre-created by Android, no way to delete it */ } -void fgPlatformSetWindow ( SFG_Window *window ) -{ - /* TODO: only a single window possible? */ -} - /* * This function makes the current window visible */ Modified: trunk/freeglut/freeglut/src/egl/fg_window_egl.c =================================================================== --- trunk/freeglut/freeglut/src/egl/fg_window_egl.c 2012-03-17 14:18:33 UTC (rev 1181) +++ trunk/freeglut/freeglut/src/egl/fg_window_egl.c 2012-03-17 14:24:42 UTC (rev 1182) @@ -125,3 +125,13 @@ window->Window.pContext.egl.Surface = EGL_NO_SURFACE; } } + +void fgPlatformSetWindow ( SFG_Window *window ) +{ + if (!eglMakeCurrent( + fgDisplay.pDisplay.egl.Display, + window->Window.pContext.egl.Surface, + window->Window.pContext.egl.Surface, + window->Window.Context)) + fgError("eglMakeCurrent: err=%x\n", eglGetError()); +} Modified: trunk/freeglut/freeglut/src/egl/fg_window_egl.h =================================================================== --- trunk/freeglut/freeglut/src/egl/fg_window_egl.h 2012-03-17 14:18:33 UTC (rev 1181) +++ trunk/freeglut/freeglut/src/egl/fg_window_egl.h 2012-03-17 14:24:42 UTC (rev 1182) @@ -30,5 +30,6 @@ extern void fghPlatformOpenWindowEGL( SFG_Window* window ); extern EGLConfig fghCreateNewContextEGL( SFG_Window* window ); extern void fghPlatformCloseWindowEGL( SFG_Window* window ); +extern void fgPlatformSetWindow ( SFG_Window *window ); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <be...@us...> - 2012-04-21 16:45:52
|
Revision: 1253 http://freeglut.svn.sourceforge.net/freeglut/?rev=1253&view=rev Author: beuc Date: 2012-04-21 16:45:46 +0000 (Sat, 21 Apr 2012) Log Message: ----------- fg_gl2: Use GLES2 functions directly Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_gl2.c trunk/freeglut/freeglut/src/fg_gl2.h Modified: trunk/freeglut/freeglut/src/fg_gl2.c =================================================================== --- trunk/freeglut/freeglut/src/fg_gl2.c 2012-04-21 16:20:19 UTC (rev 1252) +++ trunk/freeglut/freeglut/src/fg_gl2.c 2012-04-21 16:45:46 UTC (rev 1253) @@ -38,17 +38,19 @@ } void fgInitGL2() { +#ifndef GL_ES_VERSION_2_0 fgState.HasOpenGL20 = 0; // TODO: Mesa returns a valid stub function, rather than NULL, // when we request a non-existent function #define CHECK(func, a) if ((a) == NULL) { fgWarning("fgInitGL2: " func " is NULL"); return; } - CHECK("fghGenBuffers", fghGenBuffers = (FGH_PFNGLGENBUFFERSPROC) glutGetProcAddress ("glGenBuffers")); - CHECK("fghDeleteBuffers", fghDeleteBuffers = (FGH_PFNGLDELETEBUFFERSPROC) glutGetProcAddress ("glDeleteBuffers")); - CHECK("fghBindBuffer", fghBindBuffer = (FGH_PFNGLBINDBUFFERPROC) glutGetProcAddress ("glBindBuffer")); - CHECK("fghBufferData", fghBufferData = (FGH_PFNGLBUFFERDATAPROC) glutGetProcAddress ("glBufferData")); - CHECK("fghVertexAttribPointer", fghVertexAttribPointer = (FGH_PFNGLVERTEXATTRIBPOINTERPROC) glutGetProcAddress ("glVertexAttribPointer")); - CHECK("fghEnableVertexAttribArray", fghEnableVertexAttribArray = (FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) glutGetProcAddress ("glEnableVertexAttribArray")); - CHECK("fghDisableVertexAttribArray", fghDisableVertexAttribArray = (FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) glutGetProcAddress ("glDisableVertexAttribArray")); + CHECK("fghGenBuffers", fghGenBuffers = (FGH_PFNGLGENBUFFERSPROC)glutGetProcAddress("glGenBuffers")); + CHECK("fghDeleteBuffers", fghDeleteBuffers = (FGH_PFNGLDELETEBUFFERSPROC)glutGetProcAddress("glDeleteBuffers")); + CHECK("fghBindBuffer", fghBindBuffer = (FGH_PFNGLBINDBUFFERPROC)glutGetProcAddress("glBindBuffer")); + CHECK("fghBufferData", fghBufferData = (FGH_PFNGLBUFFERDATAPROC)glutGetProcAddress("glBufferData")); + CHECK("fghVertexAttribPointer", fghVertexAttribPointer = (FGH_PFNGLVERTEXATTRIBPOINTERPROC)glutGetProcAddress("glVertexAttribPointer")); + CHECK("fghEnableVertexAttribArray", fghEnableVertexAttribArray = (FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC)glutGetProcAddress("glEnableVertexAttribArray")); + CHECK("fghDisableVertexAttribArray", fghDisableVertexAttribArray = (FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC)glutGetProcAddress("glDisableVertexAttribArray")); #undef CHECK +#endif fgState.HasOpenGL20 = 1; } Modified: trunk/freeglut/freeglut/src/fg_gl2.h =================================================================== --- trunk/freeglut/freeglut/src/fg_gl2.h 2012-04-21 16:20:19 UTC (rev 1252) +++ trunk/freeglut/freeglut/src/fg_gl2.h 2012-04-21 16:45:46 UTC (rev 1253) @@ -26,10 +26,32 @@ #ifndef FG_GL2_H #define FG_GL2_H -#ifndef APIENTRY -# define APIENTRY -#endif +#include <GL/freeglut.h> +#include "fg_internal.h" +#ifdef GL_ES_VERSION_2_0 +/* Use existing functions on GLES 2.0 */ + +#define FGH_ARRAY_BUFFER GL_ARRAY_BUFFER +#define FGH_STATIC_DRAW GL_STATIC_DRAW +#define FGH_ELEMENT_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER + +#define fghGenBuffers glGenBuffers +#define fghDeleteBuffers glDeleteBuffers +#define fghBindBuffer glBindBuffer +#define fghBufferData glBufferData +#define fghEnableVertexAttribArray glEnableVertexAttribArray +#define fghDisableVertexAttribArray glDisableVertexAttribArray +#define fghVertexAttribPointer glVertexAttribPointer + +#else +/* Load functions dynamically, they are not defined in e.g. win32's + OpenGL headers */ + +# ifndef APIENTRY +# define APIENTRY +# endif + /* extension #defines, types and entries, avoiding a dependency on additional libraries like GLEW or the GL/glext.h header */ #define FGH_ARRAY_BUFFER 0x8892 @@ -53,4 +75,6 @@ FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray; FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer; +# endif + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-21 04:04:52
|
Revision: 1354 http://freeglut.svn.sourceforge.net/freeglut/?rev=1354&view=rev Author: dcnieho Date: 2012-07-21 04:04:45 +0000 (Sat, 21 Jul 2012) Log Message: ----------- can now also handle the case where menus is opened, client area of window with menu is clicked and then user switches to another window. Implemented menu enumerator and a function for getting currently active menu, if any Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_internal.h trunk/freeglut/freeglut/src/fg_menu.c trunk/freeglut/freeglut/src/fg_structure.c trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c Modified: trunk/freeglut/freeglut/src/fg_internal.h =================================================================== --- trunk/freeglut/freeglut/src/fg_internal.h 2012-07-21 03:58:04 UTC (rev 1353) +++ trunk/freeglut/freeglut/src/fg_internal.h 2012-07-21 04:04:45 UTC (rev 1354) @@ -661,7 +661,8 @@ GLboolean found; /* Used to terminate search */ void* data; /* Custom data pointer */ }; -typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * ); +typedef void (* FGCBWindowEnumerator )( SFG_Window *, SFG_Enumerator * ); +typedef void (* FGCBMenuEnumerator )( SFG_Menu *, SFG_Enumerator * ); /* The bitmap font structure */ typedef struct tagSFG_Font SFG_Font; @@ -915,8 +916,8 @@ * and userData is the a custom user-supplied pointer. Functions * are defined and exported from freeglut_structure.c file. */ -void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator ); -void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback, +void fgEnumWindows( FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator ); +void fgEnumSubWindows( SFG_Window* window, FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator ); /* @@ -940,6 +941,12 @@ SFG_Menu* fgMenuByID( int menuID ); /* + * Returns active menu, if any. Assumption: only one menu active throughout application at any one time. + * This is easier than fgWindowByXXX as all menus are placed in one doubly linked list... + */ +SFG_Menu* fgGetActiveMenu( ); + +/* * The menu activation and deactivation the code. This is the meat * of the menu user interface handling code... */ Modified: trunk/freeglut/freeglut/src/fg_menu.c =================================================================== --- trunk/freeglut/freeglut/src/fg_menu.c 2012-07-21 03:58:04 UTC (rev 1353) +++ trunk/freeglut/freeglut/src/fg_menu.c 2012-07-21 04:04:45 UTC (rev 1354) @@ -512,7 +512,7 @@ SFG_Menu* menu = window->Menu[ button ]; SFG_Window* current_window = fgStructure.CurrentWindow; - /* If the menu is already active in another window, deactivate it (and any submenu's) there */ + /* If the menu is already active in another window, deactivate it (and any submenus) there */ if ( menu->ParentWindow ) fgDeactivateMenu(menu->ParentWindow); Modified: trunk/freeglut/freeglut/src/fg_structure.c =================================================================== --- trunk/freeglut/freeglut/src/fg_structure.c 2012-07-21 03:58:04 UTC (rev 1353) +++ trunk/freeglut/freeglut/src/fg_structure.c 2012-07-21 04:04:45 UTC (rev 1354) @@ -378,7 +378,7 @@ /* * Helper function to enumerate through all registered top-level windows */ -void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator ) +void fgEnumWindows( FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator ) { SFG_Window *window; @@ -398,10 +398,32 @@ } /* +* Helper function to enumerate through all registered top-level windows +*/ +void fgEnumMenus( FGCBMenuEnumerator enumCallback, SFG_Enumerator* enumerator ) +{ + SFG_Menu *menu; + + FREEGLUT_INTERNAL_ERROR_EXIT ( enumCallback && enumerator, + "Enumerator or callback missing from window enumerator call", + "fgEnumWindows" ); + + /* It's enough to check all entries in fgStructure.Menus... */ + for( menu = (SFG_Menu *)fgStructure.Menus.First; + menu; + menu = (SFG_Menu *)menu->Node.Next ) + { + enumCallback( menu, enumerator ); + if( enumerator->found ) + return; + } +} + +/* * Helper function to enumerate through all a window's subwindows * (single level descent) */ -void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback, +void fgEnumSubWindows( SFG_Window* window, FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator ) { SFG_Window *child; @@ -485,7 +507,7 @@ } /* - * This function is similiar to the previous one, except it is + * This function is similar to the previous one, except it is * looking for a specified (sub)window identifier. The function * is defined in freeglut_structure.c file. */ @@ -493,7 +515,7 @@ { SFG_Enumerator enumerator; - /* Uses a method very similiar for fgWindowByHandle... */ + /* Uses a method very similar for fgWindowByHandle... */ enumerator.found = GL_FALSE; enumerator.data = ( void * )&windowID; fgEnumWindows( fghcbWindowByID, &enumerator ); @@ -503,23 +525,81 @@ } /* - * Looks up a menu given its ID. This is easier that fgWindowByXXX + * A static helper function to look for a menu given its ID + */ +static void fghcbMenuByID( SFG_Menu *menu, + SFG_Enumerator *enumerator ) +{ + if ( enumerator->found ) + return; + + /* Check the menu's ID. */ + if( menu->ID == (int)(enumerator->data) ) + { + enumerator->found = GL_TRUE; + enumerator->data = menu; + + return; + } +} + +/* + * Looks up a menu given its ID. This is easier than fgWindowByXXX * as all menus are placed in one doubly linked list... */ SFG_Menu* fgMenuByID( int menuID ) { - SFG_Menu *menu = NULL; + SFG_Enumerator enumerator; - /* It's enough to check all entries in fgStructure.Menus... */ - for( menu = (SFG_Menu *)fgStructure.Menus.First; - menu; - menu = (SFG_Menu *)menu->Node.Next ) - if( menu->ID == menuID ) - return menu; + /* This is easy and makes use of the menus enumeration defined above */ + enumerator.found = GL_FALSE; + enumerator.data = (void *)menuID; + fgEnumMenus( fghcbMenuByID, &enumerator ); + + if( enumerator.found ) + return( SFG_Menu *) enumerator.data; + return NULL; } /* + * A static helper function to look for an active menu + */ +static void fghcbGetActiveMenu( SFG_Menu *menu, + SFG_Enumerator *enumerator ) +{ + if ( enumerator->found ) + return; + + /* Check the menu's ID. */ + if( menu->IsActive ) + { + enumerator->found = GL_TRUE; + enumerator->data = menu; + + return; + } +} + +/* + * Returns active menu, if any. Assumption: only one menu active throughout application at any one time. + * This is easier than fgWindowByXXX as all menus are placed in one doubly linked list... + */ +SFG_Menu* fgGetActiveMenu( ) +{ + SFG_Enumerator enumerator; + + /* This is easy and makes use of the menus enumeration defined above */ + enumerator.found = GL_FALSE; + fgEnumMenus( fghcbGetActiveMenu, &enumerator ); + + if( enumerator.found ) + return( SFG_Menu *) enumerator.data; + + return NULL; +} + +/* * List functions... */ void fgListInit(SFG_List *list) Modified: trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-21 03:58:04 UTC (rev 1353) +++ trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-21 04:04:45 UTC (rev 1354) @@ -493,34 +493,39 @@ break; case WM_KILLFOCUS: -/* printf("WM_KILLFOCUS (ismenu: %i): %p\n", window->IsMenu, window ); */ - lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); - INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) ); - - /* If this is a menu that lost focus, see if user either switched - application or FreeGLUT window (if one is running multiple - windows). If so, close menu that lost focus. - */ - if( window->IsMenu && - window->ActiveMenu && window->ActiveMenu->IsActive ) { - SFG_Window* wnd = NULL; - HWND hwnd = GetForegroundWindow(); /* Get window with current focus */ - if (hwnd) - /* See if its one of our windows */ - wnd = fgWindowByHandle(hwnd); + SFG_Menu* menu = NULL; +/* printf("WM_KILLFOCUS (ismenu: %i): %p\n", window->IsMenu, window ); */ + lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); + INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) ); - if (!hwnd || !wnd) - /* User switched to another application*/ - fgDeactivateMenu(window->ActiveMenu->ParentWindow); - else if ( - ( wnd->IsMenu && wnd->ActiveMenu->ParentWindow!=window->ActiveMenu->ParentWindow) || /* Make sure we don't kill the menu when trying to enter a submenu */ - (!wnd->IsMenu && wnd!=window->ActiveMenu->ParentWindow) - ) - /* User switched to another FreeGLUT window */ - fgDeactivateMenu(window->ActiveMenu->ParentWindow); + /* If we have an open menu, see if the open menu should be closed + when focus was lost because user either switched + application or FreeGLUT window (if one is running multiple + windows). If so, close menu the active menu. + */ + if ( fgStructure.CurrentMenu ) + menu = fgGetActiveMenu(); + + if ( menu ) + { + SFG_Window* wnd = NULL; + HWND hwnd = GetForegroundWindow(); /* Get window with current focus */ + if (hwnd) + /* See if its one of our windows */ + wnd = fgWindowByHandle(hwnd); + + if (!hwnd || !wnd) + /* User switched to another application*/ + fgDeactivateMenu(menu->ParentWindow); + else if ( + ( wnd->IsMenu && wnd->ActiveMenu && wnd->ActiveMenu->ParentWindow!=menu->ParentWindow) || /* Make sure we don't kill the menu when trying to enter a submenu */ + (!wnd->IsMenu && wnd!=menu->ParentWindow) + ) + /* User switched to another FreeGLUT window */ + fgDeactivateMenu(menu->ParentWindow); + } } - break; #if 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-22 10:54:45
|
Revision: 1359 http://freeglut.svn.sourceforge.net/freeglut/?rev=1359&view=rev Author: dcnieho Date: 2012-07-22 10:54:39 +0000 (Sun, 22 Jul 2012) Log Message: ----------- now checking for NULL window in fgDeactivateMenu (thanks for Ioannis to point out this occurs) now dealing with the aftermath of the corner case bugs of different menus in main and child windows both being open at the same time (which is a bug in itself, but can't figure out a fix). No more crash at least! Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_menu.c trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c Modified: trunk/freeglut/freeglut/src/fg_menu.c =================================================================== --- trunk/freeglut/freeglut/src/fg_menu.c 2012-07-22 10:03:36 UTC (rev 1358) +++ trunk/freeglut/freeglut/src/fg_menu.c 2012-07-22 10:54:39 UTC (rev 1359) @@ -620,11 +620,32 @@ /* * Outside the menu, deactivate if it's a downclick * - * XXX This isn't enough. A downclick outside of - * XXX the interior of our freeglut windows should also - * XXX deactivate the menu. This is more complicated. + * A downclick outside of the interior of our freeglut windows + * is dealt with in the WM_KILLFOCUS handler of fgPlatformWindowProc */ - fgDeactivateMenu( window->ActiveMenu->ParentWindow ); + { + if (window->ActiveMenu->ParentWindow) + fgDeactivateMenu( window->ActiveMenu->ParentWindow ); + else + { + /* + * Its a rare occasion that a window has an ActiveMenu but + * that menus does not have a parent window. It happens + * however in the corner case bug when one opens a menu in + * a main window, then opens a different menu in this main + * window's child (you now have two menus open + * simultaneously, thats the bug) and then click somewhere + * else that causes both menus to close. One of them is + * then not properly cleaned up. This finishes the cleaning + * and minimizes the impact on the user, he only needs one + * extra mouse click. + */ + fghSetMenuParentWindow ( NULL, window->ActiveMenu ); + window->ActiveMenu->IsActive = GL_FALSE; + window->ActiveMenu->ActiveEntry = NULL; + window->ActiveMenu = NULL; + } + } /* * XXX Why does an active menu require a redisplay at @@ -659,11 +680,12 @@ void fgDeactivateMenu( SFG_Window *window ) { SFG_Window *parent_window = NULL; + SFG_Menu* menu; + SFG_MenuEntry *menuEntry; /* Check if there is an active menu attached to this window... */ - SFG_Menu* menu = window->ActiveMenu; - SFG_MenuEntry *menuEntry; - + freeglut_return_if_fail( window ); + menu = window->ActiveMenu; /* Did we find an active window? */ freeglut_return_if_fail( menu ); Modified: trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-22 10:03:36 UTC (rev 1358) +++ trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-22 10:54:39 UTC (rev 1359) @@ -518,7 +518,7 @@ if (!hwnd || !wnd) /* User switched to another application*/ fgDeactivateMenu(menu->ParentWindow); - else if (!wnd->IsMenu && wnd!=menu->ParentWindow) + else if (!wnd->IsMenu && wnd!=menu->ParentWindow) /* Make sure we don't kill the menu when trying to enter a submenu */ /* User switched to another FreeGLUT window */ fgDeactivateMenu(menu->ParentWindow); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-29 05:28:16
|
Revision: 1378 http://freeglut.svn.sourceforge.net/freeglut/?rev=1378&view=rev Author: dcnieho Date: 2012-07-29 05:28:10 +0000 (Sun, 29 Jul 2012) Log Message: ----------- attempt to implement fghPlatformGetCursorPos on X11 Modified Paths: -------------- trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c Modified: trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c 2012-07-29 05:18:36 UTC (rev 1377) +++ trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c 2012-07-29 05:28:10 UTC (rev 1378) @@ -115,6 +115,8 @@ void fghPlatformGetCursorPos(SFG_XYUse *mouse_pos) { + /* Get current pointer location in screen coordinates + */ POINT pos; GetCursorPos(&pos); Modified: trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c 2012-07-29 05:18:36 UTC (rev 1377) +++ trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c 2012-07-29 05:28:10 UTC (rev 1378) @@ -149,3 +149,16 @@ XFlush( fgDisplay.pDisplay.Display ); } +void fghPlatformGetCursorPos(SFG_XYUse *mouse_pos) +{ + /* Get current pointer location in screen coordinates + */ + Window junk_window; + unsigned int junk_mask; + int junk_pos; + + XQueryPointer(fgDisplay.pDisplay.Display, fgDisplay.pDisplay.RootWindow, + &junk_window, &junk_window, + &mouse_pos->X, &mouse_pos->Y, + &junk_pos, &junk_pos, &junk_mask); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2013-03-04 09:55:02
|
Revision: 1550 http://freeglut.svn.sourceforge.net/freeglut/?rev=1550&view=rev Author: dcnieho Date: 2013-03-04 09:54:55 +0000 (Mon, 04 Mar 2013) Log Message: ----------- MenuStatusCallback when menu was closed did not return location of pointer relative to child window's top-left, it only worked for top level windows. To make this work, fghPlatformGetCursorPos now can return cursor pos relative to top-left of a specified window's client area (this is untested on X11) Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_menu.c trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c Modified: trunk/freeglut/freeglut/src/fg_menu.c =================================================================== --- trunk/freeglut/freeglut/src/fg_menu.c 2013-03-04 09:25:15 UTC (rev 1549) +++ trunk/freeglut/freeglut/src/fg_menu.c 2013-03-04 09:54:55 UTC (rev 1550) @@ -76,7 +76,7 @@ extern GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y ); -extern void fghPlatformGetCursorPos(SFG_XYUse *mouse_pos); +extern void fghPlatformGetCursorPos(const SFG_Window *window, GLboolean client, SFG_XYUse *mouse_pos); /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ @@ -534,7 +534,7 @@ * origin when looking at a child window * for parent windows: window->State.MouseX + glutGet( GLUT_WINDOW_X ) == mouse_pos.X */ - fghPlatformGetCursorPos(&mouse_pos); + fghPlatformGetCursorPos(NULL, GL_FALSE, &mouse_pos); menu->X = mouse_pos.X; menu->Y = mouse_pos.Y; @@ -744,12 +744,9 @@ fgState.MenuStateCallback(GLUT_MENU_NOT_IN_USE); if (fgState.MenuStatusCallback) { - /* Get cursor position on screen and convert to relative to parent_window's client area */ + /* Get cursor position relative to parent_window's client area */ SFG_XYUse mouse_pos; - fghPlatformGetCursorPos(&mouse_pos); - - mouse_pos.X -= glutGet( GLUT_WINDOW_X ); - mouse_pos.Y -= glutGet( GLUT_WINDOW_Y ); + fghPlatformGetCursorPos(parent_window, GL_TRUE, &mouse_pos); fgState.MenuStatusCallback(GLUT_MENU_NOT_IN_USE, mouse_pos.X, mouse_pos.Y); } Modified: trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c 2013-03-04 09:25:15 UTC (rev 1549) +++ trunk/freeglut/freeglut/src/mswin/fg_cursor_mswin.c 2013-03-04 09:54:55 UTC (rev 1550) @@ -128,13 +128,18 @@ } -void fghPlatformGetCursorPos(SFG_XYUse *mouse_pos) +void fghPlatformGetCursorPos(const SFG_Window *window, GLboolean client, SFG_XYUse *mouse_pos) { - /* Get current pointer location in screen coordinates + /* Get current pointer location in screen coordinates (if client is false or window is NULL), else + * Get current pointer location relative to top-left of client area of window (if client is true and window is not NULL) */ POINT pos; GetCursorPos(&pos); + /* convert to client coords if wanted */ + if (client && window && window->Window.Handle) + ScreenToClient(window->Window.Handle,&pos); + mouse_pos->X = pos.x; mouse_pos->Y = pos.y; mouse_pos->Use = GL_TRUE; Modified: trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2013-03-04 09:25:15 UTC (rev 1549) +++ trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2013-03-04 09:54:55 UTC (rev 1550) @@ -349,7 +349,7 @@ */ if (window && window->Children.First) /* This window has childs */ { - SFG_WindowHandleType hwnd; + HWND hwnd; SFG_Window* child_window; /* Get mouse position at time of message */ Modified: trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c =================================================================== --- trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c 2013-03-04 09:25:15 UTC (rev 1549) +++ trunk/freeglut/freeglut/src/x11/fg_cursor_x11.c 2013-03-04 09:54:55 UTC (rev 1550) @@ -149,18 +149,27 @@ XFlush( fgDisplay.pDisplay.Display ); } -void fghPlatformGetCursorPos(SFG_XYUse *mouse_pos) +void fghPlatformGetCursorPos(const SFG_Window *window, GLboolean client, SFG_XYUse *mouse_pos) { - /* Get current pointer location in screen coordinates + /* Get current pointer location in screen coordinates (if client is false or window is NULL), else + * Get current pointer location relative to top-left of client area of window (if client is true and window is not NULL) */ + Window w = (client && window && window->Window.Handle)? window->Window.Handle: fgDisplay.pDisplay.RootWindow; Window junk_window; unsigned int junk_mask; - int junk_pos; + int clientX, clientY; - XQueryPointer(fgDisplay.pDisplay.Display, fgDisplay.pDisplay.RootWindow, + XQueryPointer(fgDisplay.pDisplay.Display, w, &junk_window, &junk_window, - &mouse_pos->X, &mouse_pos->Y, - &junk_pos, &junk_pos, &junk_mask); + &mouse_pos->X, &mouse_pos->Y, /* Screen coords relative to root window's top-left */ + &clientX, &clientY, /* Client coords relative to window's top-left */ + &junk_mask); + if (client && window && window->Window.Handle) + { + mouse_pos->X = clientX; + mouse_pos->Y = clientY; + } + mouse_pos->Use = GL_TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2013-03-06 03:39:09
|
Revision: 1554 http://freeglut.svn.sourceforge.net/freeglut/?rev=1554&view=rev Author: dcnieho Date: 2013-03-06 03:39:00 +0000 (Wed, 06 Mar 2013) Log Message: ----------- joystick: - only poll joysticks if we have an active joystick - active joystick is defined as having callback and having positive (NON-ZERO!) pollInterval, as per GLUT sources - use fgState.NumActiveJoysticks instead of fghHaveJoystick to save bunch of unnecessary function calls etc - fghcbCheckJoystickPolls more concervative, per window we first check if a joystick is active (per above definition) Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_callbacks.c trunk/freeglut/freeglut/src/fg_internal.h trunk/freeglut/freeglut/src/fg_main.c Modified: trunk/freeglut/freeglut/src/fg_callbacks.c =================================================================== --- trunk/freeglut/freeglut/src/fg_callbacks.c 2013-03-05 17:08:32 UTC (rev 1553) +++ trunk/freeglut/freeglut/src/fg_callbacks.c 2013-03-06 03:39:00 UTC (rev 1554) @@ -213,13 +213,21 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" ); fgInitialiseJoysticks (); - if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate < 0 ) || - !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was disabled */ - ( callback && ( pollInterval >= 0 ) ) ) /* but is now enabled */ + if ( ( + fgStructure.CurrentWindow->State.JoystickPollRate <= 0 || /* Joystick callback was disabled */ + !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) + ) && + ( + callback && ( pollInterval > 0 ) /* but is now enabled */ + ) ) ++fgState.NumActiveJoysticks; - else if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate >= 0 ) && - FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was enabled */ - ( !callback || ( pollInterval < 0 ) ) ) /* but is now disabled */ + else if ( ( + fgStructure.CurrentWindow->State.JoystickPollRate > 0 && /* Joystick callback was enabled */ + FETCH_WCB(*fgStructure.CurrentWindow,Joystick) + ) && + ( + !callback || ( pollInterval <= 0 ) /* but is now disabled */ + ) ) --fgState.NumActiveJoysticks; SET_CALLBACK( Joystick ); Modified: trunk/freeglut/freeglut/src/fg_internal.h =================================================================== --- trunk/freeglut/freeglut/src/fg_internal.h 2013-03-05 17:08:32 UTC (rev 1553) +++ trunk/freeglut/freeglut/src/fg_internal.h 2013-03-06 03:39:00 UTC (rev 1554) @@ -316,7 +316,7 @@ fgExecutionState ExecState; /* Used for GLUT termination */ char *ProgramName; /* Name of the invoking program */ GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ - int NumActiveJoysticks; /* Number of active joysticks -- if zero, don't poll joysticks */ + int NumActiveJoysticks; /* Number of active joysticks (callback defined and positive pollrate) -- if zero, don't poll joysticks */ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */ int MouseWheelTicks; /* Number of ticks the mouse wheel has turned */ Modified: trunk/freeglut/freeglut/src/fg_main.c =================================================================== --- trunk/freeglut/freeglut/src/fg_main.c 2013-03-05 17:08:32 UTC (rev 1553) +++ trunk/freeglut/freeglut/src/fg_main.c 2013-03-06 03:39:00 UTC (rev 1554) @@ -172,15 +172,21 @@ static void fghcbCheckJoystickPolls( SFG_Window *window, SFG_Enumerator *enumerator ) { - fg_time_t checkTime = fgElapsedTime( ); - - if( window->State.JoystickLastPoll + window->State.JoystickPollRate <= - checkTime ) + fg_time_t checkTime; + + if (window->State.JoystickPollRate > 0 && FETCH_WCB( *window, Joystick )) { + /* This window has a joystick to be polled (if pollrate <= 0, user needs to poll manually with glutForceJoystickFunc */ + checkTime= fgElapsedTime( ); + + if( window->State.JoystickLastPoll + window->State.JoystickPollRate <= + checkTime ) + { #if !defined(_WIN32_WCE) - fgJoystickPollWindow( window ); + fgJoystickPollWindow( window ); #endif /* !defined(_WIN32_WCE) */ - window->State.JoystickLastPoll = checkTime; + window->State.JoystickLastPoll = checkTime; + } } fgEnumSubWindows( window, fghcbCheckJoystickPolls, enumerator ); @@ -188,6 +194,10 @@ /* * Check all windows for joystick polling + * + * The real way to do this is to make use of the glutTimer() API + * to more cleanly re-implement the joystick API. Then, this code + * and all other "joystick timer" code can be yanked. */ static void fghCheckJoystickPolls( void ) { @@ -312,29 +322,8 @@ * there is a joystick callback. We have a short-circuit early * return if we find any joystick handler registered. * - * The real way to do this is to make use of the glutTimer() API - * to more cleanly re-implement the joystick API. Then, this code - * and all other "joystick timer" code can be yanked. * */ -static void fghCheckJoystickCallback( SFG_Window* w, SFG_Enumerator* e) -{ - if( FETCH_WCB( *w, Joystick ) ) - { - e->found = GL_TRUE; - e->data = w; - } - fgEnumSubWindows( w, fghCheckJoystickCallback, e ); -} -static int fghHaveJoystick( void ) -{ - SFG_Enumerator enumerator; - - enumerator.found = GL_FALSE; - enumerator.data = NULL; - fgEnumWindows( fghCheckJoystickCallback, &enumerator ); - return !!enumerator.data; -} static void fghHavePendingRedisplaysCallback( SFG_Window* w, SFG_Enumerator* e) { if( w->State.Redisplay && w->State.Visible ) @@ -353,6 +342,7 @@ fgEnumWindows( fghHavePendingRedisplaysCallback, &enumerator ); return !!enumerator.data; } + /* * Returns the number of GLUT ticks (milliseconds) till the next timer event. */ @@ -378,9 +368,9 @@ return; msec = fghNextTimer( ); - /* XXX Use GLUT timers for joysticks... */ + /* XXX Should use GLUT timers for joysticks... */ /* XXX Dumb; forces granularity to .01sec */ - if( fghHaveJoystick( ) && ( msec > 10 ) ) + if( fgState.NumActiveJoysticks>0 && ( msec > 10 ) ) msec = 10; fgPlatformSleepForEvents ( msec ); @@ -398,7 +388,8 @@ if( fgState.Timers.First ) fghCheckTimers( ); - fghCheckJoystickPolls( ); + if (fgState.NumActiveJoysticks>0) /* If zero, don't poll joysticks */ + fghCheckJoystickPolls( ); fghDisplayAll( ); fgCloseWindows( ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2015-12-14 16:22:28
|
Revision: 1776 http://sourceforge.net/p/freeglut/code/1776 Author: dcnieho Date: 2015-12-14 16:22:25 +0000 (Mon, 14 Dec 2015) Log Message: ----------- Defined logic for glutCreateSubWindow when negative position is allowed Added check for if fgCreateWindow cannot allocate a window, it will produce an error. (cherry picked from commit 0ed05f64589fbcc67f225e1dc3ef6f5181fd319f) (cherry picked from commit 0ed05f64589fbcc67f225e1dc3ef6f5181fd319f) Modified Paths: -------------- trunk/freeglut/freeglut/src/fg_structure.c trunk/freeglut/freeglut/src/fg_window.c Modified: trunk/freeglut/freeglut/src/fg_structure.c =================================================================== --- trunk/freeglut/freeglut/src/fg_structure.c 2015-12-14 16:22:18 UTC (rev 1775) +++ trunk/freeglut/freeglut/src/fg_structure.c 2015-12-14 16:22:25 UTC (rev 1776) @@ -75,6 +75,11 @@ /* Have the window object created */ SFG_Window *window = (SFG_Window *)calloc( 1, sizeof(SFG_Window) ); + if( !window ) + { + fgError( "Out of memory. Could not create window." ); + } + fgPlatformCreateWindow ( window ); fghClearCallBacks( window ); Modified: trunk/freeglut/freeglut/src/fg_window.c =================================================================== --- trunk/freeglut/freeglut/src/fg_window.c 2015-12-14 16:22:18 UTC (rev 1775) +++ trunk/freeglut/freeglut/src/fg_window.c 2015-12-14 16:22:25 UTC (rev 1776) @@ -177,12 +177,12 @@ * XXX application has not already done so. The "freeglut" community * XXX decided not to go this route (freeglut-developer e-mail from * XXX Steve Baker, 12/16/04, 4:22 PM CST, "Re: [Freeglut-developer] - * XXX Desired 'freeglut' behaviour when there is no current window" + * XXX Desired 'freeglut' behaviour when there is no current window") */ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateWindow" ); - return fgCreateWindow( NULL, title, fgState.Position.Use, - fgState.Position.X, fgState.Position.Y, + return fgCreateWindow( NULL, title, + fgState.Position.Use, fgState.Position.X, fgState.Position.Y, fgState.Size.Use, fgState.Size.X, fgState.Size.Y, GL_FALSE, GL_FALSE )->ID; } @@ -199,33 +199,51 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutCreateSubWindow" ); parent = fgWindowByID( parentID ); freeglut_return_val_if_fail( parent != NULL, 0 ); - if ( x < 0 ) + + if ( fgState.AllowNegativeWindowPosition ) { - x = parent->State.Width + x ; - if ( w >= 0 ) x -= w ; - } + /* XXX This results in different widths/heights than if AllowNegativeWindowPosition + * XXX was false. The "freeglut" community defined this logic. + * XXX (freeglut-developer e-mail from Diederick C. Niehorster, 11/15/2015, 4:06 PM EST. + * XXX "Re: [Freeglut-developer] glutInitWindowPosition with negative coordinate(s)") + */ - if ( w < 0 ) w = parent->State.Width - x + w ; - if ( w < 0 ) - { - x += w ; - w = -w ; + if ( w < 0 ) w = parent->State.Width + w ; + if ( h < 0 ) h = parent->State.Height + h ; } - - if ( y < 0 ) + else { - y = parent->State.Height + y ; - if ( h >= 0 ) y -= h ; - } + if ( ( x < 0 ) ) + { + x = parent->State.Width + x ; + if ( w > 0 ) x -= w ; + } - if ( h < 0 ) h = parent->State.Height - y + h ; - if ( h < 0 ) - { - y += h ; - h = -h ; + if ( w < 0 ) w = parent->State.Width - x + w ; + if ( w < 0 ) + { + x += w ; + w = -w ; + } + + if ( ( y < 0 ) ) + { + y = parent->State.Height + y ; + if ( h > 0 ) y -= h ; + } + + if ( h < 0 ) h = parent->State.Height - y + h ; + if ( h < 0 ) + { + y += h ; + h = -h ; + } } - window = fgCreateWindow( parent, "", GL_TRUE, x, y, GL_TRUE, w, h, GL_FALSE, GL_FALSE ); + window = fgCreateWindow( parent, "", + GL_TRUE, x, y, + GL_TRUE, w, h, + GL_FALSE, GL_FALSE ); ret = window->ID; return ret; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |