Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-11-24 12:04:20 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-11-24 12:19:48 +0300
commitc1f690428ccf3e602cbee72308e7f42477d8bf41 (patch)
tree292002aba7ee09693f5ff8ceb7fdba62760e370f /source
parenta5d763a11ee46fff12d53e8cb21b3ab45fa2c64d (diff)
Depsgraph: Create CoW copy of scene early on
Originally this only needed for view collections, but it will be needed for bases really soon as well.
Diffstat (limited to 'source')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc25
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc18
3 files changed, 23 insertions, 22 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 00109eeafcc..84ae993ba17 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -206,7 +206,7 @@ struct DepsgraphNodeBuilder {
LayerCollectionState *state);
void build_layer_collections(ListBase *layer_collections,
LayerCollectionState *state);
- void build_view_layer_collections(ViewLayer *view_layer);
+ void build_view_layer_collections(Scene *scene, ViewLayer *view_layer);
protected:
/* State which never changes, same for the whole builder time. */
Main *bmain_;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
index 71303db54ef..4d4bf2e4ffe 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
@@ -98,24 +98,9 @@ void DepsgraphNodeBuilder::build_layer_collections(ListBase *layer_collections,
}
void DepsgraphNodeBuilder::build_view_layer_collections(
+ Scene *scene,
ViewLayer *view_layer)
{
- Scene *scene_cow;
- ViewLayer *view_layer_cow;
- if (DEG_depsgraph_use_copy_on_write()) {
- /* Make sure we've got ID node, so we can get pointer to CoW datablock.
- */
- scene_cow = expand_cow_datablock(scene_);
- view_layer_cow = (ViewLayer *)BLI_findstring(
- &scene_cow->view_layers,
- view_layer->name,
- offsetof(ViewLayer, name));
- }
- else {
- scene_cow = scene_;
- view_layer_cow = view_layer;
- }
-
LayerCollectionState state;
state.index = 0;
ComponentDepsNode *comp = add_component_node(
@@ -124,16 +109,16 @@ void DepsgraphNodeBuilder::build_view_layer_collections(
add_operation_node(comp,
function_bind(BKE_layer_eval_layer_collection_pre,
_1,
- scene_cow,
- view_layer_cow),
+ scene,
+ view_layer),
DEG_OPCODE_VIEW_LAYER_INIT);
add_operation_node(comp,
function_bind(BKE_layer_eval_layer_collection_post,
_1,
- view_layer_cow),
+ view_layer),
DEG_OPCODE_VIEW_LAYER_DONE);
state.parent = NULL;
- build_layer_collections(&view_layer_cow->layer_collections, &state);
+ build_layer_collections(&view_layer->layer_collections, &state);
}
} // namespace DEG
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 20dc239c6d0..96a7108d153 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
@@ -69,6 +69,22 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene,
ViewLayer *view_layer,
eDepsNode_LinkedState_Type linked_state)
{
+ Scene *scene_cow;
+ ViewLayer *view_layer_cow;
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* Make sure we've got ID node, so we can get pointer to CoW datablock.
+ */
+ scene_cow = expand_cow_datablock(scene);
+ view_layer_cow = (ViewLayer *)BLI_findstring(
+ &scene_cow->view_layers,
+ view_layer->name,
+ offsetof(ViewLayer, name));
+ }
+ else {
+ scene_cow = scene;
+ view_layer_cow = view_layer;
+ }
+
/* scene ID block */
add_id_node(&scene->id);
@@ -141,7 +157,7 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene,
}
/* Collections. */
- build_view_layer_collections(view_layer);
+ build_view_layer_collections(scene_cow, view_layer_cow);
/* Parameters evaluation for scene relations mainly. */
add_operation_node(&scene->id,