diff options
author | Ton Roosendaal <ton@blender.org> | 2009-02-05 22:28:28 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-02-05 22:28:28 +0300 |
commit | e1b92bc166ac27e29dfdbec315a7b6233d8724d2 (patch) | |
tree | 2ed3ef7d6d3ac107ff4bd578ae0f2544570087b2 /source/blender/render/intern | |
parent | 0a3697ccf7f16bd328a8894c62995de0ff12adb0 (diff) |
2.5
Safe method to move render results to the displayed image.
It now allocates a single image for display, and on each
refresh callback from render, it copies the refreshed
section over to this image, in 32 bits. While rendering
that image then only shows progress updates, as usual.
This also now works for scenes in composte and results
for composite.
This should solve reported crashes for MBlur or SSS.
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r-- | source/blender/render/intern/include/render_types.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 13 |
2 files changed, 12 insertions, 3 deletions
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index 66722ea983f..ab3758781ce 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -113,7 +113,7 @@ struct Render char name[RE_MAXNAME]; /* state settings */ - short flag, osa, ok, do_gamma; + short flag, osa, ok, result_ok; /* result of rendering */ RenderResult *result; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index b271af0cc70..cc2cf290795 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -135,6 +135,11 @@ static void int_nothing(void *unused, int val) {} static int void_nothing(void *unused) {return 0;} static void print_error(void *unused, char *str) {printf("ERROR: %s\n", str);} +int RE_RenderInProgress(Render *re) +{ + return re->result_ok==0; +} + static void stats_background(void *unused, RenderStats *rs) { uintptr_t mem_in_use= MEM_get_memory_in_use(); @@ -1013,9 +1018,10 @@ Render *RE_NewRender(const char *name) strncpy(re->name, name, RE_MAXNAME); } - /* prevent UI to draw old results immediately */ + /* prevent UI to draw old results */ RE_FreeRenderResult(re->result); re->result= NULL; + re->result_ok= 0; /* set default empty callbacks */ re->display_init= result_nothing; @@ -2487,8 +2493,8 @@ static int render_initialize_from_scene(Render *re, Scene *scene, int anim) void RE_BlenderFrame(Render *re, Scene *scene, int frame) { /* 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; + re->result_ok= 0; scene->r.cfra= frame; @@ -2498,6 +2504,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, int frame) /* UGLY WARNING */ G.rendering= 0; + re->result_ok= 1; } static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh) @@ -2586,6 +2593,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) /* 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; + re->result_ok= 0; if(BKE_imtype_is_movie(scene->r.imtype)) mh->start_movie(&re->r, re->rectx, re->recty); @@ -2673,6 +2681,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) /* UGLY WARNING */ G.rendering= 0; + re->result_ok= 1; } /* note; repeated win/disprect calc... solve that nicer, also in compo */ |