Browse Source

ref_soft: Flush caches and clear textures on newmap correctly

pull/2/head
mittorn 5 years ago
parent
commit
513381a322
  1. 4
      r_context.c
  2. 2
      r_local.h
  3. 2
      r_main.c
  4. 2
      r_misc.c
  5. 17
      r_surf.c

4
r_context.c

@ -283,8 +283,8 @@ void Mod_BrushUnloadTextures( model_t *mod ) @@ -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
}
}

2
r_local.h

@ -1269,7 +1269,7 @@ void R_ScanEdges (void); @@ -1269,7 +1269,7 @@ void R_ScanEdges (void);
//
// r_surf.c
//
void D_FlushCaches (void);
void D_FlushCaches( qboolean newmap );
//
// r_draw.c

2
r_main.c

@ -1767,6 +1767,8 @@ void R_NewMap (void) @@ -1767,6 +1767,8 @@ void R_NewMap (void)
{
r_viewcluster = -1;
D_FlushCaches( true );
r_cnumsurfs = sw_maxsurfs->value;
if (r_cnumsurfs <= MINSURFACES)

2
r_misc.c

@ -324,7 +324,7 @@ void R_SetupFrameQ (void) @@ -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++;

17
r_surf.c

@ -507,7 +507,7 @@ void R_InitCaches (void) @@ -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) @@ -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;

Loading…
Cancel
Save