diff --git a/r_context.c b/r_context.c index 9f71afae..2f2a9693 100644 --- a/r_context.c +++ b/r_context.c @@ -283,8 +283,8 @@ void Mod_BrushUnloadTextures( model_t *mod ) if( !tx || tx->gl_texturenum == tr.defaultTexture ) continue; // free slot - //GL_FreeTexture( tx->gl_texturenum ); // main texture - //GL_FreeTexture( tx->fb_texturenum ); // luma texture + GL_FreeTexture( tx->gl_texturenum ); // main texture + GL_FreeTexture( tx->fb_texturenum ); // luma texture } } diff --git a/r_local.h b/r_local.h index b560b39a..6a670cad 100644 --- a/r_local.h +++ b/r_local.h @@ -1269,7 +1269,7 @@ void R_ScanEdges (void); // // r_surf.c // -void D_FlushCaches (void); +void D_FlushCaches( qboolean newmap ); // // r_draw.c diff --git a/r_main.c b/r_main.c index 7b0339ec..5ea7cd62 100644 --- a/r_main.c +++ b/r_main.c @@ -1767,6 +1767,8 @@ void R_NewMap (void) { r_viewcluster = -1; + D_FlushCaches( true ); + r_cnumsurfs = sw_maxsurfs->value; if (r_cnumsurfs <= MINSURFACES) diff --git a/r_misc.c b/r_misc.c index 931c532a..d9112e46 100644 --- a/r_misc.c +++ b/r_misc.c @@ -324,7 +324,7 @@ void R_SetupFrameQ (void) if (r_fullbright->flags & FCVAR_CHANGED) { r_fullbright->flags &= ~FCVAR_CHANGED; - D_FlushCaches (); // so all lighting changes + D_FlushCaches( false ); // so all lighting changes } r_framecount++; diff --git a/r_surf.c b/r_surf.c index 19a7edda..9a12c409 100644 --- a/r_surf.c +++ b/r_surf.c @@ -507,7 +507,7 @@ void R_InitCaches (void) sc_size = size; if( sc_base ) { - D_FlushCaches(); + D_FlushCaches( false ); Mem_Free( sc_base ); } sc_base = (surfcache_t *)Mem_Calloc(r_temppool,size); @@ -524,17 +524,18 @@ void R_InitCaches (void) D_FlushCaches ================== */ -void D_FlushCaches (void) +void D_FlushCaches( qboolean newmap ) { surfcache_t *c; - if (!sc_base) - return; - - for (c = sc_base ; c ; c = c->next) + // if newmap, surfaces already freed + if( !newmap ) { - if (c->owner) - *c->owner = NULL; + for(c = sc_base ; c ; c = c->next ) + { + if ( c->owner ) + *c->owner = NULL; + } } sc_rover = sc_base;