[Bf-blender-cvs] [cfd600a207] temp-depsgraph-layers: Layers: Remove old base visible / selected code

Dalai Felinto noreply at git.blender.org
Mon Mar 20 19:48:18 CET 2017


Commit: cfd600a2070a659f9f4691004cdba7d1370dcd62
Author: Dalai Felinto
Date:   Mon Mar 20 18:58:01 2017 +0100
Branches: temp-depsgraph-layers
https://developer.blender.org/rBcfd600a2070a659f9f4691004cdba7d1370dcd62

Layers: Remove old base visible / selected code

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/space_outliner/outliner_draw.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 24d8f26a71..232fb212cf 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -71,7 +71,6 @@ struct SceneLayer *BKE_scene_layer_find_from_collection(const struct Scene *scen
 struct Base *BKE_scene_layer_base_find(struct SceneLayer *sl, struct Object *ob);
 void BKE_scene_layer_base_deselect_all(struct SceneLayer *sl);
 void BKE_scene_layer_base_select(struct SceneLayer *sl, struct Base *selbase);
-void BKE_scene_layer_base_flag_recalculate(struct SceneLayer *sl);
 
 void BKE_scene_layer_engine_settings_recalculate(struct SceneLayer *sl);
 void BKE_scene_layer_engine_settings_object_recalculate(struct SceneLayer *sl, struct Object *ob);
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index b466239315..fcebeb5f02 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -165,7 +165,6 @@ bool BKE_collection_remove(Scene *scene, SceneCollection *sc)
 	/* check all layers that use this collection and clear them */
 	for (SceneLayer *sl = scene->render_layers.first; sl; sl = sl->next) {
 		layer_collection_remove(sl, &sl->layer_collections, sc);
-		BKE_scene_layer_base_flag_recalculate(sl);
 		sl->active_collection = 0;
 	}
 
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index de620335d4..2512c34f70 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -245,64 +245,6 @@ static void scene_layer_object_base_unref(SceneLayer *sl, Base *base)
 	}
 }
 
