diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-01-30 23:31:32 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-01-30 23:31:38 +0300 |
commit | 133afc07b2555574c804f4932bc34903d15f3535 (patch) | |
tree | 60b04a21507c01cf6f18ccb5d20c1f34cc0e4d1e | |
parent | 7b675e0dc411d4f27c7ffca25782ac81eaf7e4c8 (diff) |
Compositor / Render Layer Node: Fix wrong layer after deleting view layers
I was calling the ntree syncing function too late. So the index of the layer
was -1 since it was no longer in the ListBase, making all RenderLayer nodes
to decrease their respective `custom1` (even going to negative sometimes).
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 1 | ||||
-rw-r--r-- | source/blender/editors/scene/scene_edit.c | 4 |
2 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index cac2aab26dd..a5c3e6e4a43 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -3819,6 +3819,7 @@ bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter, void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int layer_index) { + BLI_assert(layer_index != -1); for (bNode *node = ntree->nodes.first; node; node = node->next) { if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) { if (node->custom1 == layer_index) { diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c index 812f9a736bf..d0077df73e4 100644 --- a/source/blender/editors/scene/scene_edit.c +++ b/source/blender/editors/scene/scene_edit.c @@ -186,13 +186,15 @@ bool ED_scene_view_layer_delete( return false; } + /* We need to unset nodetrees before removing the layer, otherwise its index will be -1. */ + view_layer_remove_unset_nodetrees(bmain, scene, layer); + BLI_remlink(&scene->view_layers, layer); BLI_assert(BLI_listbase_is_empty(&scene->view_layers) == false); scene->active_view_layer = 0; 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); |