diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-01-11 04:32:29 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-01-11 04:32:29 +0300 |
commit | 961ac8eb85a6ede92c0d1bd062d2bdf264bbaef5 (patch) | |
tree | a7c28997d99792827db4004058ee6c5608a1b265 /source/blender/render | |
parent | f28d3955e9c848c32e340ec6696142ef124562d5 (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.c | 77 | ||||
-rw-r--r-- | source/blender/render/intern/source/render_result.c | 5 |
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; } |