From ba58b9d2af5bb49ea9a3511fae18ba4d5780105b Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 24 May 2019 10:58:09 +0200 Subject: Depsgraph: Fixes for render pipeline building - Need to assign current scene in the builder: it is used to route relations for object's customdata. - Tweak relation from scene to object for the customdaat: this didn't work before because the render pipeline scene has no view layer component. Fixes T65044: Crash when Rendering (F12) --- source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc | 1 + source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 2 +- .../blender/depsgraph/intern/builder/deg_builder_relations_scene.cc | 1 + .../depsgraph/intern/builder/deg_builder_relations_view_layer.cc | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) (limited to 'source') diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc index 4d2fe48e974..b092799e692 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc @@ -29,6 +29,7 @@ namespace DEG { void DepsgraphNodeBuilder::build_scene_render(Scene *scene) { + scene_ = scene; const bool build_compositor = (scene->r.scemode & R_DOCOMP); IDNode *id_node = add_id_node(&scene->id); id_node->linked_state = DEG_ID_LINKED_DIRECTLY; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index dcdd4e5cefb..54d5223497e 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1858,7 +1858,7 @@ void DepsgraphRelationBuilder::build_object_data_geometry(Object *object) /* Special case: modifiers evaluation queries scene for various things like * data mask to be used. We add relation here to ensure object is never * evaluated prior to Scene's CoW is ready. */ - OperationKey scene_key(&scene_->id, NodeType::LAYER_COLLECTIONS, OperationCode::VIEW_LAYER_EVAL); + OperationKey scene_key(&scene_->id, NodeType::PARAMETERS, OperationCode::SCENE_EVAL); Relation *rel = add_relation(scene_key, obdata_ubereval_key, "CoW Relation"); rel->flag |= RELATION_FLAG_NO_FLUSH; /* Modifiers */ diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc index beada644f71..26bb1bd3d2a 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc @@ -29,6 +29,7 @@ namespace DEG { void DepsgraphRelationBuilder::build_scene_render(Scene *scene) { + scene_ = scene; const bool build_compositor = (scene->r.scemode & R_DOCOMP); build_scene_parameters(scene); if (build_compositor) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc index 8f705fcaae5..b832473bde9 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc @@ -127,6 +127,11 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene, ViewLayer *view_la /* Scene parameters, compositor and such. */ build_scene_compositor(scene); build_scene_parameters(scene); + /* Make final scene evaluation dependent on view layer evaluation. */ + OperationKey scene_view_layer_key( + &scene->id, NodeType::LAYER_COLLECTIONS, OperationCode::VIEW_LAYER_EVAL); + OperationKey scene_eval_key(&scene->id, NodeType::PARAMETERS, OperationCode::SCENE_EVAL); + add_relation(scene_view_layer_key, scene_eval_key, "View Layer -> Scene Eval"); /* Build all set scenes. */ if (scene->set != NULL) { ViewLayer *set_view_layer = BKE_view_layer_default_render(scene->set); -- cgit v1.2.3