[Bf-blender-cvs] [ac06f77d256] temp-fracture-modifier-2.8: proper collection iteration in updateDepsgraph etc + couple of fixes

Martin Felke noreply at git.blender.org
Sat Aug 25 22:03:25 CEST 2018


Commit: ac06f77d256913a2ef8ef7355d46f0af7c7f5eac
Author: Martin Felke
Date:   Sat Aug 25 18:46:40 2018 +0200
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rBac06f77d256913a2ef8ef7355d46f0af7c7f5eac

proper collection iteration in updateDepsgraph etc + couple of fixes

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

M	source/blender/makesrna/intern/rna_rigidbody.c
M	source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index ee790b3eef0..46124a43799 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -294,7 +294,7 @@ static void rna_RigidBodyOb_shape_reset(Main *UNUSED(bmain), Scene *scene, Point
       Object *ob = ptr->id.data;
 
       foreach_shard_flag_shape(ob, rbo->flag, rbo->shape, true);
-      BKE_rigidbody_cache_reset(rbw);
+      BKE_rigidbody_cache_reset(scene);
       if (rbo->shared->physics_shape)
             rbo->flag |= RBO_FLAG_NEEDS_RESHAPE;
 }
@@ -598,11 +598,11 @@ static void rna_RigidBodyOb_force_threshold_set(PointerRNA *ptr, float value)
     foreach_shard_float(ob, value, set_force_threshold);
 }
 
-static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
 {
-	RigidBodyWorld *rbw = (RigidBodyWorld *)ptr->data;
+	//RigidBodyWorld *rbw = (RigidBodyWorld *)ptr->data;
 
-	BKE_rigidbody_cache_reset(rbw);
+	BKE_rigidbody_cache_reset(scene);
 }
 
 static char *rna_RigidBodyWorld_path(PointerRNA *UNUSED(ptr))
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 88ed5486c04..40965636e76 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -32,6 +32,7 @@
 #include <string.h> //for memcpy
 
 #include "MEM_guardedalloc.h"
+#include "BKE_collection.h"
 #include "BKE_fracture.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
@@ -240,37 +241,58 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
 	}
 
 	if (fmd->extra_group) {
-		CollectionObject *go;
-		for (go = fmd->extra_group->gobject.first; go; go = go->next) {
-			if (go->ob)
-			{
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Extra");
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Extra");
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->extra_group, obj)
+		{
+			if (ctx->object != obj) {
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Extra");
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Extra");
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
 	if (fmd->autohide_filter_group) {
-		CollectionObject *go;
-		for (go = fmd->autohide_filter_group->gobject.first; go; go = go->next) {
-			if (go->ob)
-			{
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Autohide Filter");
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Autohide Filter");
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->autohide_filter_group, obj)
+		{
+			if (ctx->object != obj) {
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Autohide Filter");
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Autohide Filter");
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
 	if (fmd->cutter_group) {
-		CollectionObject *go;
-		for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
-			if (go->ob)
-			{
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->cutter_group, obj)
+		{
+			if (ctx->object != obj) {
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Cutter");
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Cutter");
+			}
+		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
+	}
+
+	if (fmd->dm_group) {
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->dm_group, obj)
+		{
+			if (ctx->object != obj) {
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Pack");
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Pack");
+			}
+		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
+	}
 
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_TRANSFORM, "Fracture Modifier Cutter");
-				DEG_add_object_relation(ctx->node, go->ob, DEG_OB_COMP_GEOMETRY, "Fracture Modifier Cutter");
+	if (ctx->scene->rigidbody_world && ctx->scene->rigidbody_world->group) {
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(ctx->scene->rigidbody_world->group, obj)
+		{
+			if (ctx->object != obj) {
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_TRANSFORM, "Fracture Modifier RBW");
+				DEG_add_object_relation(ctx->node, obj, DEG_OB_COMP_GEOMETRY, "Fracture Modifier RBW");
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
 	/* We need own transformation as well. */
@@ -288,40 +310,43 @@ static void foreachObjectLink(
 		walk(userData, ob, &fmd->anim_mesh_ob, IDWALK_CB_NOP);
 
 	if (fmd->extra_group) {
-		CollectionObject *go;
-		for (go = fmd->extra_group->gobject.first; go; go = go->next) {
-			if (go->ob) {
-				walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->extra_group, obj)
+		{
+			if (ob != obj) {
+				walk(userData, ob, &obj, IDWALK_CB_NOP);
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
 	if (fmd->cutter_group) {
-		CollectionObject *go;
-		for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
-			if (go->ob) {
-				walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->cutter_group, obj)
+		{
+			if (ob != obj) {
+				walk(userData, ob, &obj, IDWALK_CB_NOP);
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
 	if (fmd->autohide_filter_group) {
-		CollectionObject *go;
-		for (go = fmd->autohide_filter_group->gobject.first; go; go = go->next) {
-			if (go->ob) {
-				walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->autohide_filter_group, obj)
+		{
+			if (ob != obj) {
+				walk(userData, ob, &obj, IDWALK_CB_NOP);
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 
-	if (fmd->cutter_group) {
-		CollectionObject *go;
-		for (go = fmd->cutter_group->gobject.first; go; go = go->next) {
-			if (go->ob)
-			{
-				walk(userData, ob, &go->ob, IDWALK_CB_NOP);
+	if (fmd->dm_group) {
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(fmd->dm_group, obj)
+		{
+			if (ob != obj) {
+				walk(userData, ob, &obj, IDWALK_CB_NOP);
 			}
 		}
+		FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 	}
 }



More information about the Bf-blender-cvs mailing list