Commit: 9e4d667c2cfd4a81f9a69628b69facd8fd4e0a01
Author: Sybren A. Stüvel
Date:   Wed Jul 4 11:21:31 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB9e4d667c2cfd4a81f9a69628b69facd8fd4e0a01

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).

===================================================================

M       source/blender/blenkernel/BKE_softbody.h
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/softbody.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/object/object_modifier.c

===================================================================

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)
diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index 7dc4aa1d1b3..a6c3c86922d 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1050,7 +1050,7 @@ static void copy_attr(Main *bmain, Scene *scene, 
ViewLayer *view_layer, short ev
                                        DEG_relations_tag_update(bmain);
                                }
                                else if (event == 23) {
-                                       if (base->object->soft) 
sbFree(base->object->soft);
+                                       sbFree(base->object);
                                        BKE_object_copy_softbody(base->object, 
ob, 0);
 
                                        if (!modifiers_findByType(base->object, 
eModifierType_Softbody)) {
diff --git a/source/blender/editors/object/object_modifier.c 
b/source/blender/editors/object/object_modifier.c
index 2889f798dd8..31a53bed201 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -293,9 +293,8 @@ static bool object_modifier_remove(Main *bmain, Object *ob, 
ModifierData *md,
        }
        else if (md->type == eModifierType_Softbody) {
                if (ob->soft) {
-                       sbFree(ob->soft);
-                       ob->soft = NULL;
-                       ob->softflag = 0;
+                       sbFree(ob);
+                       ob->softflag = 0;  /* TODO(Sybren): this should 
probably be moved into sbFree() */
                }
        }
        else if (md->type == eModifierType_Collision) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to