From: black Date: Thu, 6 Dec 2007 13:52:53 +0000 (+0000) Subject: Remove unused MP_Fallback from menu.c. X-Git-Tag: xonotic-v0.1.0preview~2720 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=commitdiff_plain;h=564777a4a853dc470afb6b084d2876ca5546343f Remove unused MP_Fallback from menu.c. Add DP_GECKO_SUPPORT to the menu's extension string. Automatically destroy gecko instances on restart. Change the gecko builtins to take the full texture path always. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7769 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_dyntexture.c b/cl_dyntexture.c index 8ee49464..722c7227 100644 --- a/cl_dyntexture.c +++ b/cl_dyntexture.c @@ -60,6 +60,10 @@ void CL_LinkDynTexture( const char *name, rtexture_t *texture ) { skinframe_t *skinframe; dyntexture = cl_finddyntexture( name ); + if( !dyntexture ) { + Con_Printf( "CL_LinkDynTexture: internal error in cl_finddyntexture!\n" ); + return; + } // TODO: assert dyntexture != NULL! if( dyntexture->texture != texture ) { dyntexture->texture = texture; diff --git a/cl_gecko.c b/cl_gecko.c index 47614ed8..7442e768 100644 --- a/cl_gecko.c +++ b/cl_gecko.c @@ -94,7 +94,7 @@ clgecko_t * CL_Gecko_CreateBrowser( const char *name ) { osgk_release( options ); if( cl_geckoembedding == NULL ) { - Con_Printf( "CL_Gecko_Init: Couldn't retrieve gecko embedding object!\n" ); + Con_Printf( "CL_Gecko_CreateBrowser: Couldn't retrieve gecko embedding object!\n" ); return NULL; } } diff --git a/cl_gecko.h b/cl_gecko.h index 11c02902..c5bb63d2 100644 --- a/cl_gecko.h +++ b/cl_gecko.h @@ -5,6 +5,8 @@ #ifndef CL_GECKO_H #define CL_GECKO_H +#include "cl_dyntexture.h" + #define DEFAULT_GECKO_WIDTH 512 #define DEFAULT_GECKO_HEIGHT DEFAULT_GECKO_WIDTH diff --git a/cl_video.h b/cl_video.h index d5b1a84f..05bf4a16 100644 --- a/cl_video.h +++ b/cl_video.h @@ -2,6 +2,8 @@ #ifndef CL_VIDEO_H #define CL_VIDEO_H +#include "cl_dyntexture.h" + #define MAXCLVIDEOS 64 + 1 // 1 video is reserved for the cinematic mode // yields DYNAMIC_TEXTURE_PATH_PREFIX CLVIDEOPREFIX video name for a path #define CLVIDEOPREFIX CLDYNTEXTUREPREFIX "video/" diff --git a/csprogs.c b/csprogs.c index 5b803276..c8a2120d 100644 --- a/csprogs.c +++ b/csprogs.c @@ -718,6 +718,7 @@ void CL_VM_Init (void) prog->limit_edicts = CL_MAX_EDICTS; prog->reserved_edicts = 0; prog->edictprivate_size = sizeof(edict_engineprivate_t); + // TODO: add a shared extension string #define and add real support for csqc extension strings [12/5/2007 Black] prog->extensionstring = vm_sv_extensions; prog->builtins = vm_cl_builtins; prog->numbuiltins = vm_cl_numbuiltins; diff --git a/menu.c b/menu.c index fb55bd75..59418bd5 100644 --- a/menu.c +++ b/menu.c @@ -5104,16 +5104,6 @@ void MP_Shutdown (void) PRVM_End; } -void MP_Fallback (void) -{ - MP_Shutdown(); - - key_dest = key_game; - - // init the normal menu now -> this will also correct the menu router pointers - MR_SetRouting (TRUE); -} - void MP_Init (void) { PRVM_Begin; diff --git a/mvm_cmds.c b/mvm_cmds.c index 834e8383..c4b194a9 100644 --- a/mvm_cmds.c +++ b/mvm_cmds.c @@ -19,6 +19,10 @@ char *vm_m_extensions = "DP_QC_CMD " "DP_QC_STRREPLACE " "DP_FONT_VARIABLEWIDTH " +// FIXME: rename this extension maybe? [12/5/2007 Black] +#ifdef SUPPORT_GECKO +"DP_GECKO_SUPPORT " +#endif ; /* diff --git a/progsvm.h b/progsvm.h index 9ec87682..6c780936 100644 --- a/progsvm.h +++ b/progsvm.h @@ -33,6 +33,11 @@ The code uses void pointers instead. #include "progdefs.h" // generated by program cdefs #include "clprogdefs.h" // generated by program cdefs +#ifdef SUPPORT_GECKO +// forward declaration of clgecko_t +typedef struct clgecko_s clgecko_t; +#endif + typedef struct prvm_stack_s { int s; @@ -114,6 +119,9 @@ typedef struct prvm_edict_s #define PRVM_MAX_OPENFILES 256 #define PRVM_MAX_OPENSEARCHES 128 +#ifdef SUPPORT_GECKO +#define PRVM_MAX_GECKOINSTANCES 32 +#endif typedef void (*prvm_builtin_t) (void); @@ -345,6 +353,9 @@ typedef struct prvm_prog_s qfile_t *openfiles[PRVM_MAX_OPENFILES]; fssearch_t *opensearches[PRVM_MAX_OPENSEARCHES]; +#ifdef SUPPORT_GECKO + clgecko_t *opengeckoinstances[PRVM_MAX_GECKOINSTANCES]; +#endif // copies of some vars that were former read from sv int num_edicts; diff --git a/prvm_cmds.c b/prvm_cmds.c index 543fd23c..04f0860d 100644 --- a/prvm_cmds.c +++ b/prvm_cmds.c @@ -3101,9 +3101,30 @@ void VM_cin_restart( void ) } #ifdef SUPPORT_GECKO -static const char *vm_gecko_getfullname( const char *name ) { - // FIXME: assert that PRVM_NAME is not empty.. [12/3/2007 Black] - return va( "%s/%s", PRVM_NAME, name ); +/* +======================== +VM_Gecko_Init +======================== +*/ +void VM_Gecko_Init( void ) { + // the prog struct is memset to 0 by Initprog? [12/6/2007 Black] + // FIXME: remove the other _Init functions then, too? [12/6/2007 Black] +} + +/* +======================== +VM_Gecko_Destroy +======================== +*/ +void VM_Gecko_Destroy( void ) { + int i; + for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) { + clgecko_t **instance = &prog->opengeckoinstances[ i ]; + if( *instance ) { + CL_Gecko_DestroyBrowser( *instance ); + } + *instance = NULL; + } } /* @@ -3115,13 +3136,28 @@ float[bool] gecko_create( string name ) */ void VM_gecko_create( void ) { const char *name; - + int i; + clgecko_t *instance; + VM_SAFEPARMCOUNT( 1, VM_gecko_create ); name = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( name ); - if( !CL_Gecko_CreateBrowser( vm_gecko_getfullname( name ) ) ) { + // find an empty slot for this gecko browser.. + for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) { + if( prog->opengeckoinstances[ i ] == NULL ) { + break; + } + } + if( i == PRVM_MAX_GECKOINSTANCES ) { + VM_Warning("VM_gecko_create: %s ran out of gecko handles (%i)\n", PRVM_NAME, PRVM_MAX_GECKOINSTANCES); + PRVM_G_FLOAT( OFS_RETURN ) = 0; + return; + } + + instance = prog->opengeckoinstances[ i ] = CL_Gecko_CreateBrowser( name ); + if( !instance ) { // TODO: error handling [12/3/2007 Black] PRVM_G_FLOAT( OFS_RETURN ) = 0; return; @@ -3144,7 +3180,7 @@ void VM_gecko_destroy( void ) { name = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( name ); - instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) ); + instance = CL_Gecko_FindBrowser( name ); if( !instance ) { return; } @@ -3170,7 +3206,7 @@ void VM_gecko_navigate( void ) { VM_CheckEmptyString( name ); VM_CheckEmptyString( URI ); - instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) ); + instance = CL_Gecko_FindBrowser( name ); if( !instance ) { return; } @@ -3214,7 +3250,7 @@ void VM_gecko_keyevent( void ) { return; } - instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) ); + instance = CL_Gecko_FindBrowser( name ); if( !instance ) { PRVM_G_FLOAT( OFS_RETURN ) = 0; return; @@ -3242,7 +3278,7 @@ void VM_gecko_movemouse( void ) { x = PRVM_G_FLOAT( OFS_PARM1 ); y = PRVM_G_FLOAT( OFS_PARM2 ); - instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) ); + instance = CL_Gecko_FindBrowser( name ); if( !instance ) { return; } @@ -4461,6 +4497,9 @@ void VM_Cmd_Init(void) // only init the stuff for the current prog VM_Files_Init(); VM_Search_Init(); +#ifdef SUPPORT_GECKO + VM_Gecko_Init(); +#endif // VM_BufStr_Init(); } @@ -4469,6 +4508,9 @@ void VM_Cmd_Reset(void) CL_PurgeOwner( MENUOWNER ); VM_Search_Reset(); VM_Files_CloseAll(); +#ifdef SUPPORT_GECKO + VM_Gecko_Destroy(); +#endif // VM_BufStr_ShutDown(); }