X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_init.c;h=c9e85c5e5d61135cf9ff895a0181ec8fee015c0f;hb=e2df79eeb7eedf164dddec597128d93abca03d76;hp=d271523964abe1fd407425f54ad2d48c5fc91fa4;hpb=2e8c8e1910a0f5a18c6108174bad31f13af38165;p=freeglut diff --git a/src/freeglut_init.c b/src/freeglut_init.c index d271523..c9e85c5 100644 --- a/src/freeglut_init.c +++ b/src/freeglut_init.c @@ -58,7 +58,7 @@ SFG_Display fgDisplay; SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ { 300, 300, GL_TRUE }, /* Size */ GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH, /* DisplayMode */ - GL_FALSE, /* Initalized */ + GL_FALSE, /* Initialised */ GL_FALSE, /* ForceDirectContext */ GL_TRUE, /* TryDirectContext */ GL_FALSE, /* ForceIconic */ @@ -76,6 +76,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ { { 0, 0 }, GL_FALSE }, #endif { NULL, NULL }, /* Timers */ + { NULL, NULL }, /* FreeTimers */ NULL, /* IdleCallback */ 0, /* ActiveMenus */ NULL, /* MenuStateCallback */ @@ -84,8 +85,8 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ 16, /* GameModeDepth */ 72, /* GameModeRefresh */ GLUT_ACTION_EXIT, /* ActionOnWindowClose */ - GLUT_EXEC_STATE_INIT /* ExecState */ - NULL, /* ProgramName */ + GLUT_EXEC_STATE_INIT, /* ExecState */ + NULL /* ProgramName */ }; @@ -147,7 +148,7 @@ void fgInitialize( const char* displayName ) 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 ); @@ -157,9 +158,14 @@ void fgInitialize( const char* displayName ) ZeroMemory( &wc, sizeof(WNDCLASS) ); /* - * Each of the windows should have its own device context... + * Each of the windows should have its own device context, and we + * want redraw events during Vertical and Horizontal Resizes by + * the user. + * + * XXX Old code had "| CS_DBCLCKS" commented out. Plans for the + * XXX future? Dead-end idea? */ - wc.style = CS_OWNDC; + wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = fgWindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; @@ -200,7 +206,7 @@ void fgInitialize( const char* displayName ) fgJoystickInit( 0 ); - fgState.Initalized = GL_TRUE; + fgState.Initialised = GL_TRUE; } /* @@ -210,14 +216,14 @@ void fgDeinitialize( void ) { SFG_Timer *timer; - if( !fgState.Initalized ) + if( !fgState.Initialised ) { fgWarning( "fgDeinitialize(): " "no valid initialization has been performed" ); return; } - /* fgState.Initalized = GL_FALSE; */ + /* fgState.Initialised = GL_FALSE; */ /* * If there was a menu created, destroy the rendering context @@ -230,15 +236,21 @@ void fgDeinitialize( void ) fgDestroyStructure( ); - while( timer = ( SFG_Timer * )fgState.Timers.First ) + while( (timer = fgState.Timers.First) ) { - fgListRemove ( &fgState.Timers, &timer->Node ); + fgListRemove( &fgState.Timers, &timer->Node ); + free( timer ); + } + + while( (timer = fgState.FreeTimers.First) ) + { + fgListRemove( &fgState.FreeTimers, &timer->Node ); free( timer ); } fgJoystickClose( ); - fgState.Initalized = GL_FALSE; + fgState.Initialised = GL_FALSE; fgState.Position.X = -1; fgState.Position.Y = -1; @@ -269,7 +281,9 @@ void fgDeinitialize( void ) fgState.Time.Set = GL_FALSE; - fgState.Timers.First = fgState.Timers.Last = NULL; + fgListInit( &fgState.Timers ); + fgListInit( &fgState.FreeTimers ); + fgState.IdleCallback = NULL; fgState.MenuStateCallback = ( FGCBMenuState )NULL; fgState.MenuStatusCallback = ( FGCBMenuStatus )NULL; @@ -306,7 +320,35 @@ void fgDeinitialize( void ) * Everything inside the following #ifndef is copied from the X sources. */ -#ifndef TARGET_HOST_UNIX_X11 +#if TARGET_HOST_WIN32 + +/* + +Copyright 1985, 1986, 1987,1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 THE OPEN GROUP 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. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +*/ #define NoValue 0x0000 #define XValue 0x0001 @@ -348,13 +390,13 @@ ReadInteger(char *string, char **NextString) } *NextString = string; if (Sign >= 0) - return (Result); + return Result; else - return (-Result); + return -Result; } static int XParseGeometry ( - _Xconst char *string, + const char *string, int *x, int *y, unsigned int *width, /* RETURN */ @@ -366,7 +408,8 @@ static int XParseGeometry ( int tempX = 0, tempY = 0; char *nextCharacter; - if ( (string == NULL) || (*string == '\0')) return(mask); + if ( (string == NULL) || (*string == '\0')) + return mask; if (*string == '=') string++; /* ignore possible '=' at beg of geometry spec */ @@ -374,7 +417,7 @@ static int XParseGeometry ( if (*strind != '+' && *strind != '-' && *strind != 'x') { tempWidth = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return (0); + return 0; strind = nextCharacter; mask |= WidthValue; } @@ -383,7 +426,7 @@ static int XParseGeometry ( strind++; tempHeight = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return (0); + return 0; strind = nextCharacter; mask |= HeightValue; } @@ -393,7 +436,7 @@ static int XParseGeometry ( strind++; tempX = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return (0); + return 0; strind = nextCharacter; mask |= XNegative; } @@ -402,7 +445,7 @@ static int XParseGeometry ( strind++; tempX = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return(0); + return 0; strind = nextCharacter; } mask |= XValue; @@ -411,7 +454,7 @@ static int XParseGeometry ( strind++; tempY = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return(0); + return 0; strind = nextCharacter; mask |= YNegative; } @@ -420,7 +463,7 @@ static int XParseGeometry ( strind++; tempY = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) - return(0); + return 0; strind = nextCharacter; } mask |= YValue; @@ -430,7 +473,7 @@ static int XParseGeometry ( /* If strind isn't at the end of the string the it's an invalid geometry specification. */ - if (*strind != '\0') return (0); + if (*strind != '\0') return 0; if (mask & XValue) *x = tempX; @@ -440,7 +483,7 @@ static int XParseGeometry ( *width = tempWidth; if (mask & HeightValue) *height = tempHeight; - return (mask); + return mask; } #endif @@ -456,8 +499,8 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) char* geometry = NULL; int i, j, argc = *pargc; - if( fgState.Initalized ) - fgError( "illegal glutInit() reinitialization attemp" ); + if( fgState.Initialised ) + fgError( "illegal glutInit() reinitialization attempt" ); if (pargc && *pargc && argv && *argv && **argv) { @@ -476,9 +519,13 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) 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; } } @@ -671,12 +718,12 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode ) * delimited by blanks or tabs. */ char *token ; - int len = strlen ( displayMode ) ; - char *buffer = (char *)malloc ( (len+1) * sizeof(char) ) ; - memcpy ( buffer, displayMode, len ) ; - buffer[len] = '\0' ; + int len = strlen ( displayMode ); + char *buffer = (char *)malloc ( (len+1) * sizeof(char) ); + memcpy ( buffer, displayMode, len ); + buffer[len] = '\0'; - token = strtok ( buffer, " \t" ) ; + token = strtok ( buffer, " \t" ); while ( token ) { /* @@ -828,14 +875,14 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode ) case 28 : /* Unrecognized */ printf ( "WARNING - Display string token not recognized: %s\n", - token ) ; + token ); break ; } - token = strtok ( NULL, " \t" ) ; + token = strtok ( NULL, " \t" ); } - free ( buffer ) ; + free ( buffer ); /* * We will make use of this value when creating a new OpenGL context...