diff options
5 files changed, 16 insertions, 8 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 2f352a880ca..1d28d7f52c7 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -248,7 +248,7 @@ void BKE_object_data_select_update( void BKE_object_eval_flush_base_flags( struct Depsgraph *depsgraph, - struct ViewLayer *view_layer, + struct Scene *scene, const int view_layer_index, struct Object *object, int base_index, const bool is_from_set); diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index d043fcc9d1c..c8612c1d55c 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -445,9 +445,14 @@ void BKE_object_data_select_update(Depsgraph *UNUSED(depsgraph), } void BKE_object_eval_flush_base_flags(Depsgraph *UNUSED(depsgraph), - ViewLayer *view_layer, - Object *object, int base_index, bool is_from_set) + Scene *scene, const int view_layer_index, + Object *object, int base_index, + const bool is_from_set) { + /* TODO(sergey): Avoid list lookup. */ + BLI_assert(view_layer_index >= 0); + ViewLayer *view_layer = BLI_findlink(&scene->view_layers, view_layer_index); + BLI_assert(view_layer != NULL); BLI_assert(view_layer->object_bases_array != NULL); BLI_assert(base_index >= 0); BLI_assert(base_index < MEM_allocN_len(view_layer->object_bases_array) / sizeof(Base *)); 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, |