X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_init.c;h=ed29a8385090b916f3024744fff08627a4fa6525;hb=6036c01688246f8f824de48ca2557ab9f881eee0;hp=ae87212d4cd60c92da70a5e68ca5f56a5bc6268f;hpb=450dfa5a91a65503af8883102272dc95ee8e4d6a;p=freeglut diff --git a/src/fg_init.c b/src/fg_init.c index ae87212..ed29a83 100644 --- a/src/fg_init.c +++ b/src/fg_init.c @@ -70,9 +70,11 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ { NULL, NULL }, /* Timers */ { NULL, NULL }, /* FreeTimers */ NULL, /* IdleCallback */ + NULL, /* IdleCallbackData */ 0, /* ActiveMenus */ NULL, /* MenuStateCallback */ NULL, /* MenuStatusCallback */ + NULL, /* MenuStatusCallbackData */ FREEGLUT_MENU_FONT, { -1, -1, GL_TRUE }, /* GameModeSize */ -1, /* GameModeDepth */ @@ -95,7 +97,9 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ 0, /* OpenGL ContextProfile */ 0, /* HasOpenGL20 */ NULL, /* ErrorFunc */ - NULL /* WarningFunc */ + NULL, /* ErrorFuncData */ + NULL, /* WarningFunc */ + NULL /* WarningFuncData */ }; @@ -298,9 +302,11 @@ void fgDeinitialize( void ) fgListInit( &fgState.Timers ); fgListInit( &fgState.FreeTimers ); - fgState.IdleCallback = NULL; - fgState.MenuStateCallback = ( FGCBMenuState )NULL; - fgState.MenuStatusCallback = ( FGCBMenuStatus )NULL; + fgState.IdleCallback = ( FGCBIdleUC )NULL; + fgState.IdleCallbackData = NULL; + fgState.MenuStateCallback = ( FGCBMenuState )NULL; + fgState.MenuStatusCallback = ( FGCBMenuStatusUC )NULL; + fgState.MenuStatusCallbackData = NULL; fgState.SwapCount = 0; fgState.SwapTime = 0; @@ -668,19 +674,57 @@ void FGAPIENTRY glutInitContextProfile( int profile ) /* * Sets the user error handler (note the use of va_list for the args to the fmt) */ -void FGAPIENTRY glutInitErrorFunc( FGError callback ) +void FGAPIENTRY glutInitErrorFuncUcall( FGErrorUC callback, FGCBUserData userData ) { /* This allows user programs to handle freeglut errors */ fgState.ErrorFunc = callback; + fgState.ErrorFuncData = userData; +} + +static void fghInitErrorFuncCallback( const char *fmt, va_list ap, FGCBUserData userData ) +{ + FGError callback = (FGError)userData; + callback( fmt, ap ); +} + +void FGAPIENTRY glutInitErrorFunc( FGError callback ) +{ + if (callback) + { + glutInitErrorFuncUcall( fghInitErrorFuncCallback, (FGCBUserData)callback ); + } + else + { + glutInitErrorFuncUcall( NULL, NULL ); + } } /* * Sets the user warning handler (note the use of va_list for the args to the fmt) */ -void FGAPIENTRY glutInitWarningFunc( FGWarning callback ) +void FGAPIENTRY glutInitWarningFuncUcall( FGWarningUC callback, FGCBUserData userData ) { /* This allows user programs to handle freeglut warnings */ fgState.WarningFunc = callback; + fgState.WarningFuncData = userData; +} + +static void fghInitWarningFuncCallback( const char *fmt, va_list ap, FGCBUserData userData ) +{ + FGWarning callback = (FGWarning)userData; + callback( fmt, ap ); +} + +void FGAPIENTRY glutInitWarningFunc( FGWarning callback ) +{ + if (callback) + { + glutInitWarningFuncUcall( fghInitWarningFuncCallback, (FGCBUserData)callback ); + } + else + { + glutInitWarningFuncUcall( NULL, NULL ); + } } /*** END OF FILE ***/