Commit: ecc03c8ed0ca196f4c249ec25f331938a1a0405a
Author: Sergey Sharybin
Date:   Fri Dec 5 21:56:29 2014 +0500
Branches: master
https://developer.blender.org/rBecc03c8ed0ca196f4c249ec25f331938a1a0405a

Render API: Add RenderEngine.error_set() function

This function sets an error message which would be displayed after
rendering is over and info space lost the link to the engine.

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

M       source/blender/editors/render/render_internal.c
M       source/blender/makesrna/intern/rna_render.c
M       source/blender/render/extern/include/RE_engine.h
M       source/blender/render/extern/include/RE_pipeline.h
M       source/blender/render/intern/source/external_engine.c
M       source/blender/render/intern/source/render_result.c

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

diff --git a/source/blender/editors/render/render_internal.c 
b/source/blender/editors/render/render_internal.c
index 9d5eed3..fcc90fa 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -340,7 +340,11 @@ static void render_freejob(void *rjv)
 }
 
 /* str is IMA_MAX_RENDER_TEXT in size */
-static void make_renderinfo_string(RenderStats *rs, Scene *scene, bool 
v3d_override, char *str)
+static void make_renderinfo_string(const RenderStats *rs,
+                                   const Scene *scene,
+                                   const bool v3d_override,
+                                   const char *error,
+                                   char *str)
 {
        char info_time_str[32]; // used to be extern to header_info.c
        uintptr_t mem_in_use, mmap_in_use, peak_memory;
@@ -413,8 +417,12 @@ static void make_renderinfo_string(RenderStats *rs, Scene 
*scene, bool v3d_overr
                spos += sprintf(spos, IFACE_("| Full Sample %d "), rs->curfsa);
        
        /* extra info */
-       if (rs->infostr && rs->infostr[0])
+       if (rs->infostr && rs->infostr[0]) {
                spos += sprintf(spos, "| %s ", rs->infostr);
+       }
+       else if (error && error[0]) {
+               spos += sprintf(spos, "| %s ", error);
+       }
 
        /* very weak... but 512 characters is quite safe */
        if (spos >= str + IMA_MAX_RENDER_TEXT)
@@ -435,7 +443,8 @@ static void image_renderinfo_cb(void *rjv, RenderStats *rs)
                if (rr->text == NULL)
                        rr->text = MEM_callocN(IMA_MAX_RENDER_TEXT, 
"rendertext");
 
-               make_renderinfo_string(rs, rj->scene, rj->v3d_override, 
rr->text);
+               make_renderinfo_string(rs, rj->scene, rj->v3d_override,
+                                      rr->error, rr->text);
        }
 
        RE_ReleaseResult(rj->re);
@@ -1118,7 +1127,7 @@ static void render_view3d_renderinfo_cb(void *rjp, 
RenderStats *rs)
                *rp->stop = 1;
        }
        else {
-               make_renderinfo_string(rs, rp->scene, false, rp->engine->text);
+               make_renderinfo_string(rs, rp->scene, false, NULL, 
rp->engine->text);
        
                /* make jobs timer to send notifier */
                *(rp->do_update) = true;
diff --git a/source/blender/makesrna/intern/rna_render.c 
b/source/blender/makesrna/intern/rna_render.c
index 5d4ec06..6db9c8e 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -519,6 +519,11 @@ static void rna_def_render_engine(BlenderRNA *brna)
        prop = RNA_def_string(func, "message", NULL, 0, "Report Message", "");
        RNA_def_property_flag(prop, PROP_REQUIRED);
 
+       func = RNA_def_function(srna, "error_set", 
"RE_engine_set_error_message");
+       RNA_def_function_ui_description(func, "Set error message displaying 
after the render is finished");
+       prop = RNA_def_string(func, "message", NULL, 0, "Report Message", "");
+       RNA_def_property_flag(prop, PROP_REQUIRED);
+
        func = RNA_def_function(srna, "bind_display_space_shader", 
"engine_bind_display_space_shader");
        RNA_def_function_ui_description(func, "Bind GLSL fragment shader that 
converts linear colors to display space colors using scene color management 
settings");
        prop = RNA_def_pointer(func, "scene", "Scene", "", "");
diff --git a/source/blender/render/extern/include/RE_engine.h 
b/source/blender/render/extern/include/RE_engine.h
index 4b0473f..5edf970 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -144,6 +144,7 @@ void RE_engine_update_stats(RenderEngine *engine, const 
char *stats, const char
 void RE_engine_update_progress(RenderEngine *engine, float progress);
 void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float 
mem_peak);
 void RE_engine_report(RenderEngine *engine, int type, const char *msg);
+void RE_engine_set_error_message(RenderEngine *engine, const char *msg);
 
 int RE_engine_render(struct Render *re, int do_all);
 
diff --git a/source/blender/render/extern/include/RE_pipeline.h 
b/source/blender/render/extern/include/RE_pipeline.h
index 61795c2..d1b6673 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -144,7 +144,7 @@ typedef struct RenderResult {
 
        /* render info text */
        char *text;
-       
+       char *error;
 } RenderResult;
 
 
diff --git a/source/blender/render/intern/source/external_engine.c 
b/source/blender/render/intern/source/external_engine.c
index 8a15c5e..23ca376 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -355,6 +355,19 @@ void RE_engine_report(RenderEngine *engine, int type, 
const char *msg)
                BKE_report(engine->reports, type, msg);
 }
 
+void RE_engine_set_error_message(RenderEngine *engine, const char *msg)
+{
+       Render *re = engine->re;
+       if (re != NULL) {
+               RenderResult *rr = RE_AcquireResultRead(re);
+               if (rr->error != NULL) {
+                       MEM_freeN(rr->error);
+               }
+               rr->error = BLI_strdup(msg);
+               RE_ReleaseResult(re);
+       }
+}
+
 void RE_engine_get_current_tiles(Render *re, int *total_tiles_r, rcti 
**tiles_r)
 {
        RenderPart *pa;
diff --git a/source/blender/render/intern/source/render_result.c 
b/source/blender/render/intern/source/render_result.c
index 6bb1358..de87fb2 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -94,6 +94,8 @@ void render_result_free(RenderResult *res)
                MEM_freeN(res->rectf);
        if (res->text)
                MEM_freeN(res->text);
+       if (res->error)
+               MEM_freeN(res->error);
        
        MEM_freeN(res);
 }

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

Reply via email to