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@pandora.be>2011-06-28 20:25:07 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-06-28 20:25:07 +0400
commit8ddd2db6482da66ded4c585bf67e6a670598a402 (patch)
tree868feb15e338f05e5b0c98c9b68282e6a203209a /source/blender/render
parent3211bea679c9e5a40a3b6d4ac2a0764225acb66f (diff)
RenderEngine API: add self.report() error reporting function for render engines,
works the same as for operators. Also includes some refactoring of render error reporting code to use ReportList.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h9
-rw-r--r--source/blender/render/intern/include/render_types.h6
-rw-r--r--source/blender/render/intern/source/pipeline.c63
3 files changed, 42 insertions, 36 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 23f301249ba..6debe8c9bc3 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -218,7 +218,10 @@ void RE_TileProcessor(struct Render *re);
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
-void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra);
+
+/* error reporting */
+void RE_SetReports(struct Render *re, struct ReportList *reports);
/* main preview render call */
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
@@ -242,7 +245,6 @@ void RE_stats_draw_cb (struct Render *re, void *handle, void (*f)(void *handle,
void RE_progress_cb (struct Render *re, void *handle, void (*f)(void *handle, float));
void RE_draw_lock_cb (struct Render *re, void *handle, void (*f)(void *handle, int));
void RE_test_break_cb (struct Render *re, void *handle, int (*f)(void *handle));
-void RE_error_cb (struct Render *re, void *handle, void (*f)(void *handle, const char *str));
/* should move to kernel once... still unsure on how/where */
float RE_filter_value(int type, float x);
@@ -308,11 +310,12 @@ void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result);
int RE_engine_test_break(RenderEngine *engine);
void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info);
+void RE_engine_report(RenderEngine *engine, int type, const char *msg);
void RE_engines_init(void);
void RE_engines_exit(void);
-int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, void *erh, void (*error)(void *handle, const char *str));
+int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
#endif /* RE_PIPELINE_H */
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index b2535ebc9ea..13ca40bfd20 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -60,6 +60,7 @@ struct RenderBuckets;
struct ObjectInstanceRen;
struct RayObject;
struct RayFace;
+struct ReportList;
struct Main;
#define TABLEINITSIZE 1024
@@ -252,10 +253,9 @@ struct Render
int (*test_break)(void *handle);
void *tbh;
- void (*error)(void *handle, const char *str);
- void *erh;
-
RenderStats i;
+
+ struct ReportList *reports;
};
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index b1c9820337c..1d4014aac3e 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -128,7 +128,7 @@ Render R;
/* ********* alloc and free ******** */
-static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, ReportList *reports, const char *name_override);
+static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, const char *name_override);
static volatile int g_break= 0;
static int thread_break(void *UNUSED(arg))
@@ -141,7 +141,6 @@ static void result_nothing(void *UNUSED(arg), RenderResult *UNUSED(rr)) {}
static void result_rcti_nothing(void *UNUSED(arg), RenderResult *UNUSED(rr), volatile struct rcti *UNUSED(rect)) {}
static void stats_nothing(void *UNUSED(arg), RenderStats *UNUSED(rs)) {}
static void float_nothing(void *UNUSED(arg), float UNUSED(val)) {}
-static void print_error(void *UNUSED(arg), const char *str) {printf("ERROR: %s\n", str);}
static int default_break(void *UNUSED(arg)) {return G.afbreek == 1;}
static void stats_background(void *UNUSED(arg), RenderStats *rs)
@@ -1190,13 +1189,12 @@ void RE_InitRenderCB(Render *re)
re->display_draw= result_rcti_nothing;
re->progress= float_nothing;
re->test_break= default_break;
- re->error= print_error;
if(G.background)
re->stats_draw= stats_background;
else
re->stats_draw= stats_nothing;
/* clear callback handles */
- re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= re->erh= NULL;
+ re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= NULL;
}
/* only call this while you know it will remove the link too */
@@ -1251,7 +1249,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
if(re->rectx < 2 || re->recty < 2 || (BKE_imtype_is_movie(rd->imtype) &&
(re->rectx < 16 || re->recty < 16) )) {
- re->error(re->erh, "Image too small");
+ BKE_report(re->reports, RPT_ERROR, "Image too small");
re->ok= 0;
return;
}
@@ -1417,11 +1415,6 @@ void RE_test_break_cb(Render *re, void *handle, int (*f)(void *handle))
re->test_break= f;
re->tbh= handle;
}
-void RE_error_cb(Render *re, void *handle, void (*f)(void *handle, const char *str))
-{
- re->error= f;
- re->erh= handle;
-}
/* ********* add object data (later) ******** */
@@ -2710,14 +2703,14 @@ static int check_valid_camera(Scene *scene, Object *camera_override)
return 1;
}
-int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, void (*error)(void *handle, const char *str))
+int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
{
SceneRenderLayer *srl;
if(scene->r.mode & R_BORDER) {
if(scene->r.border.xmax <= scene->r.border.xmin ||
scene->r.border.ymax <= scene->r.border.ymin) {
- error(erh, "No border area selected.");
+ BKE_report(reports, RPT_ERROR, "No border area selected.");
return 0;
}
}
@@ -2728,13 +2721,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
scene_unique_exr_name(scene, str, 0);
if (BLI_is_writable(str)==0) {
- error(erh, "Can not save render buffers, check the temp default path");
+ BKE_report(reports, RPT_ERROR, "Can not save render buffers, check the temp default path");
return 0;
}
/* no fullsample and edge */
if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) {
- error(erh, "Full Sample doesn't support Edge Enhance");
+ BKE_report(reports, RPT_ERROR, "Full Sample doesn't support Edge Enhance");
return 0;
}
@@ -2748,7 +2741,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
bNode *node;
if(ntree==NULL) {
- error(erh, "No Nodetree in Scene");
+ BKE_report(reports, RPT_ERROR, "No Nodetree in Scene");
return 0;
}
@@ -2757,13 +2750,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
break;
if(node==NULL) {
- error(erh, "No Render Output Node in Scene");
+ BKE_report(reports, RPT_ERROR, "No Render Output Node in Scene");
return 0;
}
if(scene->r.scemode & R_FULL_SAMPLE) {
if(composite_needs_render(scene, 0)==0) {
- error(erh, "Full Sample AA not supported without 3d rendering");
+ BKE_report(reports, RPT_ERROR, "Full Sample AA not supported without 3d rendering");
return 0;
}
}
@@ -2772,7 +2765,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
/* check valid camera, without camera render is OK (compo, seq) */
if(!check_valid_camera(scene, camera_override)) {
- error(erh, "No camera");
+ BKE_report(reports, RPT_ERROR, "No camera");
return 0;
}
@@ -2782,7 +2775,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
/* forbidden combinations */
if(scene->r.mode & R_PANORAMA) {
if(scene->r.mode & R_ORTHO) {
- error(erh, "No Ortho render possible for Panorama");
+ BKE_report(reports, RPT_ERROR, "No Ortho render possible for Panorama");
return 0;
}
}
@@ -2798,13 +2791,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
if(!(srl->layflag & SCE_LAY_DISABLE))
break;
if(srl==NULL) {
- error(erh, "All RenderLayers are disabled");
+ BKE_report(reports, RPT_ERROR, "All RenderLayers are disabled");
return 0;
}
/* renderer */
if(!ELEM(scene->r.renderer, R_INTERN, R_YAFRAY)) {
- error(erh, "Unknown render engine set");
+ BKE_report(reports, RPT_ERROR, "Unknown render engine set");
return 0;
}
@@ -2906,6 +2899,11 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc
return 1;
}
+void RE_SetReports(Render *re, ReportList *reports)
+{
+ re->reports= reports;
+}
+
/* general Blender frame render call */
void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, unsigned int lay, int frame, const short write_still)
{
@@ -2931,7 +2929,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype, scene->r.scemode & R_EXTENSION, FALSE);
/* reports only used for Movie */
- do_write_image_or_movie(re, scene, NULL, NULL, name);
+ do_write_image_or_movie(re, scene, NULL, name);
}
}
@@ -2942,7 +2940,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
G.rendering= 0;
}
-static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, ReportList *reports, const char *name_override)
+static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, const char *name_override)
{
char name[FILE_MAX];
RenderResult rres;
@@ -2960,7 +2958,7 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
dofree = 1;
}
RE_ResultGet32(re, (unsigned int *)rres.rect32);
- ok= mh->append_movie(&re->r, scene->r.cfra, rres.rect32, rres.rectx, rres.recty, reports);
+ ok= mh->append_movie(&re->r, scene->r.cfra, rres.rect32, rres.rectx, rres.recty, re->reports);
if(dofree) {
MEM_freeN(rres.rect32);
}
@@ -3042,7 +3040,7 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
}
/* saves images to disk */
-void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
+void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, unsigned int lay, int sfra, int efra, int tfra)
{
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
int cfrao= scene->r.cfra;
@@ -3055,14 +3053,14 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
/* is also set by caller renderwin.c */
G.rendering= 1;
-
+
if(BKE_imtype_is_movie(scene->r.imtype))
- if(!mh->start_movie(scene, &re->r, re->rectx, re->recty, reports))
+ if(!mh->start_movie(scene, &re->r, re->rectx, re->recty, re->reports))
G.afbreek= 1;
if (mh->get_next_frame) {
while (!(G.afbreek == 1)) {
- int nf = mh->get_next_frame(&re->r, reports);
+ int nf = mh->get_next_frame(&re->r, re->reports);
if (nf >= 0 && nf >= scene->r.sfra && nf <= scene->r.efra) {
scene->r.cfra = re->r.cfra = nf;
@@ -3071,7 +3069,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
do_render_all_options(re);
if(re->test_break(re->tbh) == 0) {
- if(!do_write_image_or_movie(re, scene, mh, reports, NULL))
+ if(!do_write_image_or_movie(re, scene, mh, NULL))
G.afbreek= 1;
}
@@ -3135,7 +3133,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
if(re->test_break(re->tbh) == 0) {
if(!G.afbreek)
- if(!do_write_image_or_movie(re, scene, mh, reports, NULL))
+ if(!do_write_image_or_movie(re, scene, mh, NULL))
G.afbreek= 1;
}
else
@@ -3343,6 +3341,11 @@ void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char
re->i.statstr= NULL;
}
+void RE_engine_report(RenderEngine *engine, int type, const char *msg)
+{
+ BKE_report(engine->re->reports, type, msg);
+}
+
/* loads in image into a result, size must match
* x/y offsets are only used on a partial copy when dimensions dont match */
void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, const char *filename, int x, int y)