From b554d7e21513a467b6eaacbe08ca5929329e25a2 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 22 Jan 2025 19:20:20 +0300 Subject: [PATCH] ref: properly handle unloading sprites that aren't loaded completely --- ref/gl/gl_sprite.c | 43 +++++++++++++++++++++---------------------- ref/soft/r_sprite.c | 43 +++++++++++++++++++++---------------------- 2 files changed, 42 insertions(+), 44 deletions(-) diff --git a/ref/gl/gl_sprite.c b/ref/gl/gl_sprite.c index 1c68062e..fd7fa7e1 100644 --- a/ref/gl/gl_sprite.c +++ b/ref/gl/gl_sprite.c @@ -249,32 +249,31 @@ release sprite model and frames */ void Mod_SpriteUnloadTextures( void *data ) { - msprite_t *psprite; - mspritegroup_t *pspritegroup; - mspriteframe_t *pspriteframe; - int i, j; + msprite_t *psprite = data; + int i; - psprite = data; + if( !data ) + return; - if( psprite ) + // release all textures + for( i = 0; i < psprite->numframes; i++ ) { - // release all textures - for( i = 0; i < psprite->numframes; i++ ) - { - if( psprite->frames[i].type == SPR_SINGLE ) - { - pspriteframe = psprite->frames[i].frameptr; - GL_FreeTexture( pspriteframe->gl_texturenum ); - } - else - { - pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; + if( !psprite->frames[i].frameptr ) + continue; - for( j = 0; j < pspritegroup->numframes; j++ ) - { - pspriteframe = pspritegroup->frames[i]; - GL_FreeTexture( pspriteframe->gl_texturenum ); - } + if( psprite->frames[i].type == SPR_SINGLE ) + { + GL_FreeTexture( psprite->frames[i].frameptr->gl_texturenum ); + } + else + { + mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; + int j; + + for( j = 0; j < pspritegroup->numframes; j++ ) + { + if( pspritegroup->frames[j] ) + GL_FreeTexture( pspritegroup->frames[j]->gl_texturenum ); } } } diff --git a/ref/soft/r_sprite.c b/ref/soft/r_sprite.c index 94801bce..3546fd3c 100644 --- a/ref/soft/r_sprite.c +++ b/ref/soft/r_sprite.c @@ -237,32 +237,31 @@ release sprite model and frames */ void Mod_SpriteUnloadTextures( void *data ) { - msprite_t *psprite; - mspritegroup_t *pspritegroup; - mspriteframe_t *pspriteframe; - int i, j; + msprite_t *psprite = data; + int i; - psprite = data; + if( !data ) + return; - if( psprite ) + // release all textures + for( i = 0; i < psprite->numframes; i++ ) { - // release all textures - for( i = 0; i < psprite->numframes; i++ ) - { - if( psprite->frames[i].type == SPR_SINGLE ) - { - pspriteframe = psprite->frames[i].frameptr; - GL_FreeTexture( pspriteframe->gl_texturenum ); - } - else - { - pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; + if( !psprite->frames[i].frameptr ) + continue; - for( j = 0; j < pspritegroup->numframes; j++ ) - { - pspriteframe = pspritegroup->frames[i]; - GL_FreeTexture( pspriteframe->gl_texturenum ); - } + if( psprite->frames[i].type == SPR_SINGLE ) + { + GL_FreeTexture( psprite->frames[i].frameptr->gl_texturenum ); + } + else + { + mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr; + int j; + + for( j = 0; j < pspritegroup->numframes; j++ ) + { + if( pspritegroup->frames[j] ) + GL_FreeTexture( pspritegroup->frames[j]->gl_texturenum ); } } }