[Bf-blender-cvs] [27441c75573] master: Fix T64710: Rigid body stops simulating when an object is selected

Sergey Sharybin noreply at git.blender.org
Wed Jun 12 12:12:40 CEST 2019


Commit: 27441c75573874c91a4fb71da993e7c7fb306a2c
Author: Sergey Sharybin
Date:   Wed Jun 12 12:11:49 2019 +0200
Branches: master
https://developer.blender.org/rB27441c75573874c91a4fb71da993e7c7fb306a2c

Fix T64710: Rigid body stops simulating when an object is selected

Need to preserve last evaluated time through copy-on-write process.

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

M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc

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

diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 04d069af96d..be78eee91cc 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -63,6 +63,7 @@ extern "C" {
 #include "DNA_sound_types.h"
 #include "DNA_object_types.h"
 #include "DNA_particle_types.h"
+#include "DNA_rigidbody_types.h"
 
 #include "DRW_engine.h"
 
@@ -1010,6 +1011,7 @@ class SceneBackup {
   void *playback_handle;
   void *sound_scrub_handle;
   void *speaker_handles;
+  float rigidbody_last_time;
 
   SequencerBackup sequencer_backup;
 };
@@ -1025,6 +1027,7 @@ void SceneBackup::reset()
   playback_handle = NULL;
   sound_scrub_handle = NULL;
   speaker_handles = NULL;
+  rigidbody_last_time = -1;
 }
 
 void SceneBackup::init_from_scene(Scene *scene)
@@ -1034,6 +1037,10 @@ void SceneBackup::init_from_scene(Scene *scene)
   sound_scrub_handle = scene->sound_scrub_handle;
   speaker_handles = scene->speaker_handles;
 
+  if (scene->rigidbody_world != NULL) {
+    rigidbody_last_time = scene->rigidbody_world->ltime;
+  }
+
   /* Clear pointers stored in the scene, so they are not freed when copied-on-written datablock
    * is freed for re-allocation. */
   scene->sound_scene = NULL;
@@ -1051,6 +1058,10 @@ void SceneBackup::restore_to_scene(Scene *scene)
   scene->sound_scrub_handle = sound_scrub_handle;
   scene->speaker_handles = speaker_handles;
 
+  if (scene->rigidbody_world != NULL) {
+    scene->rigidbody_world->ltime = rigidbody_last_time;
+  }
+
   sequencer_backup.restore_to_scene(scene);
 
   reset();



More information about the Bf-blender-cvs mailing list