-static void layer_collection_base_flag_recalculate(
-        LayerCollection *lc, const bool tree_is_visible, const bool tree_is_selectable)
-{
-	bool is_visible = tree_is_visible && ((lc->flag & COLLECTION_VISIBLE) != 0);
-	/* an object can only be selected if it's visible */
-	bool is_selectable = tree_is_selectable && is_visible && ((lc->flag & COLLECTION_SELECTABLE) != 0);
-
-	for (LinkData *link = lc->object_bases.first; link; link = link->next) {
-		Base *base = link->data;
-
-		if (is_visible) {
-			base->flag |= BASE_VISIBLED;
-		}
-
-		if (is_selectable) {
-			base->flag |= BASE_SELECTABLED;
-		}
-	}
-
-	for (LayerCollection *lcn = lc->layer_collections.first; lcn; lcn = lcn->next) {
-		layer_collection_base_flag_recalculate(lcn, is_visible, is_selectable);
-	}
-}
-
-/**
- * Re-evaluate the ObjectBase flags for SceneLayer
- */
-void BKE_scene_layer_base_flag_recalculate(SceneLayer *sl)
-{
-	for (Base *base = sl->object_bases.first; base; base = base->next) {
-		base->flag &= ~(BASE_VISIBLED | BASE_SELECTABLED);
-	}
-
-	for (LayerCollection *lc = sl->layer_collections.first; lc; lc = lc->next) {
-		layer_collection_base_flag_recalculate(lc, true, true);
-	}
-
-	/* if base is not selectabled, clear select */
-	for (Base *base = sl->object_bases.first; base; base = base->next) {
-		if ((base->flag & BASE_SELECTABLED) == 0) {
-			base->flag &= ~BASE_SELECTED;
-		}
-	}
-}
-
-/**
- * Tag Scene Layer to recalculation
- *
- * Temporary function, waiting for real depsgraph
- */
-void BKE_scene_layer_engine_settings_recalculate(SceneLayer *sl)
-{
-	sl->flag |= SCENE_LAYER_ENGINE_DIRTY;
-	for (Base *base = sl->object_bases.first; base; base = base->next) {
-		base->flag |= BASE_DIRTY_ENGINE_SETTINGS;
-	}
-}
-
 /**
  * Tag Object in SceneLayer to recalculation
  *
@@ -858,7 +800,6 @@ LayerCollection *BKE_collection_link(SceneLayer *sl, SceneCollection *sc)
 void BKE_collection_unlink(SceneLayer *sl, LayerCollection *lc)
 {
 	BKE_layer_collection_free(sl, lc);
-	BKE_scene_layer_base_flag_recalculate(sl);
 	BKE_scene_layer_engine_settings_collection_recalculate(sl, lc);
 
 	BLI_remlink(&sl->layer_collections, lc);
@@ -879,7 +820,6 @@ static void layer_collection_object_add(SceneLayer *sl, LayerCollection *lc, Obj
 
 	BLI_addtail(&lc->object_bases, BLI_genericNodeN(base));
 
-	BKE_scene_layer_base_flag_recalculate(sl);
 	BKE_scene_layer_engine_settings_object_recalculate(sl, ob);
 }
 
@@ -1018,7 +958,6 @@ void BKE_layer_sync_object_unlink(const Scene *scene, SceneCollection *sc, Objec
 				layer_collection_object_remove(sl, found, ob);
 			}
 		}
-		BKE_scene_layer_base_flag_recalculate(sl);
 		BKE_scene_layer_engine_settings_object_recalculate(sl, ob);
 	}
 }
@@ -1812,12 +1751,19 @@ void BKE_layer_eval_layer_collection(EvaluationContext *UNUSED(eval_ctx),
 
 	if (parent_layer_collection != NULL) {
 		is_visible &= (parent_layer_collection->flag_evaluated & COLLECTION_VISIBLE) != 0;
-		is_selectable &= is_visible && (parent_layer_collection->flag_evaluated & COLLECTION_SELECTABLE) != 0;
+		is_selectable &= (parent_layer_collection->flag_evaluated & COLLECTION_SELECTABLE) != 0;
 		layer_collection->flag_evaluated &= parent_layer_collection->flag_evaluated;
 	}
 
 	for (LinkData *link = layer_collection->object_bases.first; link != NULL; link = link->next) {
 		Base *base = link->data;
+
+		/* TODO(sergey): Is it always required? */
+		if (is_visible != ((base->flag & BASE_VISIBLED) != 0)) {
+			/* Non-recursive code from engine_settings_collection_recalculate(). */
+			base->flag |= BASE_DIRTY_ENGINE_SETTINGS;
+		}
+
 		/* Non-recursive code from base_flag_recalculate(). */
 		if (is_visible) {
 			base->flag |= BASE_VISIBLED;
@@ -1825,9 +1771,6 @@ void BKE_layer_eval_layer_collection(EvaluationContext *UNUSED(eval_ctx),
 		if (is_selectable) {
 			base->flag |= BASE_SELECTABLED;
 		}
-		/* Non-recursive code from engine_settings_collection_recalculate(). */
-		/* TODO(sergey): Is it always required? */
-		base->flag |= BASE_DIRTY_ENGINE_SETTINGS;
 	}
 }
 
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index efa3e09329..8c9e71fd05 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6265,8 +6265,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
 		link_list(fd, &sl->object_bases);
 		sl->basact = newdataadr(fd, sl->basact);
 		direct_link_layer_collections(fd, &sl->layer_collections);
-		/* tag scene layer to update for collection tree evaluation */
-		BKE_scene_layer_base_flag_recalculate(sl);
 	}
 
 	link_list(fd, &sce->engines_settings);
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index ac3f703fbd..8e55c6ad76 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -138,9 +138,6 @@ void do_versions_after_linking_280(Main *main)
 					lc = lc->next;
 				}
 
-				/* but we still need to make the flags synced */
-				BKE_scene_layer_base_flag_recalculate(sl);
-
 				/* convert active base */
 				if (scene->basact) {
 					sl->basact = BKE_scene_layer_base_find(sl, scene->basact->object);
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 2bf94fa987..4d58ca2d27 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -262,10 +262,9 @@ static void restrictbutton_collection_hide_select_cb(bContext *C, void *poin, vo
 	LayerCollection *collection = poin2;
 
 	if ((collection->flag & COLLECTION_SELECTABLE) == 0) {
-		SceneLayer *sl = BKE_scene_layer_find_from_collection(scene, collection);
-
 		/* deselect bases that are directly influenced by this LayerCollection */
-		BKE_scene_layer_base_flag_recalculate(sl);
+		/* TODO(sergey): Use proper flag for tagging here. */
+		DAG_id_tag_update(&scene->id, 0);
 		WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
 	}
 	WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, NULL);




More information about the Bf-blender-cvs mailing list