[Bf-blender-cvs] [eb45c12] fracture_modifier: dynamic fracture, fix for passive shards... dynamic cache was not used at all for it

Martin Felke noreply at git.blender.org
Thu Oct 13 20:11:11 CEST 2016


Commit: eb45c12ef09af4898106967b7fe396ae17057354
Author: Martin Felke
Date:   Thu Oct 13 20:10:52 2016 +0200
Branches: fracture_modifier
https://developer.blender.org/rBeb45c12ef09af4898106967b7fe396ae17057354

dynamic fracture, fix for passive shards... dynamic cache was not used at all for it

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

M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/rigidbody.c

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

diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 7453f39..ede2ed2 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -1320,9 +1320,9 @@ static int  ptcache_rigidbody_write(int index, void *rb_v, void **data, int cfra
 	ob = rbw->objects[rbw->cache_offset_map[index]];
 	fmd = (FractureModifierData*)modifiers_findByType(ob, eModifierType_Fracture);
 
-	if (rbo && rbo->type == RBO_TYPE_ACTIVE && rbo->physics_object)
+	if (rbo && rbo->physics_object)
 	{
-		if (!fmd || fmd->fracture_mode != MOD_FRACTURE_DYNAMIC)
+		if ((!fmd || fmd->fracture_mode != MOD_FRACTURE_DYNAMIC) && rbo->type == RBO_TYPE_ACTIVE)
 		{
 
 #ifdef WITH_BULLET
@@ -1389,7 +1389,7 @@ static void ptcache_rigidbody_read(int index, void *rb_v, void **data, float cfr
 
 	ob = rbw->objects[rbw->cache_offset_map[index]];
 	fmd = (FractureModifierData*)modifiers_findByType(ob, eModifierType_Fracture);
-	if (!fmd || fmd->fracture_mode != MOD_FRACTURE_DYNAMIC)
+	if (!fmd || (fmd && fmd->fracture_mode != MOD_FRACTURE_DYNAMIC))
 	{
 		if (rbo && rbo->type == RBO_TYPE_ACTIVE) {
 			if (old_data) {
@@ -1404,7 +1404,7 @@ static void ptcache_rigidbody_read(int index, void *rb_v, void **data, float cfr
 	}
 	else if (fmd && fmd->fracture_mode == MOD_FRACTURE_DYNAMIC)
 	{
-		if (rbo && rbo->type == RBO_TYPE_ACTIVE)
+		if (rbo /*&& rbo->type == RBO_TYPE_ACTIVE*/)
 		{
 			//damn, slow listbase based lookup
 			//TODO, need to speed this up.... array, hash ?
@@ -1455,7 +1455,7 @@ static void ptcache_rigidbody_interpolate(int index, void *rb_v, void **data, fl
 	ob = rbw->objects[rbw->cache_offset_map[index]];
 	fmd = (FractureModifierData*)modifiers_findByType(ob, eModifierType_Fracture);
 
-	if (rbo->type == RBO_TYPE_ACTIVE) {
+	if (rbo->type == RBO_TYPE_ACTIVE || (fmd && fmd->fracture_mode == MOD_FRACTURE_DYNAMIC)) {
 
 		copy_v3_v3(keys[1].co, rbo->pos);
 		copy_qt_qt(keys[1].rot, rbo->orn);
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 7bb4258..60ee9c0 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4127,7 +4127,9 @@ static bool do_sync_modifier(ModifierData *md, Object *ob, RigidBodyWorld *rbw,
 					BKE_rigidbody_update_cell(mi, ob, rbo->pos, rbo->orn, fmd, (int)ctime);
 				}
 #endif
-				BKE_rigidbody_update_cell(mi, ob, rbo->pos, rbo->orn, fmd, (int)ctime);
+				if (rbo->type == RBO_TYPE_ACTIVE || rbo->flag & RBO_FLAG_KINEMATIC) {
+					BKE_rigidbody_update_cell(mi, ob, rbo->pos, rbo->orn, fmd, (int)ctime);
+				}
 			}
 
 			copy_m4_m4(fmd->passive_parent_mat, ob->obmat);




More information about the Bf-blender-cvs mailing list