[Bf-blender-cvs] [25346c919ae] temp-group-collections: Move group sub-collection evaluation tp DEG

Dalai Felinto noreply at git.blender.org
Wed Nov 1 18:14:47 CET 2017


Commit: 25346c919aea2bec458bf73dfa6bbbe9c7bb18f0
Author: Dalai Felinto
Date:   Mon Oct 30 15:06:10 2017 -0200
Branches: temp-group-collections
https://developer.blender.org/rB25346c919aea2bec458bf73dfa6bbbe9c7bb18f0

Move group sub-collection evaluation tp DEG

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

M	source/blender/blenkernel/intern/layer.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc

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

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index e3653272c6a..f16449c891f 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -2169,43 +2169,17 @@ void BKE_layer_eval_layer_collection(const struct EvaluationContext *eval_ctx,
 		}
 	}
 
-	SceneCollection *scene_collection = layer_collection->scene_collection;
-	switch (scene_collection->type) {
-		case COLLECTION_TYPE_GROUP:
-		{
-			Group *group = scene_collection->group;
-			if (group) {
-				LayerCollection *group_layer_collection;
-				for (group_layer_collection = group->scene_layer->layer_collections.first;
-				     group_layer_collection;
-				     group_layer_collection = group_layer_collection->next)
-				{
-					BLI_assert(group_layer_collection != layer_collection);
-					BKE_layer_eval_layer_collection(eval_ctx, group_layer_collection, layer_collection);
-				}
-			}
-			break;
+	for (LinkData *link = layer_collection->object_bases.first; link != NULL; link = link->next) {
+		Base *base = link->data;
+
+		if (is_visible) {
+			IDP_MergeGroup(base->collection_properties, layer_collection->properties_evaluated, true);
+			base->flag |= BASE_VISIBLED;
 		}
-		case COLLECTION_TYPE_GROUP_INTERNAL:
-		case COLLECTION_TYPE_NONE:
-		{
-			for (LinkData *link = layer_collection->object_bases.first; link != NULL; link = link->next) {
-				Base *base = link->data;
-
-				if (is_visible) {
-					IDP_MergeGroup(base->collection_properties, layer_collection->properties_evaluated, true);
-					base->flag |= BASE_VISIBLED;
-				}
 
-				if (is_selectable) {
-					base->flag |= BASE_SELECTABLED;
-				}
-			}
-			break;
+		if (is_selectable) {
+			base->flag |= BASE_SELECTABLED;
 		}
-		default:
-			BLI_assert(!"Collection type not fully implemented.");
-			break;
 	}
 }
 
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 27cc7af6656..c9c73449fae 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer.cc
@@ -42,6 +42,7 @@ extern "C" {
 
 #include "BKE_layer.h"
 
+#include "DNA_group_types.h"
 #include "DNA_scene_types.h"
 
 #include "DEG_depsgraph.h"
@@ -77,26 +78,36 @@ void DepsgraphNodeBuilder::build_layer_collection(Scene *scene,
 	                   layer_collection->scene_collection->name,
 	                   state->index);
 	++state->index;
-
-	/* Recurs into nested layer collections. */
 	LayerCollection *parent = state->parent;
-	state->parent = layer_collection;
-	build_layer_collections(scene, &layer_collection->layer_collections, state);
-	state->parent = parent;
 
 	SceneCollection *scene_collection = layer_collection->scene_collection;
 	switch (scene_collection->type) {
 		case COLLECTION_TYPE_GROUP:
-			if (scene_collection->group != NULL) {
+		{
+			Group *group = scene_collection->group;
+			if (group != NULL) {
 				build_group(scene, scene_collection->group);
+				/* Recurs into internal group layer collections. */
+				state->parent = layer_collection;
+				build_layer_collection(scene,
+				                       (LayerCollection *)group->scene_layer->layer_collections.first,
+				                       state);
+				state->parent = parent;
 			}
 			break;
+		}
+		case COLLECTION_TYPE_GROUP_INTERNAL:
 		case COLLECTION_TYPE_NONE:
 			break;
 		default:
 			BLI_assert(!"Collection type not fully implemented!");
 			break;
 	}
+
+	/* Recurs into nested layer collections. */
+	state->parent = layer_collection;
+	build_layer_collections(scene, &layer_collection->layer_collections, state);
+	state->parent = parent;
 }
 
 void DepsgraphNodeBuilder::build_layer_collections(Scene *scene,
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 3dc8547e493..c5825aa2285 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_layer.cc
@@ -91,6 +91,12 @@ void DepsgraphRelationBuilder::build_layer_collection(Main *bmain,
 			Group *group = scene_collection->group;
 			if (group != NULL) {
 				build_group(bmain, scene, group);
+				/* Recurs into internal group layer collections. */
+				build_layer_collection(bmain,
+				                       scene,
+				                       (LayerCollection *)group->scene_layer->layer_collections.first,
+				                       state);
+
 #ifdef DEG_COLLECTION_GROUP
 				OperationKey group_key(&group->id,
 									   DEG_NODE_TYPE_LAYER_COLLECTIONS,
@@ -104,6 +110,7 @@ void DepsgraphRelationBuilder::build_layer_collection(Main *bmain,
 			}
 			break;
 		}
+		case COLLECTION_TYPE_GROUP_INTERNAL:
 		case COLLECTION_TYPE_NONE:
 			break;
 		default:



More information about the Bf-blender-cvs mailing list