X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_state.c;h=cc938924c3e85059f7db81d0fb37bc0f3e31e4d2;hb=2c12c9eb8d63cabac2d4113b4f54fdf53da8368c;hp=208b5e26b0aaaa78e6ffa6c6aef7fd55cca4ba05;hpb=1b5ee849ba61b667aeba474a7e03406196478bee;p=freeglut diff --git a/src/fg_state.c b/src/fg_state.c index 208b5e2..cc93892 100644 --- a/src/fg_state.c +++ b/src/fg_state.c @@ -1,5 +1,5 @@ /* - * freeglut_state.c + * fg_state.c * * Freeglut state query methods. * @@ -44,6 +44,7 @@ extern int fgPlatformGlutGet ( GLenum eWhat ); extern int fgPlatformGlutDeviceGet ( GLenum eWhat ); extern int *fgPlatformGlutGetModeValues(GLenum eWhat, int *size); +extern SFG_Font* fghFontByID( void* font ); /* -- LOCAL DEFINITIONS ---------------------------------------------------- */ @@ -60,9 +61,6 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value ) { FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetOption" ); - /* - * XXX In chronological code add order. (WHY in that order?) - */ switch( eWhat ) { case GLUT_INIT_WINDOW_X: @@ -111,6 +109,19 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value ) fgState.SampleNumber = value; break; + case GLUT_SKIP_STALE_MOTION_EVENTS: + fgState.SkipStaleMotion = !!value; + break; + + case GLUT_GEOMETRY_VISUALIZE_NORMALS: + if( fgStructure.CurrentWindow != NULL ) + fgStructure.CurrentWindow->State.VisualizeNormals = !!value; + break; + + case GLUT_STROKE_FONT_DRAW_JOIN_DOTS: + fgState.StrokeFontDrawJoinDots = !!value; + break; + default: fgWarning( "glutSetOption(): missing enum handle %d", eWhat ); break; @@ -127,13 +138,18 @@ int FGAPIENTRY glutGet( GLenum eWhat ) case GLUT_INIT_STATE: return fgState.Initialised; + /* Although internally the time store is 64bits wide, the return value + * here still wraps every 49.7 days. Integer overflows cancel however + * when subtracting an initial start time, unless the total time exceeds + * 32-bit, so you can still work with this. + * XXX: a glutGet64 to return the time might be an idea... + */ case GLUT_ELAPSED_TIME: return (int) fgElapsedTime(); } FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGet" ); - /* XXX In chronological code add order. (WHY in that order?) */ switch( eWhat ) { /* Following values are stored in fgState and fgDisplay global structures */ @@ -198,11 +214,21 @@ int FGAPIENTRY glutGet( GLenum eWhat ) case GLUT_MULTISAMPLE: return fgState.SampleNumber; + case GLUT_SKIP_STALE_MOTION_EVENTS: + return fgState.SkipStaleMotion; + + case GLUT_GEOMETRY_VISUALIZE_NORMALS: + if( fgStructure.CurrentWindow == NULL ) + return GL_FALSE; + return fgStructure.CurrentWindow->State.VisualizeNormals; + + case GLUT_STROKE_FONT_DRAW_JOIN_DOTS: + return fgState.StrokeFontDrawJoinDots; + default: return fgPlatformGlutGet ( eWhat ); break; } - return -1; } /* @@ -262,9 +288,6 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat ) default: return fgPlatformGlutDeviceGet ( eWhat ); } - - /* And now -- the failure. */ - return -1; } /*