[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