X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_init.c;h=0853d35ceca683c7bcdf40bc9f808c3bde2a6696;hb=006650e1dd72e73249d41e2bcea8b1668262a999;hp=0289ddd693be80415c9bb5b92b69f84dbfbbb4ce;hpb=fffd18193541999b2b5c00905dea0f1effa0ec07;p=freeglut diff --git a/src/freeglut_init.c b/src/freeglut_init.c index 0289ddd..0853d35 100644 --- a/src/freeglut_init.c +++ b/src/freeglut_init.c @@ -29,7 +29,7 @@ #include "config.h" #endif -#include "../include/GL/freeglut.h" +#include #include "freeglut_internal.h" /* @@ -59,18 +59,17 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ { 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 */ GL_FALSE, /* XSyncSwitch */ - GL_TRUE, /* IgnoreKeyRepeat */ + GL_TRUE, /* KeyRepeat */ 0xffffffff, /* Modifiers */ 0, /* FPSInterval */ 0, /* SwapCount */ 0, /* SwapTime */ -#if TARGET_HOST_WIN32 +#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE { 0, GL_FALSE }, /* Time */ #else { { 0, 0 }, GL_FALSE }, @@ -86,7 +85,8 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ 72, /* GameModeRefresh */ GLUT_ACTION_EXIT, /* ActionOnWindowClose */ GLUT_EXEC_STATE_INIT, /* ExecState */ - NULL /* ProgramName */ + NULL, /* ProgramName */ + GL_FALSE /* JoysticksInitialised */ }; @@ -95,7 +95,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ /* * 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 ); @@ -133,26 +133,23 @@ void fgInitialize( const char* displayName ) fgDisplay.Connection = ConnectionNumber( fgDisplay.Display ); - /* - * Create the window deletion atom - */ + /* Create the window deletion atom */ fgDisplay.DeleteWindow = XInternAtom( fgDisplay.Display, "WM_DELETE_WINDOW", FALSE ); -#elif TARGET_HOST_WIN32 +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE 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, "FREEGLUT", &wc ); + atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc ); + if( atom == 0 ) { ZeroMemory( &wc, sizeof(WNDCLASS) ); @@ -165,30 +162,31 @@ void fgInitialize( const char* displayName ) * XXX Old code had "| CS_DBCLCKS" commented out. Plans for the * XXX future? Dead-end idea? */ - wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = fgWindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = fgDisplay.Instance; - wc.hIcon = LoadIcon( fgDisplay.Instance, "GLUT_ICON" ); + wc.hIcon = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") ); + +#if TARGET_HOST_WIN32 + 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; +#endif wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = NULL; wc.lpszMenuName = NULL; - wc.lpszClassName = "FREEGLUT"; + 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 ); @@ -204,8 +202,6 @@ void fgInitialize( const char* displayName ) #endif - fgJoystickInit( 0 ); - fgState.Initialised = GL_TRUE; } @@ -225,9 +221,7 @@ void fgDeinitialize( void ) /* 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 ); @@ -248,7 +242,11 @@ void fgDeinitialize( void ) free( timer ); } - fgJoystickClose( ); +#if !TARGET_HOST_WINCE + if ( fgState.JoysticksInitialised ) + fgJoystickClose( ); +#endif /* !TARGET_HOST_WINCE */ + fgState.JoysticksInitialised = GL_FALSE; fgState.Initialised = GL_FALSE; @@ -262,8 +260,7 @@ void fgDeinitialize( void ) 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; @@ -271,7 +268,7 @@ void fgDeinitialize( void ) fgState.ActionOnWindowClose = GLUT_ACTION_EXIT; fgState.ExecState = GLUT_EXEC_STATE_INIT; - fgState.IgnoreKeyRepeat = GL_TRUE; + fgState.KeyRepeat = GL_FALSE; fgState.Modifiers = 0xffffffff; fgState.GameModeSize.X = 640; @@ -297,7 +294,7 @@ void fgDeinitialize( void ) free( fgState.ProgramName ); fgState.ProgramName = NULL; } - + #if TARGET_HOST_UNIX_X11 @@ -320,7 +317,7 @@ void fgDeinitialize( void ) * Everything inside the following #ifndef is copied from the X sources. */ -#if TARGET_HOST_WIN32 +#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE /* @@ -368,7 +365,7 @@ from The Open Group. * It returns a bitmask that indicates which of the four values * were actually found in the string. For each value found, * the corresponding argument is updated; for each value - * not found, the corresponding argument is left unchanged. + * not found, the corresponding argument is left unchanged. */ static int @@ -376,7 +373,7 @@ ReadInteger(char *string, char **NextString) { register int Result = 0; int Sign = 1; - + if (*string == '+') string++; else if (*string == '-') @@ -416,7 +413,7 @@ static int XParseGeometry ( strind = (char *)string; if (*strind != '+' && *strind != '-' && *strind != 'x') { tempWidth = ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) + if (strind == nextCharacter) return 0; strind = nextCharacter; mask |= WidthValue; @@ -515,13 +512,18 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) fgElapsedTime( ); /* check if GLUT_FPS env var is set */ +#if !TARGET_HOST_WINCE { const char *fps = getenv( "GLUT_FPS" ); if( fps ) { - sscanf( fps, "%d", &fgState.FPSInterval ); - if( fgState.FPSInterval <= 0 ) - fgState.FPSInterval = 5000; /* 5000 milliseconds */ + int interval; + sscanf( fps, "%d", &interval ); + + if( interval <= 0 ) + fgState.FPSInterval = 5000; /* 5000 millisecond default */ + else + fgState.FPSInterval = interval; } } @@ -554,21 +556,21 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) } 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)--; } @@ -607,18 +609,14 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) } } +#endif /* TARGET_HOST_WINCE */ + /* - * Have the display created now. As I am too lazy to implement - * the program arguments parsing, we will have the DISPLAY - * environment variable used for opening the X display: - * - * XXX The above comment is rather unclear. We have just - * XXX completed parsing of the program arguments for GLUT - * XXX parameters. We obviously canNOT parse the application- - * XXX specific parameters. Can someone re-write the above - * XXX more clearly? + * 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 @@ -678,9 +676,7 @@ void FGAPIENTRY glutInitWindowSize( int width, int height ) */ 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; } @@ -722,9 +718,7 @@ 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++ ) { @@ -880,9 +874,7 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode ) 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; }