[Bf-blender-cvs] [0ad54b5ba34] blender2.8: Depsgraph: Only build collections for current graph scene layer

Sergey Sharybin noreply at git.blender.org
Thu Nov 9 11:43:47 CET 2017


Commit: 0ad54b5ba3464856d72fde990773af950a27e986
Author: Sergey Sharybin
Date:   Thu Nov 9 11:41:50 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB0ad54b5ba3464856d72fde990773af950a27e986

Depsgraph: Only build collections for current graph scene layer

===================================================================

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations_scene_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 4a311cec4bd..d03aaac0f16 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -201,13 +201,11 @@ struct DepsgraphNodeBuilder {
 		int index;
 		LayerCollection *parent;
 	};
-	void build_layer_collection(Scene *scene,
-	                            LayerCollection *layer_collection,
+	void build_layer_collection(LayerCollection *layer_collection,
 	                            LayerCollectionState *state);
-	void build_layer_collections(Scene *scene,
-	                             ListBase *layer_collections,
+	void build_layer_collections(ListBase *layer_collections,
 	                             LayerCollectionState *state);
-	void build_scene_layer_collections(Scene *scene);
+	void build_scene_layer_collections(SceneLayer *scene_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.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
index 660d7fedb52..b3dc293b13b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
@@ -59,14 +59,16 @@ extern "C" {
 
 namespace DEG {
 
-void DepsgraphNodeBuilder::build_layer_collection(Scene *scene,
-                                                  LayerCollection *layer_collection,
-                                                  LayerCollectionState *state)
+void DepsgraphNodeBuilder::build_layer_collection(
+        LayerCollection *layer_collection,
+        LayerCollectionState *state)
 {
 	/* TODO(sergey): This will attempt to create component for each collection.
 	 * Harmless but could be optimized.
 	 */
-	ComponentDepsNode *comp = add_component_node(&scene->id, DEG_NODE_TYPE_LAYER_COLLECTIONS);
+	ComponentDepsNode *comp = add_component_node(
+	        &scene_->id,
+	        DEG_NODE_TYPE_LAYER_COLLECTIONS);
 
 	add_operation_node(comp,
 	                   function_bind(BKE_layer_eval_layer_collection,
@@ -81,47 +83,51 @@ void DepsgraphNodeBuilder::build_layer_collection(Scene *scene,
 	/* Recurs into nested layer collections. */
 	LayerCollection *parent = state->parent;
 	state->parent = layer_collection;
-	build_layer_collections(scene, &layer_collection->layer_collections, state);
+	build_layer_collections(&layer_collection->layer_collections, state);
 	state->parent = parent;
 }
 
-void DepsgraphNodeBuilder::build_layer_collections(Scene *scene,
-                                                   ListBase *layer_collections,
+void DepsgraphNodeBuilder::build_layer_collections(ListBase *layer_collections,
                                                    LayerCollectionState *state)
 {
 	LINKLIST_FOREACH (LayerCollection *, layer_collection, layer_collections) {
-		build_layer_collection(scene, layer_collection, state);
+		build_layer_collection(layer_collection, state);
 	}
 }
 
-void DepsgraphNodeBuilder::build_scene_layer_collections(Scene *scene)
+void DepsgraphNodeBuilder::build_scene_layer_collections(
+        SceneLayer *scene_layer)
 {
 	Scene *scene_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);
+		/* Make sure we've got ID node, so we can get pointer to CoW datablock.
+		 */
+		scene_cow = expand_cow_datablock(scene_);
 	}
 	else {
-		scene_cow = scene;
+		scene_cow = scene_;
 	}
 
 	LayerCollectionState state;
 	state.index = 0;
-	LINKLIST_FOREACH (SceneLayer *, scene_layer, &scene_cow->render_layers) {
-		ComponentDepsNode *comp = add_component_node(&scene->id, DEG_NODE_TYPE_LAYER_COLLECTIONS);
-
-		add_operation_node(comp,
-		                   function_bind(BKE_layer_eval_layer_collection_pre, _1, scene_cow, scene_layer),
-		                   DEG_OPCODE_SCENE_LAYER_INIT,
-		                   scene_layer->name);
-		add_operation_node(comp,
-		                   function_bind(BKE_layer_eval_layer_collection_post, _1, scene_layer),
-		                   DEG_OPCODE_SCENE_LAYER_DONE,
-		                   scene_layer->name);
-
-		state.parent = NULL;
-		build_layer_collections(scene, &scene_layer->layer_collections, &state);
-	}
+	ComponentDepsNode *comp = add_component_node(
+	        &scene_->id,
+	        DEG_NODE_TYPE_LAYER_COLLECTIONS);
+	add_operation_node(comp,
+	                   function_bind(BKE_layer_eval_layer_collection_pre,
+	                                 _1,
+	                                 scene_cow,
+	                                 scene_layer),
+	                   DEG_OPCODE_SCENE_LAYER_INIT,
+	                   scene_layer->name);
+	add_operation_node(comp,
+	                   function_bind(BKE_layer_eval_layer_collection_post,
+	                                 _1,
+	                                 scene_layer),
+	                   DEG_OPCODE_SCENE_LAYER_DONE,
+	                   scene_layer->name);
+	state.parent = NULL;
+	build_layer_collections(&scene_layer->layer_collections, &state);
 }
 
 }  // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc
index 8187adc7d15..1a0ce53d0c8 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc
@@ -141,7 +141,7 @@ void DepsgraphNodeBuilder::build_scene_layer(Scene *scene,
 	}
 
 	/* Collections. */
-	build_scene_layer_collections(scene);
+	build_scene_layer_collections(scene_layer);
 
 	/* Parameters evaluation for scene relations mainly. */
 	add_operation_node(&scene->id,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index e433d3a92e2..e24656ff067 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -247,13 +247,11 @@ struct DepsgraphRelationBuilder
 		OperationKey done_key;
 		OperationKey prev_key;
 	};
-	void build_layer_collection(Scene *scene,
-	                            LayerCollection *layer_collection,
+	void build_layer_collection(LayerCollection *layer_collection,
 	                            LayerCollectionState *state);
-	void build_layer_collections(Scene *scene,
-	                             ListBase *layer_collections,
+	void build_layer_collections(ListBase *layer_collections,
 	                             LayerCollectionState *state);
-	void build_scene_layer_collections(Scene *scene);
+	void build_scene_layer_collections(SceneLayer *scene_layer);
 
 	void build_copy_on_write_relations();
 	void build_copy_on_write_relations(IDDepsNode *id_node);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
index 1e57a98d6f7..0deed3ed4ed 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
@@ -68,11 +68,11 @@ extern "C" {
 
 namespace DEG {
 
-void DepsgraphRelationBuilder::build_layer_collection(Scene *scene,
-                                                      LayerCollection *layer_collection,
-                                                      LayerCollectionState *state)
+void DepsgraphRelationBuilder::build_layer_collection(
+        LayerCollection *layer_collection,
+        LayerCollectionState *state)
 {
-	OperationKey layer_key(&scene->id,
+	OperationKey layer_key(&scene_->id,
 	                       DEG_NODE_TYPE_LAYER_COLLECTIONS,
 	                       DEG_OPCODE_SCENE_LAYER_EVAL,
 	                       layer_collection->scene_collection->name,
@@ -83,45 +83,41 @@ void DepsgraphRelationBuilder::build_layer_collection(Scene *scene,
 	state->prev_key = layer_key;
 
 	/* Recurs into nested layer collections. */
-	build_layer_collections(scene,
-	                        &layer_collection->layer_collections,
-	                        state);
+	build_layer_collections(&layer_collection->layer_collections, state);
 }
 
-void DepsgraphRelationBuilder::build_layer_collections(Scene *scene,
-                                                       ListBase *layer_collections,
-                                                       LayerCollectionState *state)
+void DepsgraphRelationBuilder::build_layer_collections(
+        ListBase *layer_collections,
+        LayerCollectionState *state)
 {
 	LINKLIST_FOREACH (LayerCollection *, layer_collection, layer_collections) {
 		/* Recurs into the layer. */
-		build_layer_collection(scene, layer_collection, state);
+		build_layer_collection(layer_collection, state);
 	}
 }
 
-void DepsgraphRelationBuilder::build_scene_layer_collections(Scene *scene)
+void DepsgraphRelationBuilder::build_scene_layer_collections(
+        SceneLayer *scene_layer)
 {
 	LayerCollectionState state;
 	state.index = 0;
-	LINKLIST_FOREACH (SceneLayer *, scene_layer, &scene->render_layers) {
-		OperationKey init_key(&scene->id,
-		                      DEG_NODE_TYPE_LAYER_COLLECTIONS,
-		                      DEG_OPCODE_SCENE_LAYER_INIT,
-		                      scene_layer->name);
-		OperationKey done_key(&scene->id,
-		                      DEG_NODE_TYPE_LAYER_COLLECTIONS,
-		                      DEG_OPCODE_SCENE_LAYER_DONE,
-		                      scene_layer->name);
-
-		state.init_key = init_key;
-		state.done_key = done_key;
-		state.prev_key = init_key;
-
-		build_layer_collections(scene,
-		                        &scene_layer->layer_collections,
-		                        &state);
-
-		add_relation(state.prev_key, done_key, "Layer collection order");
-	}
+
+	OperationKey init_key(&scene_->id,
+	                      DEG_NODE_TYPE_LAYER_COLLECTIONS,
+	                      DEG_OPCODE_SCENE_LAYER_INIT,
+	                      scene_layer

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list