[Bf-blender-cvs] [fa299e669ce] master: Fix T65062: Compositor doesn't work when using different scene

Sergey Sharybin noreply at git.blender.org
Fri May 24 11:27:01 CEST 2019


Commit: fa299e669ce3efa0105c24871d3f737e5112e6e3
Author: Sergey Sharybin
Date:   Fri May 24 11:24:16 2019 +0200
Branches: master
https://developer.blender.org/rBfa299e669ce3efa0105c24871d3f737e5112e6e3

Fix T65062: Compositor doesn't work when using different scene

Need to preserve all view layers, even for indirectly linked scenes
since they might be used by render layer nodes.

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

M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc

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

diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index bd569176c78..4bc05bc9185 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -341,23 +341,26 @@ void scene_remove_unused_view_layers(const Depsgraph *depsgraph,
                                      Scene *scene_cow)
 {
   const ViewLayer *view_layer_input;
-  if (id_node->linked_state == DEG_ID_LINKED_INDIRECTLY) {
-    /* Indirectly linked scenes means it's not an input scene and not a set scene, and is pulled
-     * via some driver. Such scenes should not have view layers after copy. */
-    view_layer_input = NULL;
-  }
-  else if (depsgraph->is_render_pipeline_depsgraph) {
+  if (depsgraph->is_render_pipeline_depsgraph) {
     /* If the dependency graph is used for post-processing (such as compositor) we do need to
      * have access to its view layer names so can not remove any view layers.
      * On a more positive side we can remove all the bases from all the view layers.
      *
      * NOTE: Need to clear pointers which might be pointing to original on freed (due to being
-     * unused) data. */
+     * unused) data.
+     *
+     * NOTE: Need to keep view layers for all scenes, even indirect ones. This is because of
+     * render layer node possibly pointing to another scene. */
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene_cow->view_layers) {
       view_layer->basact = NULL;
     }
     return;
   }
+  else if (id_node->linked_state == DEG_ID_LINKED_INDIRECTLY) {
+    /* Indirectly linked scenes means it's not an input scene and not a set scene, and is pulled
+     * via some driver. Such scenes should not have view layers after copy. */
+    view_layer_input = NULL;
+  }
   else {
     view_layer_input = get_original_view_layer(depsgraph, id_node);
   }



More information about the Bf-blender-cvs mailing list