[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