From 930e09a2ea12275cf2e04577a170a2be342db045 Mon Sep 17 00:00:00 2001 From: rodri Date: Wed, 3 Apr 2024 15:43:46 +0000 Subject: scene: implement full cleanup procedures. --- graphics.h | 1 + scene.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/graphics.h b/graphics.h index b523c2b..033dcbe 100644 --- a/graphics.h +++ b/graphics.h @@ -266,6 +266,7 @@ Entity *newentity(Model*); void delentity(Entity*); Scene *newscene(char*); void delscene(Scene*); +void clearscene(Scene*); /* vertex */ void addvattr(Vertex*, char*, int, void*); diff --git a/scene.c b/scene.c index 2d74451..6abae09 100644 --- a/scene.c +++ b/scene.c @@ -117,6 +117,14 @@ newmodel(void) void delmodel(Model *m) { + if(m->obj != nil) + objfree(m->obj); + if(m->tex != nil) + freememimage(m->tex); + if(m->nor != nil) + freememimage(m->nor); + if(m->nelems > 0) + free(m->elems); free(m); } @@ -138,7 +146,7 @@ newentity(Model *m) void delentity(Entity *e) { - /* TODO free model */ + delmodel(e->mdl); free(e); } @@ -168,7 +176,18 @@ newscene(char *name) void delscene(Scene *s) { - /* TODO free ents */ + clearscene(s); free(s->name); free(s); } + +void +clearscene(Scene *s) +{ + Entity *e; + + for(e = s->ents.next; e != &s->ents; e = e->next){ + delentity(e); + s->nents--; + } +} -- cgit v1.2.3