Commit: 61c9cacbd73f08536196d406a73aca83cd2a87f1
Author: Brecht Van Lommel
Date:   Wed Jan 8 18:26:42 2014 +0100
https://developer.blender.org/rB61c9cacbd73f08536196d406a73aca83cd2a87f1

Fix T38074: sequence rendering gave "No camera" warning for other scenes that
didn't need a camera because they use only compositing nodes.

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

M       source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index 6e2d55b..01d0280 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -2305,10 +2305,33 @@ static void do_render_all_options(Render *re)
        }
 }
 
-static int check_valid_camera(Scene *scene, Object *camera_override)
+static bool check_valid_compositing_camera(Scene *scene, Object 
*camera_override)
 {
-       int check_comp = 1;
+       if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
+               bNode *node = scene->nodetree->nodes.first;
 
+               while (node) {
+                       if (node->type == CMP_NODE_R_LAYERS) {
+                               Scene *sce = node->id ? (Scene *)node->id : 
scene;
+
+                               if (!sce->camera && 
!BKE_scene_camera_find(sce)) {
+                                       /* all render layers nodes need camera 
*/
+                                       return false;
+                               }
+                       }
+
+                       node = node->next;
+               }
+
+               return true;
+       }
+       else {
+               return (camera_override != NULL || scene->camera != NULL);
+       }
+}
+
+static int check_valid_camera(Scene *scene, Object *camera_override, 
ReportList *reports)
+{
        if (camera_override == NULL && scene->camera == NULL)
                scene->camera = BKE_scene_camera_find(scene);
 
@@ -2316,19 +2339,16 @@ static int check_valid_camera(Scene *scene, Object 
*camera_override)
                if (scene->ed) {
                        Sequence *seq = scene->ed->seqbase.first;
 
-                       check_comp = 0;
-
                        while (seq) {
                                if (seq->type == SEQ_TYPE_SCENE && seq->scene) {
                                        if (!seq->scene_camera) {
                                                if (!seq->scene->camera && 
!BKE_scene_camera_find(seq->scene)) {
-                                                       if (seq->scene == 
scene) {
-                                                               /* for current 
scene camera could be unneeded due to compisite nodes */
-                                                               check_comp = 1;
-                                                       }
-                                                       else {
-                                                               /* for other 
scenes camera is necessary */
-                                                               return 0;
+                                                       /* camera could be 
unneeded due to composite nodes */
+                                                       Object *override = 
(seq->scene == scene) ? camera_override : NULL;
+
+                                                       if 
(!check_valid_compositing_camera(seq->scene, override)) {
+                                                               
BKE_reportf(reports, RPT_ERROR, "No camera found in scene \"%s\"", 
seq->scene->id.name+2);
+                                                               return false;
                                                        }
                                                }
                                        }
@@ -2338,30 +2358,12 @@ static int check_valid_camera(Scene *scene, Object 
*camera_override)
                        }
                }
        }
-
-       if (check_comp) { /* no sequencer or sequencer depends on compositor */
-               if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
-                       bNode *node = scene->nodetree->nodes.first;
-
-                       while (node) {
-                               if (node->type == CMP_NODE_R_LAYERS) {
-                                       Scene *sce = node->id ? (Scene 
*)node->id : scene;
-
-                                       if (!sce->camera && 
!BKE_scene_camera_find(sce)) {
-                                               /* all render layers nodes need 
camera */
-                                               return 0;
-                                       }
-                               }
-
-                               node = node->next;
-                       }
-               }
-               else {
-                       return (camera_override != NULL || scene->camera != 
NULL);
-               }
+       else if (!check_valid_compositing_camera(scene, camera_override)) {
+               BKE_report(reports, RPT_ERROR, "No camera found in scene");
+               return false;
        }
 
-       return 1;
+       return true;
 }
 
 static int node_tree_has_composite_output(bNodeTree *ntree)
@@ -2436,8 +2438,7 @@ int RE_is_rendering_allowed(Scene *scene, Object 
*camera_override, ReportList *r
        }
        
        /* check valid camera, without camera render is OK (compo, seq) */
-       if (!check_valid_camera(scene, camera_override)) {
-               BKE_report(reports, RPT_ERROR, "No camera");
+       if (!check_valid_camera(scene, camera_override, reports)) {
                return 0;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to