Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-01-08 21:26:42 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-01-08 21:29:16 +0400
commit61c9cacbd73f08536196d406a73aca83cd2a87f1 (patch)
tree0d2d42ec6fa71634b2a62baee8fe3e49f848acf5 /source/blender/render
parentfa88c7ffae0cfca83b8ec3daaba6c3cc39f9ae34 (diff)
Fix T38074: sequence rendering gave "No camera" warning for other scenes that
didn't need a camera because they use only compositing nodes.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/pipeline.c71
1 files changed, 36 insertions, 35 deletions
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;
}