Merge branch 'blender2.7'
[blender.git] / source / blender / nodes / composite / nodes / node_composite_image.c
index 856b876..ce41e30 100644 (file)
@@ -214,6 +214,23 @@ void node_cmp_rlayers_register_pass(bNodeTree *ntree, bNode *node, Scene *scene,
        }
 }
 
+static void cmp_node_rlayer_create_outputs_cb(RenderEngine *UNUSED(engine), Scene *scene, ViewLayer *view_layer,
+                                              const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type)
+{
+       /* Register the pass in all scenes that have a render layer node for this layer.
+        * Since multiple scenes can be used in the compositor, the code must loop over all scenes
+        * and check whether their nodetree has a node that needs to be updated. */
+       /* NOTE: using G_MAIN seems valid here,
+        * unless we want to register that for every other temp Main we could generate??? */
+       ntreeCompositRegisterPass(scene->nodetree, scene, view_layer, name, type);
+
+       for (Scene *sce = G_MAIN->scene.first; sce; sce = sce->id.next) {
+               if (sce->nodetree && sce != scene) {
+                       ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type);
+               }
+       }
+}
+
 static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, bNode *node, LinkNodePair *available_sockets)
 {
        Scene *scene = (Scene *)node->id;
@@ -229,7 +246,7 @@ static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, bNode *node, LinkNo
                                node->storage = data;
 
                                RenderEngine *engine = RE_engine_create(engine_type);
-                               engine_type->update_render_passes(engine, scene, view_layer);
+                               RE_engine_update_render_passes(engine, scene, view_layer, cmp_node_rlayer_create_outputs_cb);
                                RE_engine_free(engine);
 
                                MEM_freeN(data);