From: havoc Date: Fri, 2 Jul 2010 02:39:31 +0000 (+0000) Subject: add DeviceLost and DeviceRestored functions to R_Modules system X-Git-Tag: xonotic-v0.1.0preview~230^2~215 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ac26fe8251232ec2eb02c89b9df3d07444063211;p=xonotic%2Fdarkplaces.git add DeviceLost and DeviceRestored functions to R_Modules system git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10263 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_gecko.c b/cl_gecko.c index 3b4781d7..ec09b5c3 100644 --- a/cl_gecko.c +++ b/cl_gecko.c @@ -869,7 +869,7 @@ void CL_Gecko_Init( void ) Cmd_AddCommand( "gecko_injecttext", cl_gecko_injecttext_f, "Injects text into a browser" ); Cmd_AddCommand( "gecko_movecursor", gl_gecko_movecursor_f, "Move the cursor to a certain position" ); - R_RegisterModule( "CL_Gecko", cl_gecko_start, cl_gecko_shutdown, cl_gecko_newmap ); + R_RegisterModule( "CL_Gecko", cl_gecko_start, cl_gecko_shutdown, cl_gecko_newmap, NULL, NULL ); } void CL_Gecko_NavigateToURI( clgecko_t *instance, const char *URI ) { diff --git a/cl_particles.c b/cl_particles.c index dc181b09..08652af4 100644 --- a/cl_particles.c +++ b/cl_particles.c @@ -2295,7 +2295,7 @@ void R_Particles_Init (void) Cvar_RegisterVariable(&r_drawparticles_drawdistance); Cvar_RegisterVariable(&r_drawdecals); Cvar_RegisterVariable(&r_drawdecals_drawdistance); - R_RegisterModule("R_Particles", r_part_start, r_part_shutdown, r_part_newmap); + R_RegisterModule("R_Particles", r_part_start, r_part_shutdown, r_part_newmap, NULL, NULL); } void R_DrawDecal_TransparentCallback(const entity_render_t *ent, const rtlight_t *rtlight, int numsurfaces, int *surfacelist) diff --git a/cl_video.c b/cl_video.c index 60888777..afba2119 100644 --- a/cl_video.c +++ b/cl_video.c @@ -612,6 +612,6 @@ void CL_Video_Init( void ) Cvar_RegisterVariable(&cl_video_brightness); Cvar_RegisterVariable(&cl_video_stipple); - R_RegisterModule( "CL_Video", cl_video_start, cl_video_shutdown, cl_video_newmap ); + R_RegisterModule( "CL_Video", cl_video_start, cl_video_shutdown, cl_video_newmap, NULL, NULL ); } diff --git a/gl_backend.c b/gl_backend.c index 92f90ab7..d132def1 100644 --- a/gl_backend.c +++ b/gl_backend.c @@ -321,7 +321,7 @@ void gl_backend_init(void) Cmd_AddCommand("gl_vbostats", GL_VBOStats_f, "prints a list of all buffer objects (vertex data and triangle elements) and total video memory used by them"); - R_RegisterModule("GL_Backend", gl_backend_start, gl_backend_shutdown, gl_backend_newmap); + R_RegisterModule("GL_Backend", gl_backend_start, gl_backend_shutdown, gl_backend_newmap, NULL, NULL); } void GL_SetMirrorState(qboolean state); diff --git a/gl_draw.c b/gl_draw.c index 9f887653..4fdee6f4 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -956,7 +956,7 @@ void GL_Draw_Init (void) dpsnprintf(FONT_USER(i)->title, sizeof(FONT_USER(i)->title), "user%d", j++); Cmd_AddCommand ("loadfont",LoadFont_f, "loadfont function tganame loads a font; example: loadfont console gfx/veramono; loadfont without arguments lists the available functions"); - R_RegisterModule("GL_Draw", gl_draw_start, gl_draw_shutdown, gl_draw_newmap); + R_RegisterModule("GL_Draw", gl_draw_start, gl_draw_shutdown, gl_draw_newmap, NULL, NULL); } void _DrawQ_Setup(void) diff --git a/gl_rmain.c b/gl_rmain.c index bd582cd1..24b6dfd8 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -6458,7 +6458,7 @@ void GL_Main_Init(void) Cvar_RegisterVariable(&r_framedatasize); if (gamemode == GAME_NEHAHRA || gamemode == GAME_TENEBRAE) Cvar_SetValue("r_fullbrights", 0); - R_RegisterModule("GL_Main", gl_main_start, gl_main_shutdown, gl_main_newmap); + R_RegisterModule("GL_Main", gl_main_start, gl_main_shutdown, gl_main_newmap, NULL, NULL); Cvar_RegisterVariable(&r_track_sprites); Cvar_RegisterVariable(&r_track_sprites_flags); diff --git a/gl_textures.c b/gl_textures.c index 881b48c5..bcf79232 100644 --- a/gl_textures.c +++ b/gl_textures.c @@ -590,7 +590,7 @@ void R_Textures_Init (void) Cvar_RegisterVariable (&gl_texturecompression_reflectmask); Cvar_RegisterVariable (&gl_nopartialtextureupdates); - R_RegisterModule("R_Textures", r_textures_start, r_textures_shutdown, r_textures_newmap); + R_RegisterModule("R_Textures", r_textures_start, r_textures_shutdown, r_textures_newmap, NULL, NULL); } void R_Textures_Frame (void) diff --git a/model_shared.c b/model_shared.c index 3c706f31..eff2960c 100644 --- a/model_shared.c +++ b/model_shared.c @@ -179,7 +179,7 @@ void Mod_Init (void) void Mod_RenderInit(void) { - R_RegisterModule("Models", mod_start, mod_shutdown, mod_newmap); + R_RegisterModule("Models", mod_start, mod_shutdown, mod_newmap, NULL, NULL); } void Mod_UnloadModel (dp_model_t *mod) diff --git a/palette.c b/palette.c index e397f155..af413146 100644 --- a/palette.c +++ b/palette.c @@ -330,7 +330,7 @@ void Palette_Load(void) void Palette_Init(void) { - R_RegisterModule("Palette", Palette_Load, Palette_Shutdown, Palette_NewMap); + R_RegisterModule("Palette", Palette_Load, Palette_Shutdown, Palette_NewMap, NULL, NULL); Cvar_RegisterVariable(&r_colormap_palette); Palette_Load(); } diff --git a/r_explosion.c b/r_explosion.c index 83cad1ee..3519fd94 100644 --- a/r_explosion.c +++ b/r_explosion.c @@ -153,7 +153,7 @@ void R_Explosion_Init(void) #ifdef MAX_EXPLOSIONS Cvar_RegisterVariable(&r_drawexplosions); - R_RegisterModule("R_Explosions", r_explosion_start, r_explosion_shutdown, r_explosion_newmap); + R_RegisterModule("R_Explosions", r_explosion_start, r_explosion_shutdown, r_explosion_newmap, NULL, NULL); #endif } diff --git a/r_lightning.c b/r_lightning.c index 31f98d8a..af966a96 100644 --- a/r_lightning.c +++ b/r_lightning.c @@ -174,7 +174,7 @@ void R_LightningBeams_Init(void) Cvar_RegisterVariable(&r_lightningbeam_color_green); Cvar_RegisterVariable(&r_lightningbeam_color_blue); Cvar_RegisterVariable(&r_lightningbeam_qmbtexture); - R_RegisterModule("R_LightningBeams", r_lightningbeams_start, r_lightningbeams_shutdown, r_lightningbeams_newmap); + R_RegisterModule("R_LightningBeams", r_lightningbeams_start, r_lightningbeams_shutdown, r_lightningbeams_newmap, NULL, NULL); } void R_CalcLightningBeamPolygonVertex3f(float *v, const float *start, const float *end, const float *offset) diff --git a/r_modules.c b/r_modules.c index 8021ade7..541ef043 100644 --- a/r_modules.c +++ b/r_modules.c @@ -10,6 +10,8 @@ typedef struct rendermodule_s void(*start)(void); void(*shutdown)(void); void(*newmap)(void); + void(*devicelost)(void); + void(*devicerestored)(void); } rendermodule_t; @@ -20,7 +22,7 @@ void R_Modules_Init(void) Cmd_AddCommand("r_restart", R_Modules_Restart, "restarts renderer"); } -void R_RegisterModule(char *name, void(*start)(void), void(*shutdown)(void), void(*newmap)(void)) +void R_RegisterModule(char *name, void(*start)(void), void(*shutdown)(void), void(*newmap)(void), void(*devicelost)(void), void(*devicerestored)(void)) { int i; for (i = 0;i < MAXRENDERMODULES;i++) @@ -40,6 +42,8 @@ void R_RegisterModule(char *name, void(*start)(void), void(*shutdown)(void), voi rendermodule[i].start = start; rendermodule[i].shutdown = shutdown; rendermodule[i].newmap = newmap; + rendermodule[i].devicelost = devicelost; + rendermodule[i].devicerestored = devicerestored; } void R_Modules_Start(void) @@ -97,3 +101,34 @@ void R_Modules_NewMap(void) R_SkinFrame_Purge(); } +void R_Modules_DeviceLost(void) +{ + int i; + for (i = 0;i < MAXRENDERMODULES;i++) + { + if (rendermodule[i].name == NULL) + continue; + if (!rendermodule[i].active) + continue; + if (!rendermodule[i].devicelost) + continue; + rendermodule[i].devicelost(); + } +} + + +void R_Modules_DeviceRestored(void) +{ + int i; + for (i = 0;i < MAXRENDERMODULES;i++) + { + if (rendermodule[i].name == NULL) + continue; + if (!rendermodule[i].active) + continue; + if (!rendermodule[i].devicerestored) + continue; + rendermodule[i].devicerestored(); + } +} + diff --git a/r_modules.h b/r_modules.h index 6ff74efc..9316515c 100644 --- a/r_modules.h +++ b/r_modules.h @@ -3,11 +3,13 @@ #define R_MODULES_H void R_Modules_Init(void); -void R_RegisterModule(char *name, void(*start)(void), void(*shutdown)(void), void(*newmap)(void)); +void R_RegisterModule(char *name, void(*start)(void), void(*shutdown)(void), void(*newmap)(void), void(*devicelost)(void), void(*devicerestored)(void)); void R_Modules_Start(void); void R_Modules_Shutdown(void); void R_Modules_NewMap(void); void R_Modules_Restart(void); +void R_Modules_DeviceLost(void); +void R_Modules_DeviceRestored(void); #endif diff --git a/r_shadow.c b/r_shadow.c index 1363733c..d778e789 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -761,7 +761,7 @@ void R_Shadow_Init(void) r_shadow_buffer_surfacesides = NULL; r_shadow_buffer_shadowtrispvs = NULL; r_shadow_buffer_lighttrispvs = NULL; - R_RegisterModule("R_Shadow", r_shadow_start, r_shadow_shutdown, r_shadow_newmap); + R_RegisterModule("R_Shadow", r_shadow_start, r_shadow_shutdown, r_shadow_newmap, NULL, NULL); } matrix4x4_t matrix_attenuationxyz = diff --git a/r_sky.c b/r_sky.c index e49ab578..388316ac 100644 --- a/r_sky.c +++ b/r_sky.c @@ -454,6 +454,6 @@ void R_Sky_Init(void) Cvar_RegisterVariable (&r_skyscroll2); memset(&skyboxskinframe, 0, sizeof(skyboxskinframe)); skyname[0] = 0; - R_RegisterModule("R_Sky", r_sky_start, r_sky_shutdown, r_sky_newmap); + R_RegisterModule("R_Sky", r_sky_start, r_sky_shutdown, r_sky_newmap, NULL, NULL); } diff --git a/sbar.c b/sbar.c index 8b722295..d062a86a 100644 --- a/sbar.c +++ b/sbar.c @@ -407,7 +407,7 @@ void Sbar_Init (void) Cvar_RegisterVariable(&sbar_flagstatus_pos); // this cvar makes no sense in other games } - R_RegisterModule("sbar", sbar_start, sbar_shutdown, sbar_newmap); + R_RegisterModule("sbar", sbar_start, sbar_shutdown, sbar_newmap, NULL, NULL); } diff --git a/vid_sdl.c b/vid_sdl.c index a00029bf..4d9153b4 100644 --- a/vid_sdl.c +++ b/vid_sdl.c @@ -488,7 +488,7 @@ void VID_Init (void) //Cvar_RegisterVariable(&joy_sensitivityroll); #ifdef SDL_R_RESTART - R_RegisterModule("SDL", sdl_start, sdl_shutdown, sdl_newmap); + R_RegisterModule("SDL", sdl_start, sdl_shutdown, sdl_newmap, NULL, NULL); #endif if (SDL_Init(SDL_INIT_VIDEO) < 0)