diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-25 13:44:39 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-25 13:52:56 +0400 |
commit | f2309ba57943eb7e5a06119b6d45d9ba3b664c8b (patch) | |
tree | 44e32047cd67f914ee5d848dd85fba08d54a1d8a /source/blender/blenkernel/intern/scene.c | |
parent | 3ae641eb020ea61a595840eee8cbcc9f7ee36043 (diff) |
Fix T38824: curve which is constrained on a hidden layer causes cycles crash
Issue was caused by cycles setting scene frame which will update scene for
all the layers (not just visible ones) which confuses depsgraph making
objects which are needed as dependency are not really evaluated.
Made it so setting frame via scene.frame_set() which check whether update
need to be flushed to an invisible objects and do this if so.
Not ideal solution but seems to be safest at this point.
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 09bfdbb2d95..da2eda0fbee 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1613,6 +1613,11 @@ void BKE_scene_update_tagged(EvaluationContext *eval_ctx, Main *bmain, Scene *sc /* applies changes right away, does all sets too */ void BKE_scene_update_for_newframe(EvaluationContext *eval_ctx, Main *bmain, Scene *sce, unsigned int lay) { + BKE_scene_update_for_newframe_ex(eval_ctx, bmain, sce, lay, false); +} + +void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain, Scene *sce, unsigned int lay, bool do_invisible_flush) +{ float ctime = BKE_scene_frame_get(sce); Scene *sce_iter; #ifdef DETAILED_ANALYSIS_OUTPUT @@ -1648,7 +1653,7 @@ void BKE_scene_update_for_newframe(EvaluationContext *eval_ctx, Main *bmain, Sce /* Following 2 functions are recursive * so don't call within 'scene_update_tagged_recursive' */ - DAG_scene_update_flags(bmain, sce, lay, TRUE); // only stuff that moves or needs display still + DAG_scene_update_flags(bmain, sce, lay, true, do_invisible_flush); // only stuff that moves or needs display still BKE_mask_evaluate_all_masks(bmain, ctime, true); |