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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs