diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-04-19 13:03:02 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-04-19 13:05:17 +0300 |
commit | b352d2705d1f4849022aa3d93d0d1a8881862d7b (patch) | |
tree | a11785c4d2cc5fa677a0fc1e884194aa2d303727 /source/blender/depsgraph/intern | |
parent | caa7101df545bf5f3827fd26216b7e6d83e2f452 (diff) |
Depsgraph: Fix crash with copy-on-write enabled
Was caused by ec0756af6c7, once again, we can't pass view layer,
need to pass index.
The sad part is that currently we don't have quick way to look up
view layer by index. Can do similar thing as we do for bones and
bases.
Diffstat (limited to 'source/blender/depsgraph/intern')
3 files changed, 8 insertions, 5 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index af321cb70e8..2e251c84fda 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -526,14 +526,16 @@ void DepsgraphNodeBuilder::build_object_flags( if (base_index == -1) { return; } - /* TODO(sergey): Is this really best component to be used? */ + Scene *scene_cow = get_cow_datablock(scene_); Object *object_cow = get_cow_datablock(object); const bool is_from_set = (linked_state == DEG_ID_LINKED_VIA_SET); + /* TODO(sergey): Is this really best component to be used? */ add_operation_node(&object->id, DEG_NODE_TYPE_LAYER_COLLECTIONS, function_bind(BKE_object_eval_flush_base_flags, _1, - view_layer_, + scene_cow, + view_layer_index_, object_cow, base_index, is_from_set), DEG_OPCODE_OBJECT_BASE_FLAGS); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index 757cacc6050..0180aa3b734 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -234,6 +234,7 @@ protected: /* State which demotes currently built entities. */ Scene *scene_; ViewLayer *view_layer_; + int view_layer_index_; GHash *cow_id_hash_; BuilderMap built_map_; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc index 390619aeeaa..750b0054ee5 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc @@ -70,6 +70,8 @@ void DepsgraphNodeBuilder::build_view_layer( ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state) { + view_layer_index_ = BLI_findindex(&scene->view_layers, view_layer); + BLI_assert(view_layer_index_ != -1); /* Scene ID block. */ add_id_node(&scene->id); /* Time source. */ @@ -134,14 +136,12 @@ void DepsgraphNodeBuilder::build_view_layer( build_movieclip(clip); } /* Collections. */ - int view_layer_index = BLI_findindex(&scene->view_layers, view_layer); - BLI_assert(view_layer_index != -1); add_operation_node(&scene->id, DEG_NODE_TYPE_LAYER_COLLECTIONS, function_bind(BKE_layer_eval_view_layer_indexed, _1, &scene_cow->id, - view_layer_index), + view_layer_index_), DEG_OPCODE_VIEW_LAYER_EVAL); /* Parameters evaluation for scene relations mainly. */ add_operation_node(&scene->id, |