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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs