[Bf-blender-cvs] [c1f690428cc] blender2.8: Depsgraph: Create CoW copy of scene early on
Sergey Sharybin
noreply at git.blender.org
Fri Nov 24 10:45:26 CET 2017
Commit: c1f690428ccf3e602cbee72308e7f42477d8bf41
Author: Sergey Sharybin
Date: Fri Nov 24 10:04:20 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBc1f690428ccf3e602cbee72308e7f42477d8bf41
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.
===================================================================
M source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
M source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
===================================================================
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,
More information about the Bf-blender-cvs
mailing list