Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/scene/scene_edit.c')
-rw-r--r--source/blender/editors/scene/scene_edit.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index c7f04a0e2f9..812f9a736bf 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -118,16 +118,20 @@ void ED_scene_exit(bContext *C)
ED_object_editmode_exit(C, EM_FREEDATA | EM_DO_UNDO);
}
+static ViewLayer *scene_change_get_new_view_layer(const WorkSpace *workspace, const Scene *scene_new)
+{
+ ViewLayer *layer_new = BKE_workspace_view_layer_get(workspace, scene_new);
+ return layer_new ? layer_new : BKE_view_layer_from_scene_get(scene_new);
+}
+
void ED_scene_changed_update(Main *bmain, bContext *C, Scene *scene_new, const bScreen *active_screen)
{
- /* XXX Just using active scene render-layer for workspace when switching,
- * but workspace should remember the last one set. Could store render-layer
- * per window-workspace combination (using WorkSpaceDataRelation) */
- ViewLayer *layer_new = BLI_findlink(&scene_new->view_layers, scene_new->active_view_layer);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *layer_new = scene_change_get_new_view_layer(workspace, scene_new);
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new, true);
CTX_data_scene_set(C, scene_new);
- BKE_workspace_view_layer_set(CTX_wm_workspace(C), layer_new);
+ BKE_workspace_view_layer_set(workspace, layer_new, scene_new);
BKE_scene_set_background(bmain, scene_new);
DEG_graph_relations_update(depsgraph, bmain, scene_new, layer_new);
DEG_on_visible_update(bmain, false);
@@ -186,7 +190,8 @@ bool ED_scene_view_layer_delete(
BLI_assert(BLI_listbase_is_empty(&scene->view_layers) == false);
scene->active_view_layer = 0;
- ED_workspace_view_layer_unset(bmain, layer, scene->view_layers.first);
+ ED_workspace_view_layer_unset(bmain, scene, layer, scene->view_layers.first);
+ BKE_workspace_view_layer_remove_references(bmain, layer);
view_layer_remove_unset_nodetrees(bmain, scene, layer);
BKE_view_layer_free(layer);