Corrections to alpha pipeline do_versions
[blender.git] / source / blender / render / intern / source / pipeline.c
index 2c90110..d2b47a7 100644 (file)
@@ -1355,6 +1355,19 @@ static int composite_needs_render(Scene *sce, int this_scene)
        return 0;
 }
 
+static bool rlayer_node_uses_alpha(bNodeTree *ntree, bNode *node)
+{
+       bNodeSocket *sock;
+
+       for (sock = node->outputs.first; sock; sock = sock->next) {
+               /* Weak! but how to make it better? */
+               if (!strcmp(sock->name, "Alpha") && nodeCountSocketLinks(ntree, sock) > 0)
+                       return true;
+       }
+
+       return false;
+}
+
 static void tag_scenes_for_render(Render *re)
 {
        bNode *node;
@@ -1372,6 +1385,21 @@ static void tag_scenes_for_render(Render *re)
        for (node = re->scene->nodetree->nodes.first; node; node = node->next) {
                if (node->type == CMP_NODE_R_LAYERS) {
                        if (node->id) {
+                               if (!MAIN_VERSION_ATLEAST(re->main, 265, 5)) {
+                                       if (rlayer_node_uses_alpha(re->scene->nodetree, node)) {
+                                               Scene *scene = (Scene*) node->id;
+
+                                               if (scene->r.alphamode != R_ALPHAPREMUL) {
+                                                       BKE_reportf(re->reports, RPT_WARNING, "Setting scene %s alpha mode to Premul\n", scene->id.name + 2);
+
+                                                       /* also print, so feedback is immediate */
+                                                       printf("2.66 versioning fix: setting scene %s alpha mode to Premul\n", scene->id.name + 2);
+
+                                                       scene->r.alphamode = R_ALPHAPREMUL;
+                                               }
+                                       }
+                               }
+
                                if (node->id != (ID *)re->scene)
                                        node->id->flag |= LIB_DOIT;
                        }