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
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-05-24 12:24:16 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-05-24 12:24:16 +0300
commitfa299e669ce3efa0105c24871d3f737e5112e6e3 (patch)
tree59b0d4a2a381a677071ea701d6a957c951aea94c /source
parentba58b9d2af5bb49ea9a3511fae18ba4d5780105b (diff)
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.
Diffstat (limited to 'source')
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc17
1 files changed, 10 insertions, 7 deletions
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);
}