[Bf-blender-cvs] [d84f5595552] blender-v2.79-release: Fix T52374: Changes of rigid body related settings during simulation will break the simulation

Sergej Reich noreply at git.blender.org
Fri Sep 8 12:08:10 CEST 2017


Commit: d84f55955526748a1147d4513252544f9527a3ad
Author: Sergej Reich
Date:   Tue Sep 5 07:12:30 2017 +0200
Branches: blender-v2.79-release
https://developer.blender.org/rBd84f55955526748a1147d4513252544f9527a3ad

Fix T52374: Changes of rigid body related settings during simulation will break the simulation

Revert 9cd6b03, 3edc8c1, b87d10d and do a better fix for T50230.

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

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

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index e8c0cf53d0b..c251e5b5d78 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1600,8 +1600,12 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
 	BKE_ptcache_id_time(&pid, scene, ctime, &startframe, &endframe, NULL);
 	cache = rbw->pointcache;
 
+	if (ctime <= startframe) {
+		rbw->ltime = startframe;
+		return;
+	}
 	/* make sure we don't go out of cache frame range */
-	if (ctime > endframe) {
+	else if (ctime > endframe) {
 		ctime = endframe;
 	}
 
@@ -1615,12 +1619,9 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
 	// RB_TODO deal with interpolated, old and baked results
 	bool can_simulate = (ctime == rbw->ltime + 1) && !(cache->flag & PTCACHE_BAKED);
 
-	if (cache->flag & PTCACHE_OUTDATED || cache->last_exact == 0) {
-		rbw->ltime = cache->startframe;
-	}
-
-	if (BKE_ptcache_read(&pid, ctime, can_simulate)) {
+	if (BKE_ptcache_read(&pid, ctime, can_simulate) == PTCACHE_READ_EXACT) {
 		BKE_ptcache_validate(cache, (int)ctime);
+		rbw->ltime = ctime;
 		return;
 	}



More information about the Bf-blender-cvs mailing list