[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