From 61c9cacbd73f08536196d406a73aca83cd2a87f1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 8 Jan 2014 18:26:42 +0100 Subject: Fix T38074: sequence rendering gave "No camera" warning for other scenes that didn't need a camera because they use only compositing nodes. --- source/blender/render/intern/source/pipeline.c | 71 +++++++++++++------------- 1 file changed, 36 insertions(+), 35 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 6e2d55be952..01d02808def 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; } -- cgit v1.2.3