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:
authorTon Roosendaal <ton@blender.org>2009-06-07 17:16:31 +0400
committerTon Roosendaal <ton@blender.org>2009-06-07 17:16:31 +0400
commitc1135d489bf7c41b2e081b593bac08e62bf980a3 (patch)
tree9f9bec01fa81c059e5dd37eda8cc1572b1eca021 /source/blender/render
parent673a39dab1827def82c8b405df6d6704e140c6fe (diff)
2.5
Preview renders now re-use a rendered buffer when size is same. Looks nicer while sliding, and no memory free/allocating.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/pipeline.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 683bb9eb1a0..1de41d086de 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1121,8 +1121,13 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, int winx, int winy
make_sample_tables(re);
/* if preview render, we try to keep old result */
- if(re->result && (re->r.scemode & R_NODE_PREVIEW) &&
- re->result->rectx==re->rectx && re->result->recty==re->recty);
+ if(re->r.scemode & R_PREVIEWBUTS) {
+ if(re->result && re->result->rectx==re->rectx && re->result->recty==re->recty);
+ else {
+ RE_FreeRenderResult(re->result);
+ re->result= NULL;
+ }
+ }
else {
/* make empty render result, so display callbacks can initialize */
@@ -1288,8 +1293,11 @@ static void *do_part_thread(void *pa_v)
save_render_result_tile(rr, rrpart);
}
- else if(render_display_draw_enabled(&R))
- merge_render_result(R.result, pa->result);
+ else if(render_display_draw_enabled(&R)) {
+ /* on break, don't merge in result for preview renders, looks nicer */
+ if(R.test_break(R.tbh) && (R.r.scemode & R_PREVIEWBUTS));
+ else merge_render_result(R.result, pa->result);
+ }
}
pa->ready= 1;
@@ -1483,14 +1491,16 @@ static void threaded_tile_processor(Render *re)
int rendering=1, counter= 1, drawtimer=0, hasdrawn, minx=0;
/* first step; free the entire render result, make new, and/or prepare exr buffer saving */
- RE_FreeRenderResult(re->result);
+ if(re->result==NULL || !(re->r.scemode & R_PREVIEWBUTS)) {
+ RE_FreeRenderResult(re->result);
- if(re->sss_points)
- re->result= new_render_result(re, &re->disprect, 0, 0);
- else if(re->r.scemode & R_FULL_SAMPLE)
- re->result= new_full_sample_buffers_exr(re);
- else
- re->result= new_render_result(re, &re->disprect, 0, re->r.scemode & R_EXR_TILE_FILE);
+ if(re->sss_points)
+ re->result= new_render_result(re, &re->disprect, 0, 0);
+ else if(re->r.scemode & R_FULL_SAMPLE)
+ re->result= new_full_sample_buffers_exr(re);
+ else
+ re->result= new_render_result(re, &re->disprect, 0, re->r.scemode & R_EXR_TILE_FILE);
+ }
if(re->result==NULL)
return;