ref: properly handle unloading sprites that aren't loaded completely

This commit is contained in:
Alibek Omarov 2025-01-22 19:20:20 +03:00
parent 719093c10b
commit b554d7e215
2 changed files with 42 additions and 44 deletions

View file

@ -249,32 +249,31 @@ release sprite model and frames
*/ */
void Mod_SpriteUnloadTextures( void *data ) void Mod_SpriteUnloadTextures( void *data )
{ {
msprite_t *psprite; msprite_t *psprite = data;
mspritegroup_t *pspritegroup; int i;
mspriteframe_t *pspriteframe;
int i, j;
psprite = data; if( !data )
return;
if( psprite )
{
// release all textures // release all textures
for( i = 0; i < psprite->numframes; i++ ) for( i = 0; i < psprite->numframes; i++ )
{ {
if( !psprite->frames[i].frameptr )
continue;
if( psprite->frames[i].type == SPR_SINGLE ) if( psprite->frames[i].type == SPR_SINGLE )
{ {
pspriteframe = psprite->frames[i].frameptr; GL_FreeTexture( psprite->frames[i].frameptr->gl_texturenum );
GL_FreeTexture( pspriteframe->gl_texturenum );
} }
else else
{ {
pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr;
int j;
for( j = 0; j < pspritegroup->numframes; j++ ) for( j = 0; j < pspritegroup->numframes; j++ )
{ {
pspriteframe = pspritegroup->frames[i]; if( pspritegroup->frames[j] )
GL_FreeTexture( pspriteframe->gl_texturenum ); GL_FreeTexture( pspritegroup->frames[j]->gl_texturenum );
}
} }
} }
} }

View file

@ -237,32 +237,31 @@ release sprite model and frames
*/ */
void Mod_SpriteUnloadTextures( void *data ) void Mod_SpriteUnloadTextures( void *data )
{ {
msprite_t *psprite; msprite_t *psprite = data;
mspritegroup_t *pspritegroup; int i;
mspriteframe_t *pspriteframe;
int i, j;
psprite = data; if( !data )
return;
if( psprite )
{
// release all textures // release all textures
for( i = 0; i < psprite->numframes; i++ ) for( i = 0; i < psprite->numframes; i++ )
{ {
if( !psprite->frames[i].frameptr )
continue;
if( psprite->frames[i].type == SPR_SINGLE ) if( psprite->frames[i].type == SPR_SINGLE )
{ {
pspriteframe = psprite->frames[i].frameptr; GL_FreeTexture( psprite->frames[i].frameptr->gl_texturenum );
GL_FreeTexture( pspriteframe->gl_texturenum );
} }
else else
{ {
pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr;
int j;
for( j = 0; j < pspritegroup->numframes; j++ ) for( j = 0; j < pspritegroup->numframes; j++ )
{ {
pspriteframe = pspritegroup->frames[i]; if( pspritegroup->frames[j] )
GL_FreeTexture( pspriteframe->gl_texturenum ); GL_FreeTexture( pspritegroup->frames[j]->gl_texturenum );
}
} }
} }
} }