From 9e4d667c2cfd4a81f9a69628b69facd8fd4e0a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 4 Jul 2018 11:21:31 +0200 Subject: SoftBody: refactored sbFree() This prevents having to wrap each call to sbFree() in an if(ob->soft) condition and assign ob->soft = NULL after calling. Furthermore, passing `Object *` allows us to change freeing behaviour depending on whether the object is an evaluated copy or an original (not done in this commit yet). --- source/blender/blenkernel/BKE_softbody.h | 2 +- source/blender/blenkernel/intern/object.c | 10 ++-------- source/blender/blenkernel/intern/softbody.c | 9 ++++++++- 3 files changed, 11 insertions(+), 10 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h index ff9d079c8e1..b173c995727 100644 --- a/source/blender/blenkernel/BKE_softbody.h +++ b/source/blender/blenkernel/BKE_softbody.h @@ -54,7 +54,7 @@ typedef struct BodyPoint { extern struct SoftBody *sbNew(struct Scene *scene); /* frees internal data and softbody itself */ -extern void sbFree(struct SoftBody *sb); +extern void sbFree(struct Object *ob); /* frees simulation data to reset simulation */ extern void sbFreeSimulation(struct SoftBody *sb); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 09e1ca62b92..3f5464156c5 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -165,10 +165,7 @@ void BKE_object_free_particlesystems(Object *ob) void BKE_object_free_softbody(Object *ob) { - if (ob->soft) { - sbFree(ob->soft); - ob->soft = NULL; - } + sbFree(ob); } void BKE_object_free_curve_cache(Object *ob) @@ -452,10 +449,7 @@ void BKE_object_free(Object *ob) BKE_rigidbody_free_object(ob, NULL); BKE_rigidbody_free_constraint(ob); - if (ob->soft) { - sbFree(ob->soft); - ob->soft = NULL; - } + sbFree(ob); for (ObjectEngineData *oed = ob->drawdata.first; oed; oed = oed->next) { if (oed->free != NULL) { diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index a61b71f50eb..4960714b47c 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -3287,14 +3287,21 @@ SoftBody *sbNew(Scene *scene) } /* frees all */ -void sbFree(SoftBody *sb) +void sbFree(Object *ob) { + SoftBody *sb = ob->soft; + if (sb == NULL) { + return; + } + free_softbody_intern(sb); BKE_ptcache_free_list(&sb->ptcaches); sb->pointcache = NULL; if (sb->effector_weights) MEM_freeN(sb->effector_weights); MEM_freeN(sb); + + ob->soft = NULL; } void sbFreeSimulation(SoftBody *sb) -- cgit v1.2.3