2
0
mirror of https://github.com/FWGS/xash3d-fwgs synced 2024-11-07 02:53:54 +01:00

ref_soft: Flush caches and clear textures on newmap correctly

This commit is contained in:
mittorn 2019-03-25 11:59:25 +07:00
parent c36f415793
commit 513381a322
5 changed files with 15 additions and 12 deletions

View File

@ -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
}
}

View File

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

View File

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

View File

@ -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++;

View File

@ -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,18 +524,19 @@ 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)
for(c = sc_base ; c ; c = c->next )
{
if ( c->owner )
*c->owner = NULL;
}
}
sc_rover = sc_base;
sc_base->next = NULL;