[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