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:
authorCampbell Barton <ideasman42@gmail.com>2016-01-11 04:32:29 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-01-11 04:32:29 +0300
commit961ac8eb85a6ede92c0d1bd062d2bdf264bbaef5 (patch)
treea7c28997d99792827db4004058ee6c5608a1b265 /source/blender/render
parentf28d3955e9c848c32e340ec6696142ef124562d5 (diff)
Report errno string when writing files fails
Screenshot ignored errors, some render code printed 'Saved' without checking for failure. note: errno is now cleared from IMB_saveiff so all callers don't need to.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/pipeline.c77
-rw-r--r--source/blender/render/intern/source/render_result.c5
2 files changed, 42 insertions, 40 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 1ac9dd8e716..75ef2fbb048 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -34,6 +34,7 @@
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
+#include <errno.h>
#include "DNA_anim_types.h"
#include "DNA_image_types.h"
@@ -198,6 +199,35 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
fflush(stdout);
}
+static void render_print_save_message(const char *name, int ok, int err)
+{
+ if (ok) {
+ printf("Saved: '%s'\n", name);
+ }
+ else {
+ printf("Render error (%s) cannot save: '%s'\n", strerror(err), name);
+ }
+}
+
+static int render_imbuf_write_stamp_test(
+ Scene *scene, struct RenderResult *rr, ImBuf *ibuf, const char *name,
+ const ImageFormatData *imf, bool stamp)
+{
+ int ok;
+
+ if (stamp) {
+ /* writes the name of the individual cameras */
+ ok = BKE_imbuf_write_stamp(scene, rr, ibuf, name, imf);
+ }
+ else {
+ ok = BKE_imbuf_write(ibuf, name, imf);
+ }
+
+ render_print_save_message(name, ok, errno);
+
+ return ok;
+}
+
void RE_FreeRenderResult(RenderResult *res)
{
render_result_free(res);
@@ -3209,8 +3239,8 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
if (ELEM(rd->im_format.imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER) &&
rd->im_format.views_format == R_IMF_VIEWS_MULTIVIEW)
{
- RE_WriteRenderResult(reports, rr, name, &rd->im_format, true, NULL);
- printf("Saved: %s\n", name);
+ ok = RE_WriteRenderResult(reports, rr, name, &rd->im_format, true, NULL);
+ render_print_save_message(name, ok, errno);
}
/* mono, legacy code */
@@ -3228,8 +3258,8 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
}
if (rd->im_format.imtype == R_IMF_IMTYPE_MULTILAYER) {
- RE_WriteRenderResult(reports, rr, name, &rd->im_format, false, rv->name);
- printf("Saved: %s\n", name);
+ ok = RE_WriteRenderResult(reports, rr, name, &rd->im_format, false, rv->name);
+ render_print_save_message(name, ok, errno);
}
else {
ImBuf *ibuf = render_result_rect_to_ibuf(rr, rd, view_id);
@@ -3237,18 +3267,7 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
IMB_colormanagement_imbuf_for_write(ibuf, true, false, &scene->view_settings,
&scene->display_settings, &rd->im_format);
- if (stamp) {
- /* writes the name of the individual cameras */
- ok = BKE_imbuf_write_stamp(scene, rr, ibuf, name, &rd->im_format);
- }
- else {
- ok = BKE_imbuf_write(ibuf, name, &rd->im_format);
- }
-
- if (ok == false) {
- printf("Render error: cannot save %s\n", name);
- }
- else printf("Saved: %s\n", name);
+ ok = render_imbuf_write_stamp_test(scene, rr, ibuf, name, &rd->im_format, stamp);
/* optional preview images for exr */
if (ok && rd->im_format.imtype == R_IMF_IMTYPE_OPENEXR && (rd->im_format.flag & R_IMF_FLAG_PREVIEW_JPG)) {
@@ -3263,14 +3282,7 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
IMB_colormanagement_imbuf_for_write(ibuf, true, false, &scene->view_settings,
&scene->display_settings, &imf);
- if (stamp) {
- /* writes the name of the individual cameras */
- ok = BKE_imbuf_write_stamp(scene, rr, ibuf, name, &imf);
- }
- else {
- ok = BKE_imbuf_write(ibuf, name, &imf);
- }
- printf("Saved: %s\n", name);
+ ok = render_imbuf_write_stamp_test(scene, rr, ibuf, name, &imf, stamp);
}
/* imbuf knows which rects are not part of ibuf */
@@ -3299,15 +3311,7 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
ibuf_arr[2] = IMB_stereo3d_ImBuf(&scene->r.im_format, ibuf_arr[0], ibuf_arr[1]);
- if (stamp)
- ok = BKE_imbuf_write_stamp(scene, rr, ibuf_arr[2], name, &rd->im_format);
- else
- ok = BKE_imbuf_write(ibuf_arr[2], name, &rd->im_format);
-
- if (ok == false)
- printf("Render error: cannot save %s\n", name);
- else
- printf("Saved: %s\n", name);
+ ok = render_imbuf_write_stamp_test(scene, rr, ibuf_arr[2], name, &rd->im_format, stamp);
/* optional preview images for exr */
if (ok && rd->im_format.imtype == R_IMF_IMTYPE_OPENEXR &&
@@ -3325,12 +3329,7 @@ bool RE_WriteRenderViewsImage(ReportList *reports, RenderResult *rr, Scene *scen
IMB_colormanagement_imbuf_for_write(ibuf_arr[2], true, false, &scene->view_settings,
&scene->display_settings, &imf);
- if (stamp)
- ok = BKE_imbuf_write_stamp(scene, rr, ibuf_arr[2], name, &rd->im_format);
- else
- ok = BKE_imbuf_write(ibuf_arr[2], name, &imf);
-
- printf("Saved: %s\n", name);
+ ok = render_imbuf_write_stamp_test(scene, rr, ibuf_arr[2], name, &rd->im_format, stamp);
}
/* imbuf knows which rects are not part of ibuf */
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index 19b049ee1da..c89adc4a814 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -32,6 +32,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include "MEM_guardedalloc.h"
@@ -1134,6 +1135,8 @@ bool RE_WriteRenderResult(ReportList *reports, RenderResult *rr, const char *fil
}
}
+ errno = 0;
+
BLI_make_existing_file(filename);
if (IMB_exr_begin_write(exrhandle, filename, width, height, compress, rr->stamp_data)) {
@@ -1142,7 +1145,7 @@ bool RE_WriteRenderResult(ReportList *reports, RenderResult *rr, const char *fil
}
else {
/* TODO, get the error from openexr's exception */
- BKE_report(reports, RPT_ERROR, "Error writing render result (see console)");
+ BKE_reportf(reports, RPT_ERROR, "Error writing render result, %s (see console)", strerror(errno));
success = false;
}