From: <fa...@us...> - 2006-09-21 17:13:45
|
Revision: 696 http://svn.sourceforge.net/freeglut/?rev=696&view=rev Author: fayjf Date: 2006-09-21 10:13:37 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Changing "GameMode" to "GameModeWindow ... and testing whether I can get to SVN directly Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/src/freeglut_gamemode.c trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_menu.c trunk/freeglut/freeglut/src/freeglut_state.c trunk/freeglut/freeglut/src/freeglut_structure.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 17:13:37 UTC (rev 696) @@ -1176,3 +1176,11 @@ (304) Updated build requirements for SuSE 10.1. (305) Check fgets for return value to avoid warnings. + +************************************************************************** +* Changes on September 20, 2006 +************************************************************************** + +(306) Changed "fgStructure.GameMode" to "fgStructure.GameModeWindow" to +reflect better what it is + Modified: trunk/freeglut/freeglut/src/freeglut_gamemode.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_gamemode.c 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/src/freeglut_gamemode.c 2006-09-21 17:13:37 UTC (rev 696) @@ -417,8 +417,8 @@ { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutEnterGameMode" ); - if( fgStructure.GameMode ) - fgAddToWindowDestroyList( fgStructure.GameMode ); + if( fgStructure.GameModeWindow ) + fgAddToWindowDestroyList( fgStructure.GameModeWindow ); else fghRememberState( ); @@ -428,16 +428,16 @@ return 0; } - fgStructure.GameMode = fgCreateWindow( + fgStructure.GameModeWindow = fgCreateWindow( NULL, "FREEGLUT", 0, 0, fgState.GameModeSize.X, fgState.GameModeSize.Y, GL_TRUE, GL_FALSE ); - fgStructure.GameMode->State.Width = fgState.GameModeSize.X; - fgStructure.GameMode->State.Height = fgState.GameModeSize.Y; - fgStructure.GameMode->State.NeedToResize = GL_TRUE; + fgStructure.GameModeWindow->State.Width = fgState.GameModeSize.X; + fgStructure.GameModeWindow->State.Height = fgState.GameModeSize.Y; + fgStructure.GameModeWindow->State.NeedToResize = GL_TRUE; - fgStructure.GameMode->State.IsGameMode = GL_TRUE; + fgStructure.GameModeWindow->State.IsGameMode = GL_TRUE; #if TARGET_HOST_UNIX_X11 @@ -457,12 +457,12 @@ * the application which we have to aviod, so wait until it's viewable: */ while( GrabSuccess != XGrabPointer( - fgDisplay.Display, fgStructure.GameMode->Window.Handle, + fgDisplay.Display, fgStructure.GameModeWindow->Window.Handle, TRUE, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | PointerMotionMask, GrabModeAsync, GrabModeAsync, - fgStructure.GameMode->Window.Handle, None, CurrentTime) ) + fgStructure.GameModeWindow->Window.Handle, None, CurrentTime) ) usleep( 100 ); /* @@ -471,7 +471,7 @@ */ XSetInputFocus( fgDisplay.Display, - fgStructure.GameMode->Window.Handle, + fgStructure.GameModeWindow->Window.Handle, RevertToNone, CurrentTime ); @@ -521,7 +521,7 @@ /* Grab the keyboard, too */ XGrabKeyboard( fgDisplay.Display, - fgStructure.GameMode->Window.Handle, + fgStructure.GameModeWindow->Window.Handle, FALSE, GrabModeAsync, GrabModeAsync, CurrentTime @@ -529,7 +529,7 @@ #endif - return fgStructure.GameMode->ID; + return fgStructure.GameModeWindow->ID; } /* @@ -539,12 +539,12 @@ { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLeaveGameMode" ); - freeglut_return_if_fail( fgStructure.GameMode ); + freeglut_return_if_fail( fgStructure.GameModeWindow ); - fgStructure.GameMode->State.IsGameMode = GL_FALSE; + fgStructure.GameModeWindow->State.IsGameMode = GL_FALSE; - fgAddToWindowDestroyList( fgStructure.GameMode ); - fgStructure.GameMode = NULL; + fgAddToWindowDestroyList( fgStructure.GameModeWindow ); + fgStructure.GameModeWindow = NULL; #if TARGET_HOST_UNIX_X11 @@ -566,7 +566,7 @@ switch( eWhat ) { case GLUT_GAME_MODE_ACTIVE: - return !!fgStructure.GameMode; + return !!fgStructure.GameModeWindow; case GLUT_GAME_MODE_POSSIBLE: return fghChangeDisplayMode( GL_TRUE ); @@ -587,7 +587,7 @@ /* * This is true if the game mode has been activated successfully.. */ - return !!fgStructure.GameMode; + return !!fgStructure.GameModeWindow; } fgWarning( "Unknown gamemode get: %d", eWhat ); Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2006-09-21 17:13:37 UTC (rev 696) @@ -592,19 +592,19 @@ typedef struct tagSFG_Structure SFG_Structure; struct tagSFG_Structure { - SFG_List Windows; /* The global windows list */ - SFG_List Menus; /* The global menus list */ + SFG_List Windows; /* The global windows list */ + SFG_List Menus; /* The global menus list */ SFG_List WindowsToDestroy; - SFG_Window* CurrentWindow; /* The currently set window */ - SFG_Menu* CurrentMenu; /* Same, but menu... */ + SFG_Window* CurrentWindow; /* The currently set window */ + SFG_Menu* CurrentMenu; /* Same, but menu... */ - SFG_MenuContext* MenuContext; /* OpenGL rendering context for menus */ + SFG_MenuContext* MenuContext; /* OpenGL rendering context for menus */ - SFG_Window* GameMode; /* The game mode window */ + SFG_Window* GameModeWindow; /* The game mode window */ - int WindowID; /* The new current window ID */ - int MenuID; /* The new current menu ID */ + int WindowID; /* The new current window ID */ + int MenuID; /* The new current menu ID */ }; /* Modified: trunk/freeglut/freeglut/src/freeglut_menu.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_menu.c 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/src/freeglut_menu.c 2006-09-21 17:13:37 UTC (rev 696) @@ -140,7 +140,7 @@ */ static GLvoid fghGetVMaxExtent( SFG_Window* window, int* x, int* y ) { - if( fgStructure.GameMode ) + if( fgStructure.GameModeWindow ) { #if TARGET_HOST_UNIX_X11 int wx, wy; Modified: trunk/freeglut/freeglut/src/freeglut_state.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_state.c 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/src/freeglut_state.c 2006-09-21 17:13:37 UTC (rev 696) @@ -370,7 +370,7 @@ /* ...then we've got to correct the results we've just received... */ #if !TARGET_HOST_WINCE - if ( ( fgStructure.GameMode != fgStructure.CurrentWindow ) && ( fgStructure.CurrentWindow->Parent == NULL ) && + if ( ( fgStructure.GameModeWindow != fgStructure.CurrentWindow ) && ( fgStructure.CurrentWindow->Parent == NULL ) && ( ! fgStructure.CurrentWindow->IsMenu ) ) { winRect.left += GetSystemMetrics( SM_CXSIZEFRAME ); Modified: trunk/freeglut/freeglut/src/freeglut_structure.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_structure.c 2006-08-05 16:31:20 UTC (rev 695) +++ trunk/freeglut/freeglut/src/freeglut_structure.c 2006-09-21 17:13:37 UTC (rev 696) @@ -346,7 +346,7 @@ fgStructure.CurrentWindow = NULL; fgStructure.CurrentMenu = NULL; fgStructure.MenuContext = NULL; - fgStructure.GameMode = NULL; + fgStructure.GameModeWindow = NULL; fgStructure.WindowID = 0; fgStructure.MenuID = 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2006-09-21 17:34:05
|
Revision: 697 http://svn.sourceforge.net/freeglut/?rev=697&view=rev Author: fayjf Date: 2006-09-21 10:33:56 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Fixing two minor bugs, adding comments Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_joystick.c trunk/freeglut/freeglut/src/freeglut_main.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-09-21 17:13:37 UTC (rev 696) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 17:33:56 UTC (rev 697) @@ -1184,3 +1184,15 @@ (306) Changed "fgStructure.GameMode" to "fgStructure.GameModeWindow" to reflect better what it is +************************************************************************** +* Changes on September 21, 2006 +************************************************************************** + +(307) Added an end-of-line character to a warning message about an unknown +X event type + +(308) Fixing a problem in which "glutGetWindow" would return a menu's window +instead of the menu's parent window + +(309) Added some handy comments, spacing, fixed a typo in a comment + Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2006-09-21 17:13:37 UTC (rev 696) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2006-09-21 17:33:56 UTC (rev 697) @@ -77,13 +77,15 @@ #define strdup _strdup #endif -/* Those files should be available on every platform. */ +/* These files should be available on every platform. */ #include <GL/gl.h> #include <GL/glu.h> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> + +/* These are included based on autoconf directives. */ #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif @@ -126,6 +128,8 @@ # define FALSE 0 #endif +/* General defines */ + #define INVALID_MODIFIERS 0xffffffff /* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */ @@ -284,7 +288,7 @@ int DisplayPointerX; /* saved X location of the pointer */ int DisplayPointerY; /* saved Y location of the pointer */ -#endif +#endif /* X_XF86VidModeGetModeLine */ #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE HINSTANCE Instance; /* The application's instance */ Modified: trunk/freeglut/freeglut/src/freeglut_joystick.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_joystick.c 2006-09-21 17:13:37 UTC (rev 696) +++ trunk/freeglut/freeglut/src/freeglut_joystick.c 2006-09-21 17:33:56 UTC (rev 697) @@ -980,7 +980,7 @@ http://msdn.microsoft.com/archive/en-us/dnargame/html/msdn_sidewind3d.asp */ # if defined(_MSC_VER) -# pragma comment (lib, "advapi32.lib") +# pragma comment (lib, "advapi32.lib") /* library pragmas are bad */ # endif static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_sz ) Modified: trunk/freeglut/freeglut/src/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_main.c 2006-09-21 17:13:37 UTC (rev 696) +++ trunk/freeglut/freeglut/src/freeglut_main.c 2006-09-21 17:33:56 UTC (rev 697) @@ -69,7 +69,7 @@ #endif #ifndef MIN -#define MIN(a,b) (((a)<(b)) ? (a) : (b)) +# define MIN(a,b) (((a)<(b)) ? (a) : (b)) #endif @@ -1404,7 +1404,7 @@ break; /* XXX Should disable this event */ default: - fgWarning ("Unknown X event type: %d", event.type); + fgWarning ("Unknown X event type: %d\n", event.type); break; } } Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-21 17:13:37 UTC (rev 696) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-21 17:33:56 UTC (rev 697) @@ -30,7 +30,7 @@ #if TARGET_HOST_WINCE #include <aygshell.h> -#pragma comment( lib, "Aygshell.lib" ) +#pragma comment( lib, "Aygshell.lib" ) /* library pragmas are bad */ static wchar_t* fghWstrFromStr(const char* str) { @@ -764,10 +764,11 @@ */ int FGAPIENTRY glutGetWindow( void ) { + SFG_Window *win = fgStructure.CurrentWindow; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetWindow" ); - if( fgStructure.CurrentWindow == NULL ) - return 0; - return fgStructure.CurrentWindow->ID; + while ( win && win->IsMenu ) + win = win->Parent; + return win ? win->ID : 0; } /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2006-09-21 18:44:58
|
Revision: 699 http://svn.sourceforge.net/freeglut/?rev=699&view=rev Author: fayjf Date: 2006-09-21 11:44:55 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Enhancing the "CallbackMaker" demo Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/progs/demos/CallbackMaker/CallbackMaker.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-09-21 18:39:09 UTC (rev 698) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 18:44:55 UTC (rev 699) @@ -1199,3 +1199,8 @@ (310) Changed "TARGET_HOST_UNIX_X11" to "TARGET_HOST_POSIX_X11" to avoid trademark issues, per Joe Krahn; also rationalized the other "TARGET_HOST" definitions + +(311) Added futher callback functionality to the CallbackMaker demo program. +Also added a prompt for user input to highlight a difference betwen GLUT +and "freeglut" + Modified: trunk/freeglut/freeglut/progs/demos/CallbackMaker/CallbackMaker.c =================================================================== --- trunk/freeglut/freeglut/progs/demos/CallbackMaker/CallbackMaker.c 2006-09-21 18:39:09 UTC (rev 698) +++ trunk/freeglut/freeglut/progs/demos/CallbackMaker/CallbackMaker.c 2006-09-21 18:44:55 UTC (rev 699) @@ -13,7 +13,10 @@ int reshape_called = 0, key_called = 0, special_called = 0, visibility_called = 0, keyup_called = 0, specialup_called = 0, joystick_called = 0, mouse_called = 0, mousewheel_called = 0, motion_called = 0, passivemotion_called = 0, entry_called = 0, - close_called = 0 ; + close_called = 0, overlaydisplay_called = 0, windowstatus_called = 0, + spacemotion_called = 0, spacerotation_called = 0, spacebutton_called = 0, + buttonbox_called = 0, dials_called = 0, tabletmotion_called = 0, tabletbutton_called = 0, + menudestroy_called = 0, menustatus_called = 0 ; int reshape_width = -1, reshape_height = -1, reshape_seq = -1 ; int key_key = -1, key_x = -1, key_y = -1, key_seq = -1 ; int special_key = -1, special_x = -1, special_y = -1, special_seq = -1 ; @@ -292,13 +295,138 @@ ++sequence_number, window ) ; } +static void +OverlayDisplay(void) +{ + int window = glutGetWindow () ; + overlaydisplay_called = 1 ; + printf ( "%6d Window %d OverlayDisplay Callback\n", + ++sequence_number, window ) ; + glutPostRedisplay () ; +} +static void +WindowStatus(int state) +{ + int window = glutGetWindow () ; + windowstatus_called = 1 ; + printf ( "%6d Window %d WindowStatus Callback: %d\n", + ++sequence_number, window, state ) ; + glutPostRedisplay () ; +} +static void +SpaceMotion(int x, int y, int z) +{ + int window = glutGetWindow () ; + spacemotion_called = 1 ; + printf ( "%6d Window %d SpaceMotion Callback: %d %d %d\n", + ++sequence_number, window, x, y, z ) ; + glutPostRedisplay () ; +} + +static void +SpaceRotation(int x, int y, int z) +{ + int window = glutGetWindow () ; + spacerotation_called = 1 ; + printf ( "%6d Window %d SpaceRotation Callback: %d %d %d\n", + ++sequence_number, window, x, y, z ) ; + glutPostRedisplay () ; +} + +static void +SpaceButton(int button, int updown) +{ + int window = glutGetWindow () ; + spacebutton_called = 1 ; + printf ( "%6d Window %d SpaceButton Callback: %d %d\n", + ++sequence_number, window, button, updown ) ; + glutPostRedisplay () ; +} + +static void +Dials(int x, int y) +{ + int window = glutGetWindow () ; + dials_called = 1 ; + printf ( "%6d Window %d Dials Callback: %d %d\n", + ++sequence_number, window, x, y ) ; + glutPostRedisplay () ; +} + +static void +ButtonBox(int button, int updown) +{ + int window = glutGetWindow () ; + buttonbox_called = 1 ; + printf ( "%6d Window %d ButtonBox Callback: %d %d\n", + ++sequence_number, window, button, updown ) ; + glutPostRedisplay () ; +} + +static void +TabletMotion(int x, int y) +{ + int window = glutGetWindow () ; + tabletmotion_called = 1 ; + printf ( "%6d Window %d TabletMotion Callback: %d %d\n", + ++sequence_number, window, x, y ) ; + glutPostRedisplay () ; +} + +static void +TabletButton(int button, int updown, int x, int y) +{ + int window = glutGetWindow () ; + tabletbutton_called = 1 ; + printf ( "%6d Window %d TabletButton Callback: %d %d %d %d\n", + ++sequence_number, window, button, updown, x, y ) ; + glutPostRedisplay () ; +} + +static void +MenuCallback ( int menuID ) +{ + int window = glutGetWindow () ; + printf( "%6d Window %d MenuCallback - menuID is %d\n", + ++sequence_number, window, menuID ); +} + +static void +MenuDestroy( void ) +{ + int window = glutGetWindow () ; + menudestroy_called = 1 ; + printf ( "%6d Window %d MenuDestroy Callback\n", + ++sequence_number, window ) ; + glutPostRedisplay () ; +} + +static void +MenuStatus( int status, int x, int y ) +{ + int window = glutGetWindow () ; + menudestroy_called = 1 ; + printf ( "%6d Window %d MenuStatus Callback: %d %d %d\n", + ++sequence_number, window, status, x, y ) ; + glutPostRedisplay () ; +} + +static void Idle ( void ) +{ + ++sequence_number ; +} + int main(int argc, char *argv[]) { +#define STRING_LENGTH 10 int freeglut_window, aux_window ; + char dummy_string[STRING_LENGTH]; + int menuID, subMenuA, subMenuB; + glutInitWindowSize(500, 250); glutInitWindowPosition ( 140, 140 ); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); @@ -323,7 +451,41 @@ glutPassiveMotionFunc ( PassiveMotion ) ; glutEntryFunc ( Entry ) ; glutCloseFunc ( Close ) ; + glutOverlayDisplayFunc ( OverlayDisplay ) ; + glutWindowStatusFunc ( WindowStatus ) ; + glutSpaceballMotionFunc ( SpaceMotion ) ; + glutSpaceballRotateFunc ( SpaceRotation ) ; + glutSpaceballButtonFunc ( SpaceButton ) ; + glutButtonBoxFunc ( ButtonBox ) ; + glutDialsFunc ( Dials ) ; + glutTabletMotionFunc ( TabletMotion ) ; + glutTabletButtonFunc ( TabletButton ) ; + glutMenuDestroyFunc ( MenuDestroy ); + glutMenuStatusFunc ( MenuStatus ); + glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF) ; + subMenuA = glutCreateMenu( MenuCallback ); + glutAddMenuEntry( "Sub menu A1 (01)", 1 ); + glutAddMenuEntry( "Sub menu A2 (02)", 2 ); + glutAddMenuEntry( "Sub menu A3 (03)", 3 ); + + subMenuB = glutCreateMenu( MenuCallback ); + glutAddMenuEntry( "Sub menu B1 (04)", 4 ); + glutAddMenuEntry( "Sub menu B2 (05)", 5 ); + glutAddMenuEntry( "Sub menu B3 (06)", 6 ); + glutAddSubMenu( "Going to sub menu A", subMenuA ); + + menuID = glutCreateMenu( MenuCallback ); + glutAddMenuEntry( "Entry one", 1 ); + glutAddMenuEntry( "Entry two", 2 ); + glutAddMenuEntry( "Entry three", 3 ); + glutAddMenuEntry( "Entry four", 4 ); + glutAddMenuEntry( "Entry five", 5 ); + glutAddSubMenu( "Enter sub menu A", subMenuA ); + glutAddSubMenu( "Enter sub menu B", subMenuB ); + + glutAttachMenu( GLUT_LEFT_BUTTON ); + aux_window = glutCreateWindow( "Second Window" ); printf ( "Creating window %d as 'Second Window'\n", aux_window ) ; @@ -343,7 +505,22 @@ glutPassiveMotionFunc ( PassiveMotion ) ; glutEntryFunc ( Entry ) ; glutCloseFunc ( Close ) ; + glutOverlayDisplayFunc ( OverlayDisplay ) ; + glutWindowStatusFunc ( WindowStatus ) ; + glutSpaceballMotionFunc ( SpaceMotion ) ; + glutSpaceballRotateFunc ( SpaceRotation ) ; + glutSpaceballButtonFunc ( SpaceButton ) ; + glutButtonBoxFunc ( ButtonBox ) ; + glutDialsFunc ( Dials ) ; + glutTabletMotionFunc ( TabletMotion ) ; + glutTabletButtonFunc ( TabletButton ) ; + glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF) ; + glutIdleFunc ( Idle ); + + printf ( "Please enter something to continue: " ); + fgets ( dummy_string, STRING_LENGTH, stdin ); + glutMainLoop(); printf ( "Back from the 'freeglut' main loop\n" ) ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2006-09-21 18:59:41
|
Revision: 700 http://svn.sourceforge.net/freeglut/?rev=700&view=rev Author: fayjf Date: 2006-09-21 11:59:37 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Adding multisampling to *nix and Windows; also some other pixel format enhancements to Windows Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-09-21 18:44:55 UTC (rev 699) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 18:59:37 UTC (rev 700) @@ -1204,3 +1204,6 @@ Also added a prompt for user input to highlight a difference betwen GLUT and "freeglut" +(312) Added multisampling support for *nix and Windows; some other pixel +format changes for Windows + Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-21 18:44:55 UTC (rev 699) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-21 18:59:37 UTC (rev 700) @@ -135,6 +135,8 @@ ATTRIB_VAL( GLX_AUX_BUFFERS, 3 ); if( fgState.DisplayMode & GLUT_AUX4 ) ATTRIB_VAL( GLX_AUX_BUFFERS, 4 ); + if ( fgState.DisplayMode & GLUT_MULTISAMPLE ) + ATTRIB_VAL( GLX_SAMPLES_SGIS, 4 ); /* Push a null at the end of the list */ @@ -170,10 +172,33 @@ * Setup the pixel format for a Win32 window */ #if TARGET_HOST_MS_WINDOWS +/* WRONG-- FIXME */ +/* The following include file is available from SGI but is not standard: + * #include <GL/wglext.h> + * So we copy the necessary parts out of it. + */ +typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); + +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_FULL_ACCELERATION_ARB 0x2027 + +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 + + GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type ) { -#ifdef _WIN32_WCE +#if defined(_WIN32_WCE) return GL_TRUE; #else PIXELFORMATDESCRIPTOR* ppfd, pfd; @@ -195,15 +220,31 @@ pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = flags; - pfd.iPixelType = PFD_TYPE_RGBA; + + if( fgState.DisplayMode & GLUT_INDEX ) + { + pfd.iPixelType = PFD_TYPE_COLORINDEX; + pfd.cRedBits = 0; + pfd.cGreenBits = 0; + pfd.cBlueBits = 0; + pfd.cAlphaBits = 0; + } + else + { + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cRedBits = 8; + pfd.cGreenBits = 8; + pfd.cBlueBits = 8; + if ( fgState.DisplayMode & GLUT_ALPHA ) + pfd.cAlphaBits = 8; + else + pfd.cAlphaBits = 0; + } + pfd.cColorBits = 24; - pfd.cRedBits = 0; pfd.cRedShift = 0; - pfd.cGreenBits = 0; pfd.cGreenShift = 0; - pfd.cBlueBits = 0; pfd.cBlueShift = 0; - pfd.cAlphaBits = 0; pfd.cAlphaShift = 0; pfd.cAccumBits = 0; pfd.cAccumRedBits = 0; @@ -238,6 +279,80 @@ ppfd = &pfd; pixelformat = ChoosePixelFormat( window->Window.Device, ppfd ); + + /* windows hack for multismapling */ + if (fgState.DisplayMode&GLUT_MULTISAMPLE) + { + PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB=NULL; + HGLRC rc, rc_before=wglGetCurrentContext(); + HWND hWnd; + HDC hDC, hDC_before=wglGetCurrentDC(); + WNDCLASS wndCls; + ATOM atom; + + /* create a dummy window */ + ZeroMemory(&wndCls, sizeof(wndCls)); + wndCls.lpfnWndProc = DefWindowProc; + wndCls.hInstance = fgDisplay.Instance; + wndCls.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; + wndCls.lpszClassName = _T("FREEGLUT_dummy"); + atom = RegisterClass( &wndCls ); + + hWnd=CreateWindow((LPCSTR)atom, _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 ); + hDC=GetDC(hWnd); + SetPixelFormat( hDC, pixelformat, ppfd ); + + rc = wglCreateContext( hDC ); + wglMakeCurrent(hDC, rc); + + wglGetEntensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); + if (wglGetEntensionsStringARB) + { + const char * pWglExtString=wglGetEntensionsStringARB(hDC); + if (pWglExtString) + { + if (strstr(pWglExtString, "WGL_ARB_multisample")) + { + int pAttributes[100]; + int iCounter=0; + int iPixelFormat; + BOOL bValid; + float fAttributes[] = {0,0}; + UINT numFormats; + PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARBProc=NULL; + + wglChoosePixelFormatARBProc=(PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB"); + if ( wglChoosePixelFormatARBProc ) + { + pAttributes[iCounter++]=WGL_DRAW_TO_WINDOW_ARB; pAttributes[iCounter++]=GL_TRUE; + pAttributes[iCounter++]=WGL_SUPPORT_OPENGL_ARB; pAttributes[iCounter++]=GL_TRUE; + pAttributes[iCounter++]=WGL_ACCELERATION_ARB; pAttributes[iCounter++]=WGL_FULL_ACCELERATION_ARB; + + pAttributes[iCounter++]=WGL_COLOR_BITS_ARB; pAttributes[iCounter++]=pfd.cColorBits ; + pAttributes[iCounter++]=WGL_ALPHA_BITS_ARB; pAttributes[iCounter++]=pfd.cAlphaBits; + pAttributes[iCounter++]=WGL_DEPTH_BITS_ARB; pAttributes[iCounter++]=pfd.cDepthBits; + pAttributes[iCounter++]=WGL_STENCIL_BITS_ARB; pAttributes[iCounter++]=pfd.cStencilBits; + + pAttributes[iCounter++]=WGL_DOUBLE_BUFFER_ARB; pAttributes[iCounter++]=(fgState.DisplayMode & GLUT_DOUBLE)!=0; + pAttributes[iCounter++]=WGL_SAMPLE_BUFFERS_ARB; pAttributes[iCounter++]=GL_TRUE; + pAttributes[iCounter++]=WGL_SAMPLES_ARB; pAttributes[iCounter++]=4; + pAttributes[iCounter++]=0; pAttributes[iCounter++]=0; /* terminator */ + + bValid = wglChoosePixelFormatARBProc(window->Window.Device,pAttributes,fAttributes,1,&iPixelFormat,&numFormats); + + if (bValid && numFormats>0) + pixelformat=iPixelFormat; + } + } + wglMakeCurrent( hDC_before, rc_before); + wglDeleteContext(rc); + ReleaseDC(hWnd, hDC); + DestroyWindow(hWnd); + UnregisterClass(_T("FREEGLUT_dummy"), fgDisplay.Instance); + } + } + } + if( pixelformat == 0 ) return GL_FALSE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2006-09-21 19:02:23
|
Revision: 701 http://svn.sourceforge.net/freeglut/?rev=701&view=rev Author: fayjf Date: 2006-09-21 12:02:14 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Adding temporary fix to "glutInitDisplayString" to ignore numerical assignments Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/src/freeglut_init.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-09-21 18:59:37 UTC (rev 700) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 19:02:14 UTC (rev 701) @@ -1207,3 +1207,7 @@ (312) Added multisampling support for *nix and Windows; some other pixel format changes for Windows +(313) Added Markus Henschel's change (e-mail to developers' list, June 28, +2006) to have the "glutInitDisplayString" ignore numerical assignments to +tokens as a temporary fix. + Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2006-09-21 18:59:37 UTC (rev 700) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2006-09-21 19:02:14 UTC (rev 701) @@ -727,9 +727,16 @@ { /* Process this token */ int i ; + + /* Temporary fix: Ignore any length specifications and at least + * process the basic token + * TODO: Fix this permanently + */ + size_t cleanlength = strcspn ( token, "=<>~!" ); + for ( i = 0; i < NUM_TOKENS; i++ ) { - if ( strcmp ( token, Tokens[i] ) == 0 ) break ; + if ( strncmp ( token, Tokens[i], cleanlength ) == 0 ) break ; } switch ( i ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2006-09-21 22:07:01
|
Revision: 703 http://svn.sourceforge.net/freeglut/?rev=703&view=rev Author: fayjf Date: 2006-09-21 15:06:57 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Fixing Bug #1398196 - Windows message argument Modified Paths: -------------- trunk/freeglut/freeglut/ChangeLog trunk/freeglut/freeglut/src/freeglut_main.c Modified: trunk/freeglut/freeglut/ChangeLog =================================================================== --- trunk/freeglut/freeglut/ChangeLog 2006-09-21 19:20:17 UTC (rev 702) +++ trunk/freeglut/freeglut/ChangeLog 2006-09-21 22:06:57 UTC (rev 703) @@ -1211,3 +1211,6 @@ 2006) to have the "glutInitDisplayString" ignore numerical assignments to tokens as a temporary fix. +(314) Fixed buy #1398196 in the bug tracker to the effect that passing the +wrong argument in "fghSleepForEvents" can cause odd delays + Modified: trunk/freeglut/freeglut/src/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_main.c 2006-09-21 19:20:17 UTC (rev 702) +++ trunk/freeglut/freeglut/src/freeglut_main.c 2006-09-21 22:06:57 UTC (rev 703) @@ -489,7 +489,7 @@ fgWarning ( "freeglut select() error: %d", errno ); } #elif TARGET_HOST_MS_WINDOWS - MsgWaitForMultipleObjects( 0, NULL, FALSE, msec, QS_ALLEVENTS ); + MsgWaitForMultipleObjects( 0, NULL, FALSE, msec, QS_ALLINPUT ); #endif } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <joe...@us...> - 2006-09-26 03:18:25
|
Revision: 711 http://svn.sourceforge.net/freeglut/?rev=711&view=rev Author: joekrahn Date: 2006-09-25 20:18:18 -0700 (Mon, 25 Sep 2006) Log Message: ----------- Added FREEGLUT_LIB_PRAGMAS to control MS library pragmas, and fixed NOMINMAX define. Modified Paths: -------------- trunk/freeglut/freeglut/include/GL/freeglut_std.h trunk/freeglut/freeglut/src/freeglut_joystick.c trunk/freeglut/freeglut/src/freeglut_state.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/include/GL/freeglut_std.h =================================================================== --- trunk/freeglut/freeglut/include/GL/freeglut_std.h 2006-09-26 03:04:37 UTC (rev 710) +++ trunk/freeglut/freeglut/include/GL/freeglut_std.h 2006-09-26 03:18:18 UTC (rev 711) @@ -35,61 +35,65 @@ /* * Under windows, we have to differentiate between static and dynamic libraries */ -#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) - +#ifdef _WIN32 /* #pragma may not be supported by some compilers. * Discussion by FreeGLUT developers suggests that * Visual C++ specific code involving pragmas may * need to move to a separate header. 24th Dec 2003 - */ + */ +/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library + * pragmas or to 1 to exclude library pragmas. + * The default behavior depends on the compiler/platform. + */ +# ifndef FREEGLUT_LIB_PRAGMAS +# if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) +# define FREEGLUT_LIB_PRAGMAS 1 +# else +# define FREEGLUT_LIB_PRAGMAS 0 +# endif +# endif + # define WIN32_LEAN_AND_MEAN -# define NO_MIN_MAX -# include <windows.h> -# undef min -# undef max +# define NOMINMAX +# include <Windows.h> /* Windows static library */ # ifdef FREEGLUT_STATIC -# define FGAPI -# define FGAPIENTRY +# define FGAPI +# define FGAPIENTRY /* Link with Win32 static freeglut lib */ -# if defined(_MSC_VER) || defined(__WATCOMC__) +# if FREEGLUT_LIB_PRAGMAS # pragma comment (lib, "freeglut_static.lib") # endif /* Windows shared library (DLL) */ # else -# if defined(FREEGLUT_EXPORTS) -# define FGAPI __declspec(dllexport) -# else -# define FGAPI __declspec(dllimport) +# define FGAPIENTRY __stdcall +# if defined(FREEGLUT_EXPORTS) +# define FGAPI __declspec(dllexport) +# else +# define FGAPI __declspec(dllimport) - /* link with Win32 shared freeglut lib */ -# if defined(_MSC_VER) || defined(__WATCOMC__) -# ifndef _WIN32_WCE -# pragma comment (lib, "freeglut.lib") -# endif -# endif + /* Link with Win32 shared freeglut lib */ +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib, "freeglut.lib") +# endif # endif -# define FGAPIENTRY __stdcall - # endif /* Drag in other Windows libraries as required by FreeGLUT */ -# if defined(_MSC_VER) || defined(__WATCOMC__) -# ifndef _WIN32_WCE -# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ -# pragma comment (lib, "user32.lib") /* link Windows user lib */ -# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ -# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ -# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ -# endif /* _WIN32_WCE */ +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ +# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ +# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ +# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ +# pragma comment (lib, "user32.lib") /* link Windows user lib */ # endif #else Modified: trunk/freeglut/freeglut/src/freeglut_joystick.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_joystick.c 2006-09-26 03:04:37 UTC (rev 710) +++ trunk/freeglut/freeglut/src/freeglut_joystick.c 2006-09-26 03:18:18 UTC (rev 711) @@ -979,8 +979,8 @@ /* Inspired by http://msdn.microsoft.com/archive/en-us/dnargame/html/msdn_sidewind3d.asp */ -# if defined(_MSC_VER) -# pragma comment (lib, "advapi32.lib") /* library pragmas are bad */ +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib, "advapi32.lib") # endif static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_sz ) Modified: trunk/freeglut/freeglut/src/freeglut_state.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_state.c 2006-09-26 03:04:37 UTC (rev 710) +++ trunk/freeglut/freeglut/src/freeglut_state.c 2006-09-26 03:18:18 UTC (rev 711) @@ -503,7 +503,10 @@ */ #if defined(_WIN32_CE) return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0; -# pragma comment (lib,"Kbdui.lib") +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib,"Kbdui.lib") +# endif + #else return 1; #endif Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-26 03:04:37 UTC (rev 710) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2006-09-26 03:18:18 UTC (rev 711) @@ -29,8 +29,10 @@ #include "freeglut_internal.h" #if defined(_WIN32_WCE) -#include <aygshell.h> -#pragma comment( lib, "Aygshell.lib" ) /* library pragmas are bad */ +# include <Aygshell.h> +# ifdef FREEGLUT_LIB_PRAGMAS +# pragma comment( lib, "Aygshell.lib" ) +# endif static wchar_t* fghWstrFromStr(const char* str) { @@ -42,7 +44,6 @@ return wstr; } - #endif /* defined(_WIN32_WCE) */ /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2007-09-19 04:42:23
|
Revision: 723 http://freeglut.svn.sourceforge.net/freeglut/?rev=723&view=rev Author: fayjf Date: 2007-09-18 21:42:25 -0700 (Tue, 18 Sep 2007) Log Message: ----------- Implementing first part of Windows version of "GLUT_CAPTIONLESS" and "GLUT_BORDERLESS" per feature request "[ 1197016 ] need GLUT_CAPTIONLESS window option". Needs more work; menus are slightly mispositioned, X11 version does not support it, banner appears at beginning but disappears on window resize. But this is a start. Modified Paths: -------------- trunk/freeglut/freeglut/include/GL/freeglut_std.h trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/include/GL/freeglut_std.h =================================================================== --- trunk/freeglut/freeglut/include/GL/freeglut_std.h 2007-09-19 04:15:14 UTC (rev 722) +++ trunk/freeglut/freeglut/include/GL/freeglut_std.h 2007-09-19 04:42:25 UTC (rev 723) @@ -169,6 +169,8 @@ #define GLUT_MULTISAMPLE 0x0080 #define GLUT_STEREO 0x0100 #define GLUT_LUMINANCE 0x0200 +#define GLUT_CAPTIONLESS 0x0400 +#define GLUT_BORDERLESS 0x0800 /* * GLUT API macro definitions -- windows and menu related definitions Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2007-09-19 04:15:14 UTC (rev 722) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2007-09-19 04:42:25 UTC (rev 723) @@ -608,6 +608,7 @@ DWORD flags; DWORD exFlags = 0; ATOM atom; + int WindowStyle = 0; /* Grab the window class we have registered on glutInit(): */ atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc ); @@ -735,6 +736,25 @@ 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); + + /* Hack to remove the caption (title bar) and/or border + * and all the system menu controls. + */ + WindowStyle = GetWindowLong(window->Window.Handle, GWL_STYLE); + if ( fgState.DisplayMode & GLUT_CAPTIONLESS ) + { + SetWindowLong ( window->Window.Handle, GWL_STYLE, + WindowStyle & ~(WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)); + } + else if ( fgState.DisplayMode & GLUT_BORDERLESS ) + { + SetWindowLong ( window->Window.Handle, GWL_STYLE, + WindowStyle & ~(WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)); + } +//SetWindowPos(window->Window.Handle, NULL, 0, 0, 0, 0, +// SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + + #if defined(_WIN32_WCE) ShowWindow( window->Window.Handle, SW_SHOW ); #else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2007-09-21 04:00:25
|
Revision: 724 http://freeglut.svn.sourceforge.net/freeglut/?rev=724&view=rev Author: fayjf Date: 2007-09-20 21:00:14 -0700 (Thu, 20 Sep 2007) Log Message: ----------- Implementing Larry Ramey's "glutExit" feature (see e-mails from him on 11/9/05, 6/28/06) Modified Paths: -------------- trunk/freeglut/freeglut/include/GL/freeglut_ext.h trunk/freeglut/freeglut/src/freeglut_init.c Modified: trunk/freeglut/freeglut/include/GL/freeglut_ext.h =================================================================== --- trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-09-19 04:42:25 UTC (rev 723) +++ trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-09-21 04:00:14 UTC (rev 724) @@ -83,6 +83,7 @@ */ FGAPI void FGAPIENTRY glutMainLoopEvent( void ); FGAPI void FGAPIENTRY glutLeaveMainLoop( void ); +FGAPI void FGAPIENTRY glutExit ( void ); /* * Window-specific callback functions, see freeglut_callbacks.c Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2007-09-19 04:42:25 UTC (rev 723) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2007-09-21 04:00:14 UTC (rev 724) @@ -653,6 +653,14 @@ } /* + * Undoes all the "glutInit" stuff + */ +void FGAPIENTRY glutExit ( void ) +{ + fgDeinitialize (); +} + +/* * Sets the default initial window position for new windows */ void FGAPIENTRY glutInitWindowPosition( int x, int y ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2007-11-12 04:06:18
|
Revision: 735 http://freeglut.svn.sourceforge.net/freeglut/?rev=735&view=rev Author: fayjf Date: 2007-11-11 20:06:19 -0800 (Sun, 11 Nov 2007) Log Message: ----------- Implementing Jocelyn Frechot's changes -- see e-mail of Thursday, 11/8/2007 9:12 AM. Modified Paths: -------------- trunk/freeglut/freeglut/include/GL/freeglut_ext.h trunk/freeglut/freeglut/src/freeglut_ext.c trunk/freeglut/freeglut/src/freeglut_init.c trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_state.c trunk/freeglut/freeglut/src/freeglut_structure.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/include/GL/freeglut_ext.h =================================================================== --- trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-11-12 04:06:19 UTC (rev 735) @@ -73,11 +73,14 @@ * Only one GLUT_AUXn bit may be used at a time. * Value 0x0400 is defined in OpenGLUT. */ +#define GLUT_AUX 0x1000 + #define GLUT_AUX1 0x1000 #define GLUT_AUX2 0x2000 #define GLUT_AUX3 0x4000 #define GLUT_AUX4 0x8000 + /* * Process loop function, see freeglut_main.c */ @@ -98,6 +101,7 @@ * State setting and retrieval functions, see freeglut_state.c */ FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value ); +FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size); /* A.Donev: User-data manipulation */ FGAPI void* FGAPIENTRY glutGetWindowData( void ); FGAPI void FGAPIENTRY glutSetWindowData(void* data); Modified: trunk/freeglut/freeglut/src/freeglut_ext.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_ext.c 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_ext.c 2007-11-12 04:06:19 UTC (rev 735) @@ -161,6 +161,7 @@ CHECK_NAME(glutWMCloseFunc); CHECK_NAME(glutMenuDestroyFunc); CHECK_NAME(glutSetOption); + CHECK_NAME(glutGetModeValues); CHECK_NAME(glutSetWindowData); CHECK_NAME(glutGetWindowData); CHECK_NAME(glutSetMenuData); Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2007-11-12 04:06:19 UTC (rev 735) @@ -79,7 +79,9 @@ GLUT_EXEC_STATE_INIT, /* ExecState */ NULL, /* ProgramName */ GL_FALSE, /* JoysticksInitialised */ - GL_FALSE /* InputDevsInitialised */ + GL_FALSE, /* InputDevsInitialised */ + 0, /* AuxiliaryBufferNumber */ + 0 /* SampleNumber */ }; @@ -893,7 +895,7 @@ break ; case 36 : /* "aux": some number of aux buffers */ - glut_state_flag |= GLUT_AUX1; + glut_state_flag |= GLUT_AUX; break ; case 37 : /* Unrecognized */ Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2007-11-12 04:06:19 UTC (rev 735) @@ -302,6 +302,9 @@ char *ProgramName; /* Name of the invoking program */ GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */ + + int AuxiliaryBufferNumber; /* Number of auxiliary buffers */ + int SampleNumber; /* Number of samples per pixel */ }; /* The structure used by display initialization in freeglut_init.c */ Modified: trunk/freeglut/freeglut/src/freeglut_state.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_state.c 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_state.c 2007-11-12 04:06:19 UTC (rev 735) @@ -116,6 +116,14 @@ fgStructure.CurrentWindow->State.Cursor = value; break; + case GLUT_AUX: + fgState.AuxiliaryBufferNumber = value; + break; + + case GLUT_MULTISAMPLE: + fgState.SampleNumber = value; + break; + default: fgWarning( "glutSetOption(): missing enum handle %d", eWhat ); break; @@ -720,4 +728,114 @@ return -1; } +int * FGAPIENTRY glutGetModeValues(GLenum eWhat, int * size) +{ + int * array; + +#if TARGET_HOST_POSIX_X11 + int attributes[9]; + GLXFBConfig * fbconfigArray; /* Array of FBConfigs */ + int fbconfigArraySize; /* Number of FBConfigs in the array */ + int attribute_name = 0; +#endif + + FREEGLUT_EXIT_IF_NOT_INITIALISED("glutGetModeValues"); + + array = NULL; + *size = 0; + + switch (eWhat) + { +#if TARGET_HOST_POSIX_X11 + case GLUT_AUX: + case GLUT_MULTISAMPLE: + + attributes[0] = GLX_BUFFER_SIZE; + attributes[1] = GLX_DONT_CARE; + + switch (eWhat) + { + case GLUT_AUX: + /* + FBConfigs are now sorted by increasing number of auxiliary + buffers. We want at least one buffer. + */ + attributes[2] = GLX_AUX_BUFFERS; + attributes[3] = 1; + attributes[4] = None; + + attribute_name = GLX_AUX_BUFFERS; + + break; + + + case GLUT_MULTISAMPLE: + attributes[2] = GLX_AUX_BUFFERS; + attributes[3] = GLX_DONT_CARE; + attributes[4] = GLX_SAMPLE_BUFFERS; + attributes[5] = 1; + /* + FBConfigs are now sorted by increasing number of samples per + pixel. We want at least one sample. + */ + attributes[6] = GLX_SAMPLES; + attributes[7] = 1; + attributes[8] = None; + + attribute_name = GLX_SAMPLES; + + break; + } + + fbconfigArray = glXChooseFBConfig(fgDisplay.Display, + fgDisplay.Screen, + attributes, + &fbconfigArraySize); + + if (fbconfigArray != NULL) + { + int * temp_array; + int result; /* Returned by glXGetFBConfigAttrib. Not checked. */ + int previous_value; + int i; + + temp_array = malloc(sizeof(int) * fbconfigArraySize); + previous_value = 0; + + for (i = 0; i < fbconfigArraySize; i++) + { + int value; + + result = glXGetFBConfigAttrib(fgDisplay.Display, + fbconfigArray[i], + attribute_name, + &value); + if (value > previous_value) + { + temp_array[*size] = value; + previous_value = value; + (*size)++; + } + } + + array = malloc(sizeof(int) * (*size)); + for (i = 0; i < *size; i++) + { + array[i] = temp_array[i]; + } + + free(temp_array); + XFree(fbconfigArray); + } + + break; +#endif + + default: + break; + } + + return array; +} + /*** END OF FILE ***/ Modified: trunk/freeglut/freeglut/src/freeglut_structure.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_structure.c 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_structure.c 2007-11-12 04:06:19 UTC (rev 735) @@ -219,12 +219,6 @@ fghClearCallBacks( window ); fgCloseWindow( window ); -#if TARGET_HOST_UNIX_X11 - if (window->Window.FBConfig != NULL) - { - XFree( window->Window.FBConfig ); - } -#endif free( window ); if( fgStructure.CurrentWindow == window ) fgStructure.CurrentWindow = NULL; Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2007-10-21 10:53:01 UTC (rev 734) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2007-11-12 04:06:19 UTC (rev 735) @@ -128,19 +128,20 @@ ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 ); } - if( fgState.DisplayMode & GLUT_AUX1 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 1 ); - if( fgState.DisplayMode & GLUT_AUX2 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 2 ); - if( fgState.DisplayMode & GLUT_AUX3 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 3 ); - if( fgState.DisplayMode & GLUT_AUX4 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 4 ); - if ( fgState.DisplayMode & GLUT_MULTISAMPLE ) - { - ATTRIB_VAL( GLX_SAMPLE_BUFFERS, 1 ); - } + if ((fgState.DisplayMode & GLUT_AUX) + || (fgState.DisplayMode & GLUT_AUX1) + || (fgState.DisplayMode & GLUT_AUX2) + || (fgState.DisplayMode & GLUT_AUX3) + || (fgState.DisplayMode & GLUT_AUX4)) + { + ATTRIB_VAL(GLX_AUX_BUFFERS, fgState.AuxiliaryBufferNumber) + } + if (fgState.DisplayMode & GLUT_MULTISAMPLE) + { + ATTRIB_VAL(GLX_SAMPLE_BUFFERS, 1) + ATTRIB_VAL(GLX_SAMPLES, fgState.SampleNumber) + } /* Push a null at the end of the list */ ATTRIB( None ); @@ -896,7 +897,7 @@ glXDestroyContext( fgDisplay.Display, window->Window.Context ); XFree( window->Window.FBConfig ); XDestroyWindow( fgDisplay.Display, window->Window.Handle ); - XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */ + /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */ #elif TARGET_HOST_MS_WINDOWS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2007-12-02 03:50:25
|
Revision: 738 http://freeglut.svn.sourceforge.net/freeglut/?rev=738&view=rev Author: fayjf Date: 2007-12-01 19:50:29 -0800 (Sat, 01 Dec 2007) Log Message: ----------- Adding "glutFullScreenToggle" for X11 -- still needs implementation in Windows (e-mail by Jocelyn Frechot, Sun 11/25/2007 11:29 AM) Modified Paths: -------------- trunk/freeglut/freeglut/include/GL/freeglut_ext.h trunk/freeglut/freeglut/src/freeglut_display.c trunk/freeglut/freeglut/src/freeglut_ext.c trunk/freeglut/freeglut/src/freeglut_init.c trunk/freeglut/freeglut/src/freeglut_internal.h trunk/freeglut/freeglut/src/freeglut_main.c trunk/freeglut/freeglut/src/freeglut_state.c trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/include/GL/freeglut_ext.h =================================================================== --- trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/include/GL/freeglut_ext.h 2007-12-02 03:50:29 UTC (rev 738) @@ -68,6 +68,8 @@ #define GLUT_RENDERING_CONTEXT 0x01FD #define GLUT_DIRECT_RENDERING 0x01FE +#define GLUT_FULL_SCREEN 0x01FF + /* * New tokens for glutInitDisplayMode. * Only one GLUT_AUXn bit may be used at a time. @@ -89,6 +91,11 @@ FGAPI void FGAPIENTRY glutExit ( void ); /* + * Window management functions, see freeglut_window.c + */ +FGAPI void FGAPIENTRY glutFullScreenToggle( void ); + +/* * Window-specific callback functions, see freeglut_callbacks.c */ FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ); Modified: trunk/freeglut/freeglut/src/freeglut_display.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_display.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_display.c 2007-12-02 03:50:29 UTC (rev 738) @@ -48,6 +48,10 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSwapBuffers" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSwapBuffers" ); + /* + * "glXSwapBuffers" already performs an implicit call to "glFlush". What + * about "SwapBuffers"? + */ glFlush( ); if( ! fgStructure.CurrentWindow->Window.DoubleBuffered ) return; Modified: trunk/freeglut/freeglut/src/freeglut_ext.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_ext.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_ext.c 2007-12-02 03:50:29 UTC (rev 738) @@ -160,6 +160,7 @@ CHECK_NAME(glutCloseFunc); CHECK_NAME(glutWMCloseFunc); CHECK_NAME(glutMenuDestroyFunc); + CHECK_NAME(glutFullScreenToggle); CHECK_NAME(glutSetOption); CHECK_NAME(glutGetModeValues); CHECK_NAME(glutSetWindowData); Modified: trunk/freeglut/freeglut/src/freeglut_init.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_init.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_init.c 2007-12-02 03:50:29 UTC (rev 738) @@ -28,6 +28,10 @@ #include <GL/freeglut.h> #include "freeglut_internal.h" +#if TARGET_HOST_POSIX_X11 +#include <limits.h> /* LONG_MAX */ +#endif + /* * TODO BEFORE THE STABLE RELEASE: * @@ -87,7 +91,145 @@ /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ +#if TARGET_HOST_POSIX_X11 + +/* Return the atom associated with "name". */ +static Atom fghGetAtom(const char * name) +{ + return XInternAtom(fgDisplay.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.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.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_ptr; + int number_of_atoms; + int supported; + int i; + + supported = 0; + + atoms_ptr = malloc(sizeof(Atom *)); + number_of_atoms = fghGetWindowProperty(window, + property, + XA_ATOM, + (unsigned char **) atoms_ptr); + for (i = 0; i < number_of_atoms; i++) + { + if ((*atoms_ptr)[i] == hint) + { + supported = 1; + break; + } + } + + return supported; +} + +#endif /* TARGET_HOST_POSIX_X11 */ + + +/* * A call to this function should initialize all the display stuff... */ static void fghInitialize( const char* displayName ) @@ -129,12 +271,33 @@ fgDisplay.Connection = ConnectionNumber( fgDisplay.Display ); /* Create the window deletion atom */ - fgDisplay.DeleteWindow = XInternAtom( - fgDisplay.Display, - "WM_DELETE_WINDOW", - FALSE - ); + fgDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW"); + /* Create the state and full screen atoms */ + fgDisplay.State = None; + fgDisplay.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.RootWindow, supported, state)) + { + const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN"); + + fgDisplay.State = state; + + /* Check if the window manager supports full screen. */ + /** Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/ + if (fgHintPresent(fgDisplay.RootWindow, supported, full_screen)) + { + fgDisplay.StateFullScreen = full_screen; + } + } + } + #elif TARGET_HOST_MS_WINDOWS WNDCLASS wc; Modified: trunk/freeglut/freeglut/src/freeglut_internal.h =================================================================== --- trunk/freeglut/freeglut/src/freeglut_internal.h 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_internal.h 2007-12-02 03:50:29 UTC (rev 738) @@ -317,6 +317,8 @@ Window RootWindow; /* The screen's root window. */ int Connection; /* The display's connection number */ Atom DeleteWindow; /* The window deletion atom */ + Atom State; /* The state atom */ + Atom StateFullScreen; /* The full screen atom */ #ifdef X_XF86VidModeGetModeLine /* @@ -902,6 +904,13 @@ void fgError( const char *fmt, ... ); void fgWarning( const char *fmt, ... ); +/* + * Check if "hint" is present in "property" for "window". See freeglut_init.c + */ +#if TARGET_HOST_POSIX_X11 +int fgHintPresent(Window window, Atom property, Atom hint); +#endif + #endif /* FREEGLUT_INTERNAL_H */ /*** END OF FILE ***/ Modified: trunk/freeglut/freeglut/src/freeglut_main.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_main.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_main.c 2007-12-02 03:50:29 UTC (rev 738) @@ -1392,6 +1392,10 @@ case ReparentNotify: break; /* XXX Should disable this event */ + /* Not handled */ + case GravityNotify: + break; + default: fgWarning ("Unknown X event type: %d\n", event.type); break; Modified: trunk/freeglut/freeglut/src/freeglut_state.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_state.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_state.c 2007-12-02 03:50:29 UTC (rev 738) @@ -64,6 +64,30 @@ } #endif +/* Check if the window is in full screen state. */ +static int fghCheckFullScreen(void) +{ +#if TARGET_HOST_POSIX_X11 + + int result; + + result = 0; + if (fgDisplay.StateFullScreen != None) + { + result = fgHintPresent(fgStructure.CurrentWindow->Window.Handle, + fgDisplay.State, + fgDisplay.StateFullScreen); + } + + return result; + +#else + + return 0; + +#endif +} + /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ /* @@ -512,6 +536,10 @@ return fgState.DirectContext; break; + case GLUT_FULL_SCREEN: + return fghCheckFullScreen(); + break; + default: fgWarning( "glutGet(): missing enum handle %d", eWhat ); break; Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2007-12-01 23:34:55 UTC (rev 737) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2007-12-02 03:50:29 UTC (rev 738) @@ -28,6 +28,10 @@ #include <GL/freeglut.h> #include "freeglut_internal.h" +#if TARGET_HOST_POSIX_X11 +#include <limits.h> /* LONG_MAX */ +#endif + #if defined(_WIN32_WCE) # include <Aygshell.h> # ifdef FREEGLUT_LIB_PRAGMAS @@ -250,7 +254,7 @@ return fbconfig; } } -#endif +#endif /* TARGET_HOST_POSIX_X11 */ /* * Setup the pixel format for a Win32 window @@ -1218,6 +1222,12 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutReshapeWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutReshapeWindow" ); + if (glutGet(GLUT_FULL_SCREEN)) + { + /* Leave full screen state before resizing. */ + glutFullScreenToggle(); + } + fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE; fgStructure.CurrentWindow->State.Width = width ; fgStructure.CurrentWindow->State.Height = height; @@ -1231,6 +1241,12 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPositionWindow" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPositionWindow" ); + if (glutGet(GLUT_FULL_SCREEN)) + { + /* Leave full screen state before moving. */ + glutFullScreenToggle(); + } + #if TARGET_HOST_POSIX_X11 XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle, @@ -1313,7 +1329,13 @@ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" ); FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" ); + if (glutGet(GLUT_FULL_SCREEN)) { + /* Leave full screen state before resizing. */ + glutFullScreenToggle(); + } + + { #if TARGET_HOST_POSIX_X11 Status status; /* Returned by XGetWindowAttributes(), not checked. */ @@ -1370,6 +1392,61 @@ } /* + * Toggle the window's full screen state. + */ +void FGAPIENTRY glutFullScreenToggle( void ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreenToggle" ); + FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreenToggle" ); + + { +#if TARGET_HOST_POSIX_X11 + + if (fgDisplay.StateFullScreen != None) + { + XEvent xevent; + long event_mask; + int status; + + xevent.type = ClientMessage; + xevent.xclient.type = ClientMessage; + xevent.xclient.serial = 0; + xevent.xclient.send_event = True; + xevent.xclient.display = fgDisplay.Display; + xevent.xclient.window = fgStructure.CurrentWindow->Window.Handle; + xevent.xclient.message_type = fgDisplay.State; + xevent.xclient.format = 32; + xevent.xclient.data.l[0] = 2; /* _NET_WM_STATE_TOGGLE */ + xevent.xclient.data.l[1] = fgDisplay.StateFullScreen; + xevent.xclient.data.l[2] = 0; + xevent.xclient.data.l[3] = 0; + xevent.xclient.data.l[4] = 0; + + /*** Don't really understand how event masks work... ***/ + event_mask = SubstructureRedirectMask | SubstructureNotifyMask; + + status = XSendEvent(fgDisplay.Display, + fgDisplay.RootWindow, + False, + event_mask, + &xevent); + FREEGLUT_INTERNAL_ERROR_EXIT(status != 0, + "XSendEvent failed", + "glutFullScreenToggle"); + } + else +#endif + { + /* + * If the window manager is not Net WM compliant, fall back to legacy + * behaviour. + */ + glutFullScreen(); + } + } +} + +/* * A.Donev: Set and retrieve the window's user data */ void* FGAPIENTRY glutGetWindowData( void ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |