X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_state.c;h=68b7eb5838df2b8dc840f711dee9f317ecb3e68f;hb=89c225066899f8956939f8175a0d548cd6f63a62;hp=7b7eedc0eaaa6721f94ff3193aa3e682760b509c;hpb=d67937396dc33c86017012859b2d9ed010fc6c88;p=freeglut diff --git a/src/freeglut_state.c b/src/freeglut_state.c index 7b7eedc..68b7eb5 100644 --- a/src/freeglut_state.c +++ b/src/freeglut_state.c @@ -72,51 +72,55 @@ static int fghGetConfig( int attribute ) */ void FGAPIENTRY glutSetOption( GLenum eWhat, int value ) { - freeglut_assert_ready; - - /* - * XXX In chronological code add order. (WHY in that order?) - */ - switch( eWhat ) - { - case GLUT_INIT_WINDOW_X: - fgState.Position.X = (GLint)value; - break; - - case GLUT_INIT_WINDOW_Y: - fgState.Position.Y = (GLint)value; - break; - - case GLUT_INIT_WINDOW_WIDTH: - fgState.Size.X = (GLint)value; - break; - - case GLUT_INIT_WINDOW_HEIGHT: - fgState.Size.Y = (GLint)value; - break; - - case GLUT_INIT_DISPLAY_MODE: - fgState.DisplayMode = (unsigned int)value; - break; - - case GLUT_ACTION_ON_WINDOW_CLOSE: - fgState.ActionOnWindowClose = value; - break; - - case GLUT_RENDERING_CONTEXT: - fgState.UseCurrentContext = - ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE; - break; - - case GLUT_WINDOW_CURSOR: - if( fgStructure.Window != NULL ) - fgStructure.Window->State.Cursor = value; - break; - - default: - fgWarning( "glutSetOption(): missing enum handle %i\n", eWhat ); - break; - } + freeglut_assert_ready; + + /* + * XXX In chronological code add order. (WHY in that order?) + */ + switch( eWhat ) + { + case GLUT_INIT_WINDOW_X: + fgState.Position.X = (GLint)value; + break; + + case GLUT_INIT_WINDOW_Y: + fgState.Position.Y = (GLint)value; + break; + + case GLUT_INIT_WINDOW_WIDTH: + fgState.Size.X = (GLint)value; + break; + + case GLUT_INIT_WINDOW_HEIGHT: + fgState.Size.Y = (GLint)value; + break; + + case GLUT_INIT_DISPLAY_MODE: + fgState.DisplayMode = (unsigned int)value; + break; + + case GLUT_ACTION_ON_WINDOW_CLOSE: + fgState.ActionOnWindowClose = value; + break; + + case GLUT_RENDERING_CONTEXT: + fgState.UseCurrentContext = + ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE; + break; + + case GLUT_DIRECT_RENDERING: + fgState.DirectContext = value; + break; + + case GLUT_WINDOW_CURSOR: + if( fgStructure.Window != NULL ) + fgStructure.Window->State.Cursor = value; + break; + + default: + fgWarning( "glutSetOption(): missing enum handle %d", eWhat ); + break; + } } /* @@ -140,14 +144,10 @@ int FGAPIENTRY glutGet( GLenum eWhat ) freeglut_assert_ready; - /* - * XXX In chronological code add order. (WHY in that order?) - */ + /* XXX In chronological code add order. (WHY in that order?) */ switch( eWhat ) { - /* - * Following values are stored in fgState and fgDisplay global structures - */ + /* Following values are stored in fgState and fgDisplay global structures */ case GLUT_SCREEN_WIDTH: return fgDisplay.ScreenWidth ; case GLUT_SCREEN_HEIGHT: return fgDisplay.ScreenHeight ; case GLUT_SCREEN_WIDTH_MM: return fgDisplay.ScreenWidthMM ; @@ -163,9 +163,7 @@ int FGAPIENTRY glutGet( GLenum eWhat ) * fghGetConfig(). */ case GLUT_WINDOW_NUM_SAMPLES: - /* - * XXX Multisampling. Return what I know about multisampling. - */ + /* XXX Multisampling. Return what I know about multisampling. */ return 0; #if TARGET_HOST_UNIX_X11 @@ -192,9 +190,7 @@ int FGAPIENTRY glutGet( GLenum eWhat ) # undef GLX_QUERY - /* - * Colormap size is handled in a bit different way than all the rest - */ + /* Colormap size is handled in a bit different way than all the rest */ case GLUT_WINDOW_COLORMAP_SIZE: if( (fghGetConfig( GLX_RGBA )) || (fgStructure.Window == NULL) ) { @@ -266,15 +262,11 @@ int FGAPIENTRY glutGet( GLenum eWhat ) } } - /* - * I do not know yet if there will be a fgChooseVisual() function for Win32 - */ + /* I do not know yet if there will be a fgChooseVisual() function for Win32 */ case GLUT_DISPLAY_MODE_POSSIBLE: return( fgChooseVisual() == NULL ? 0 : 1 ); - /* - * This is system-dependant - */ + /* This is system-dependant */ case GLUT_WINDOW_FORMAT_ID: if( fgStructure.Window == NULL ) return 0; @@ -283,9 +275,7 @@ int FGAPIENTRY glutGet( GLenum eWhat ) #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE - /* - * Handle the OpenGL inquiries - */ + /* Handle the OpenGL inquiries */ case GLUT_WINDOW_RGBA: glGetBooleanv ( GL_RGBA_MODE, &boolValue ); returnValue = boolValue ? 1 : 0; @@ -373,9 +363,7 @@ int FGAPIENTRY glutGet( GLenum eWhat ) */ GetWindowRect( fgStructure.Window->Window.Handle, &winRect ); - /* - * ...then we've got to correct the results we've just received... - */ + /* ...then we've got to correct the results we've just received... */ #if !TARGET_HOST_WINCE if ( ( fgStructure.GameMode != fgStructure.Window ) && ( fgStructure.Window->Parent == NULL ) && @@ -386,7 +374,7 @@ int FGAPIENTRY glutGet( GLenum eWhat ) winRect.top += GetSystemMetrics( SM_CYSIZEFRAME ) + GetSystemMetrics( SM_CYCAPTION ); winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME ); } -#endif //TARGET_HOST_WINCE +#endif /* !TARGET_HOST_WINCE */ switch( eWhat ) { @@ -400,39 +388,37 @@ int FGAPIENTRY glutGet( GLenum eWhat ) case GLUT_WINDOW_BORDER_WIDTH : #if TARGET_HOST_WINCE - return 0; + return 0; #else return GetSystemMetrics( SM_CXSIZEFRAME ); -#endif //TARGET_HOST_WINCE +#endif /* !TARGET_HOST_WINCE */ case GLUT_WINDOW_HEADER_HEIGHT : #if TARGET_HOST_WINCE - return 0; + return 0; #else return GetSystemMetrics( SM_CYCAPTION ); -#endif //TARGET_HOST_WINCE +#endif /* TARGET_HOST_WINCE */ case GLUT_DISPLAY_MODE_POSSIBLE: #if TARGET_HOST_WINCE - return GL_FALSE; + return GL_FALSE; #else return fgSetupPixelFormat( fgStructure.Window, GL_TRUE, PFD_MAIN_PLANE ); -#endif //TARGET_HOST_WINCE +#endif /* TARGET_HOST_WINCE */ case GLUT_WINDOW_FORMAT_ID: #if !TARGET_HOST_WINCE if( fgStructure.Window != NULL ) return GetPixelFormat( fgStructure.Window->Window.Device ); -#endif //TARGET_HOST_WINCE +#endif /* TARGET_HOST_WINCE */ return 0; #endif - /* - * The window structure queries - */ + /* The window structure queries */ case GLUT_WINDOW_PARENT: if( fgStructure.Window == NULL ) return 0; if( fgStructure.Window->Parent == NULL ) return 0; @@ -463,8 +449,12 @@ int FGAPIENTRY glutGet( GLenum eWhat ) return fgState.UseCurrentContext ? GLUT_USE_CURRENT_CONTEXT : GLUT_CREATE_NEW_CONTEXT; + case GLUT_DIRECT_RENDERING: + return fgState.DirectContext; + break; + default: - fgWarning( "glutGet(): missing enum handle %i\n", eWhat ); + fgWarning( "glutGet(): missing enum handle %d", eWhat ); break; } return -1; @@ -477,9 +467,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat ) { freeglut_assert_ready; - /* - * XXX WARNING: we are mostly lying in this function. - */ + /* XXX WARNING: we are mostly lying in this function. */ switch( eWhat ) { case GLUT_HAS_KEYBOARD: @@ -531,26 +519,30 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat ) return GetSystemMetrics( SM_MOUSEPRESENT ); case GLUT_NUM_MOUSE_BUTTONS: - /* - * We are much more fortunate under Win32 about this... - */ + /* We are much more fortunate under Win32 about this... */ #if TARGET_HOST_WINCE - return 1; + return 1; #else return GetSystemMetrics( SM_CMOUSEBUTTONS ); -#endif //TARGET_HOST_WINCE +#endif /* TARGET_HOST_WINCE */ #endif - case GLUT_JOYSTICK_POLL_RATE: case GLUT_HAS_JOYSTICK: + return fgJoystickDetect (); + case GLUT_OWNS_JOYSTICK: + return fgState.JoysticksInitialised; + + case GLUT_JOYSTICK_POLL_RATE: + return fgStructure.Window ? fgStructure.Window->State.JoystickPollRate : 0; + + /* The following two are only for Joystick 0 but this is an improvement */ case GLUT_JOYSTICK_BUTTONS: + return glutJoystickGetNumButtons ( 0 ); + case GLUT_JOYSTICK_AXES: - /* - * XXX WARNING: THIS IS A BIG LIE! - */ - return 0; + return glutJoystickGetNumAxes ( 0 ); case GLUT_HAS_SPACEBALL: case GLUT_HAS_DIAL_AND_BUTTON_BOX: @@ -567,19 +559,14 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat ) return fgStructure.Window ? fgStructure.Window->State.IgnoreKeyRepeat : 0; case GLUT_DEVICE_KEY_REPEAT: - /* - * XXX WARNING: THIS IS A BIG LIE! - */ - return GLUT_KEY_REPEAT_DEFAULT; + return fgState.KeyRepeat; default: - fgWarning( "glutDeviceGet(): missing enum handle %i\n", eWhat ); + fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat ); break; } - /* - * And now -- the failure. - */ + /* And now -- the failure. */ return -1; } @@ -633,9 +620,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat ) return 0; case GLUT_NORMAL_DAMAGED: - /* - * XXX Actually I do not know. Maybe. - */ + /* XXX Actually I do not know. Maybe. */ return FALSE; case GLUT_OVERLAY_DAMAGED: @@ -663,9 +648,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat ) return 0; case GLUT_NORMAL_DAMAGED: - /* - * XXX Actually I do not know. Maybe. - */ + /* XXX Actually I do not know. Maybe. */ return FALSE; case GLUT_OVERLAY_DAMAGED: @@ -673,13 +656,11 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat ) #endif default: - fgWarning( "glutLayerGet(): missing enum handle %i\n", eWhat ); + fgWarning( "glutLayerGet(): missing enum handle %d", eWhat ); break; } - /* - * And fail. That's good. Programs do love failing. - */ + /* And fail. That's good. Programs do love failing. */ return -1; }