{ 300, 300, GL_TRUE }, /* Size */
GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH, /* DisplayMode */
GL_FALSE, /* Initialised */
- GL_FALSE, /* ForceDirectContext */
- GL_TRUE, /* TryDirectContext */
+ GLUT_TRY_DIRECT_CONTEXT, /* DirectContext */
GL_FALSE, /* ForceIconic */
GL_FALSE, /* UseCurrentContext */
GL_FALSE, /* GLDebugSwitch */
72, /* GameModeRefresh */
GLUT_ACTION_EXIT, /* ActionOnWindowClose */
GLUT_EXEC_STATE_INIT, /* ExecState */
- NULL /* ProgramName */
+ NULL, /* ProgramName */
+ GL_FALSE /* JoysticksInitialised */
};
/*
* A call to this function should initialize all the display stuff...
*/
-void fgInitialize( const char* displayName )
+static void fghInitialize( const char* displayName )
{
#if TARGET_HOST_UNIX_X11
fgDisplay.Display = XOpenDisplay( displayName );
fgDisplay.Connection = ConnectionNumber( fgDisplay.Display );
- /*
- * Create the window deletion atom
- */
+ /* Create the window deletion atom */
fgDisplay.DeleteWindow = XInternAtom(
fgDisplay.Display,
"WM_DELETE_WINDOW",
WNDCLASS wc;
ATOM atom;
- /*
- * What we need to do is to initialize the fgDisplay global structure here.
- */
+ /* What we need to do is to initialize the fgDisplay global structure here. */
fgDisplay.Instance = GetModuleHandle( NULL );
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
wc.hIcon = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );
#if TARGET_HOST_WIN32
- wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
+ wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
if (!wc.hIcon)
wc.hIcon = LoadIcon( NULL, IDI_WINLOGO );
-#else //TARGET_HOST_WINCE
- wc.style = CS_HREDRAW | CS_VREDRAW;
+#else /* TARGET_HOST_WINCE */
+ wc.style = CS_HREDRAW | CS_VREDRAW;
#endif
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.lpszMenuName = NULL;
wc.lpszClassName = _T("FREEGLUT");
- /*
- * Register the window class
- */
+ /* Register the window class */
atom = RegisterClass( &wc );
assert( atom );
}
- /*
- * The screen dimensions can be obtained via GetSystemMetrics() calls
- */
+ /* The screen dimensions can be obtained via GetSystemMetrics() calls */
fgDisplay.ScreenWidth = GetSystemMetrics( SM_CXSCREEN );
fgDisplay.ScreenHeight = GetSystemMetrics( SM_CYSCREEN );
#endif
-#if !TARGET_HOST_WINCE
- fgJoystickInit( 0 );
- fgJoystickInit( 1 );
-#endif //!TARGET_HOST_WINCE
-
fgState.Initialised = GL_TRUE;
}
/* fgState.Initialised = GL_FALSE; */
- /*
- * If there was a menu created, destroy the rendering context
- */
+ /* If there was a menu created, destroy the rendering context */
if( fgStructure.MenuContext )
{
free( fgStructure.MenuContext );
fgDestroyStructure( );
- while( (timer = fgState.Timers.First) )
+ while( timer = fgState.Timers.First )
{
fgListRemove( &fgState.Timers, &timer->Node );
free( timer );
}
- while( (timer = fgState.FreeTimers.First) )
+ while( timer = fgState.FreeTimers.First )
{
fgListRemove( &fgState.FreeTimers, &timer->Node );
free( timer );
}
#if !TARGET_HOST_WINCE
- fgJoystickClose( );
-#endif //!TARGET_HOST_WINCE
+ if ( fgState.JoysticksInitialised )
+ fgJoystickClose( );
+#endif /* !TARGET_HOST_WINCE */
+ fgState.JoysticksInitialised = GL_FALSE;
fgState.Initialised = GL_FALSE;
fgState.DisplayMode = GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH;
- fgState.ForceDirectContext = GL_FALSE;
- fgState.TryDirectContext = GL_TRUE;
+ fgState.DirectContext = GLUT_TRY_DIRECT_CONTEXT;
fgState.ForceIconic = GL_FALSE;
fgState.UseCurrentContext = GL_FALSE;
fgState.GLDebugSwitch = GL_FALSE;
fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;
fgState.ExecState = GLUT_EXEC_STATE_INIT;
- fgState.KeyRepeat = GL_FALSE;
+ fgState.KeyRepeat = GL_TRUE;
fgState.Modifiers = 0xffffffff;
fgState.GameModeSize.X = 640;
}
else if( strcmp( argv[ i ], "-direct" ) == 0)
{
- if( ! fgState.TryDirectContext )
+ if( fgState.DirectContext == GLUT_FORCE_INDIRECT_CONTEXT )
fgError( "parameters ambiguity, -direct and -indirect "
"cannot be both specified" );
- fgState.ForceDirectContext = GL_TRUE;
+ fgState.DirectContext = GLUT_FORCE_DIRECT_CONTEXT;
argv[ i ] = NULL;
( *pargc )--;
}
else if( strcmp( argv[ i ], "-indirect" ) == 0 )
{
- if( fgState.ForceDirectContext )
+ if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )
fgError( "parameters ambiguity, -direct and -indirect "
"cannot be both specified" );
- fgState.TryDirectContext = GL_FALSE;
+ fgState.DirectContext = GLUT_FORCE_INDIRECT_CONTEXT;
argv[ i ] = NULL;
(*pargc)--;
}
}
}
- /*
- * Compact {argv}.
- */
- j = 2;
- for( i = 1; i < *pargc; i++, j++ )
+ /* Compact {argv}. */
+ for( i = j = 1; i < *pargc; i++, j++ )
{
- if( argv[ i ] == NULL )
- {
- /* Guaranteed to end because there are "*pargc" arguments left */
- while ( argv[ j ] == NULL )
- j++;
+ /* Guaranteed to end because there are "*pargc" arguments left */
+ while ( argv[ j ] == NULL )
+ j++;
+ if ( i != j )
argv[ i ] = argv[ j ];
- }
}
-#endif //TARGET_HOST_WINCE
+#endif /* TARGET_HOST_WINCE */
/*
* Have the display created now. If there wasn't a "-display"
* in the program arguments, we will use the DISPLAY environment
* variable for opening the X display (see code above):
*/
- fgInitialize( displayName );
+ fghInitialize( displayName );
/*
* Geometry parsing deffered until here because we may need the screen
*/
void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode )
{
- /*
- * We will make use of this value when creating a new OpenGL context...
- */
+ /* We will make use of this value when creating a new OpenGL context... */
fgState.DisplayMode = displayMode;
}
/* -- INIT DISPLAY STRING PARSING ------------------------------------------ */
-#define NUM_TOKENS 28
+#define NUM_TOKENS 36
static char* Tokens[] =
{
"alpha", "acca", "acc", "blue", "buffer", "conformant", "depth", "double",
"green", "index", "num", "red", "rgba", "rgb", "luminance", "stencil",
- "single", "stereo", "samples", "slow", "win32pdf", "xvisual",
+ "single", "stereo", "samples", "slow", "win32pdf", "win32pfd", "xvisual",
"xstaticgray", "xgrayscale", "xstaticcolor", "xpseudocolor",
- "xtruecolor", "xdirectcolor"
+ "xtruecolor", "xdirectcolor",
+ "xstaticgrey", "xgreyscale", "xstaticcolour", "xpseudocolour",
+ "xtruecolour", "xdirectcolour", "borderless"
};
static int TokenLengths[] =
{
5, 4, 3, 4, 6, 10, 5, 6,
5, 5, 3, 3, 4, 3, 9, 7,
- 6, 6, 7, 4, 8, 7,
+ 6, 6, 7, 4, 8, 8, 7,
11, 10, 12, 12,
- 10, 12
+ 10, 12,
+ 11, 10, 13, 13,
+ 11, 13, 10
};
void FGAPIENTRY glutInitDisplayString( const char* displayMode )
token = strtok ( buffer, " \t" );
while ( token )
{
- /*
- * Process this token
- */
+ /* Process this token */
int i ;
for ( i = 0; i < NUM_TOKENS; i++ )
{
configuration is slow or not */
break ;
- case 20 : /* "win32pdf": matches the Win32 Pixel Format Descriptor by
+ case 20 : /* "win32pdf": (incorrect spelling but was there before */
+ case 21 : /* "win32pfd": matches the Win32 Pixel Format Descriptor by
number */
#if TARGET_HOST_WIN32
#endif
break ;
- case 21 : /* "xvisual": matches the X visual ID by number */
+ case 22 : /* "xvisual": matches the X visual ID by number */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 22 : /* "xstaticgray": boolean indicating if the frame buffer
+ case 23 : /* "xstaticgray": */
+ case 29 : /* "xstaticgrey": boolean indicating if the frame buffer
configuration's X visual is of type StaticGray */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 23 : /* "xgrayscale": boolean indicating if the frame buffer
+ case 24 : /* "xgrayscale": */
+ case 30 : /* "xgreyscale": boolean indicating if the frame buffer
configuration's X visual is of type GrayScale */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 24 : /* "xstaticcolor": boolean indicating if the frame buffer
+ case 25 : /* "xstaticcolor": */
+ case 31 : /* "xstaticcolour": boolean indicating if the frame buffer
configuration's X visual is of type StaticColor */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 25 : /* "xpseudocolor": boolean indicating if the frame buffer
+ case 26 : /* "xpseudocolor": */
+ case 32 : /* "xpseudocolour": boolean indicating if the frame buffer
configuration's X visual is of type PseudoColor */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 26 : /* "xtruecolor": boolean indicating if the frame buffer
+ case 27 : /* "xtruecolor": */
+ case 33 : /* "xtruecolour": boolean indicating if the frame buffer
configuration's X visual is of type TrueColor */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 27 : /* "xdirectcolor": boolean indicating if the frame buffer
+ case 28 : /* "xdirectcolor": */
+ case 34 : /* "xdirectcolour": boolean indicating if the frame buffer
configuration's X visual is of type DirectColor */
#if TARGET_HOST_UNIX_X11
#endif
break ;
- case 28 : /* Unrecognized */
- printf ( "WARNING - Display string token not recognized: %s\n",
- token );
+ case 35 : /* "borderless": windows should not have borders */
+#if TARGET_HOST_UNIX_X11
+#endif
+ break ;
+
+ case 36 : /* Unrecognized */
+ fgWarning ( "WARNING - Display string token not recognized: %s",
+ token );
break ;
}
free ( buffer );
- /*
- * We will make use of this value when creating a new OpenGL context...
- */
+ /* We will make use of this value when creating a new OpenGL context... */
fgState.DisplayMode = glut_state_flag;
}