diff --git a/include/mod_internal.h b/include/mod_internal.h index f4e3f9f4b..434894bc3 100644 --- a/include/mod_internal.h +++ b/include/mod_internal.h @@ -1,6 +1,7 @@ #ifndef __mod_internal_h #define __mod_internal_h +#include "QF/iqm.h" #include "QF/model.h" #include "QF/skin.h" #include "QF/plugin/vid_render.h" @@ -51,6 +52,7 @@ void glsl_Mod_SpriteLoadTexture (mspriteframe_t *pspriteframe, int framenum); void sw_Mod_SpriteLoadTexture (mspriteframe_t *pspriteframe, int framenum); void Mod_LoadIQM (model_t *mod, void *buffer); +void Mod_FreeIQM (iqm_t *iqm); void Mod_LoadAliasModel (model_t *mod, void *buffer, cache_allocator_t allocator); void Mod_LoadSpriteModel (model_t *mod, void *buffer); diff --git a/libs/models/iqm/glsl_model_iqm.c b/libs/models/iqm/glsl_model_iqm.c index 0f68f4b99..5e1a26030 100644 --- a/libs/models/iqm/glsl_model_iqm.c +++ b/libs/models/iqm/glsl_model_iqm.c @@ -86,20 +86,7 @@ glsl_iqm_clear (model_t *mod) GLSL_ReleaseTexture (glsl->normmaps[i]); } free (glsl); - free (iqm->text); - if (iqm->vertices) - free (iqm->vertices); - free (iqm->vertexarrays); - if (iqm->elements) - free (iqm->elements); - free (iqm->meshes); - free (iqm->joints); - free (iqm->baseframe); - free (iqm->inverse_baseframe); - free (iqm->anims); - free (iqm->frames[0]); - free (iqm->frames); - free (iqm); + Mod_FreeIQM (iqm); } static void diff --git a/libs/models/iqm/model_iqm.c b/libs/models/iqm/model_iqm.c index 407e89594..f4ff29d35 100644 --- a/libs/models/iqm/model_iqm.c +++ b/libs/models/iqm/model_iqm.c @@ -523,3 +523,22 @@ Mod_LoadIQM (model_t *mod, void *buffer) Sys_Error ("%s: error loading anims", loadname); m_funcs->Mod_IQMFinish (mod); } + +void +Mod_FreeIQM (iqm_t *iqm) +{ + free (iqm->text); + if (iqm->vertices) + free (iqm->vertices); + free (iqm->vertexarrays); + if (iqm->elements) + free (iqm->elements); + free (iqm->meshes); + free (iqm->joints); + free (iqm->baseframe); + free (iqm->inverse_baseframe); + free (iqm->anims); + free (iqm->frames[0]); + free (iqm->frames); + free (iqm); +}