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:
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/source/external_engine.c12
-rw-r--r--source/blender/render/intern/source/render_result.c3
3 files changed, 15 insertions, 2 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 7e8713566e5..4c15ddd6833 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -91,6 +91,8 @@ typedef struct RenderLayer {
float *rectf; /* 4 float, standard rgba buffer (read not above!) */
float *acolrect; /* 4 float, optional transparent buffer, needs storage for display updates */
float *scolrect; /* 4 float, optional strand buffer, needs storage for display updates */
+ int *display_buffer; /* 4 char, optional color managed display buffer which is used when
+ * Save Buffer is enabled to display combined pass of the screen. */
int rectx, recty;
/* optional saved endresult on disk */
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index fa72d5f4057..b9c89f449a7 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -207,6 +207,11 @@ RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w,
result = render_result_new(re, &disprect, 0, RR_USE_MEM, layername);
+ /* Copy EXR tile settings, so pipeline knows whether this is a result
+ * for Save Buffers enabled rendering.
+ */
+ result->do_exr_tile = re->result->do_exr_tile;
+
/* todo: make this thread safe */
/* can be NULL if we CLAMP the width or height to 0 */
@@ -263,8 +268,11 @@ void RE_engine_end_result(RenderEngine *engine, RenderResult *result, int cancel
}
if (!cancel || merge_results) {
- if (re->result->do_exr_tile)
- render_result_exr_file_merge(re->result, result);
+ if (re->result->do_exr_tile) {
+ if (!cancel) {
+ render_result_exr_file_merge(re->result, result);
+ }
+ }
else if (!(re->test_break(re->tbh) && (re->r.scemode & R_BUTS_PREVIEW)))
render_result_merge(re->result, result);
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index 487de42515d..5e8b030c3fa 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -71,6 +71,7 @@ void render_result_free(RenderResult *res)
/* acolrect and scolrect are optionally allocated in shade_tile, only free here since it can be used for drawing */
if (rl->acolrect) MEM_freeN(rl->acolrect);
if (rl->scolrect) MEM_freeN(rl->scolrect);
+ if (rl->display_buffer) MEM_freeN(rl->display_buffer);
while (rl->passes.first) {
RenderPass *rpass = rl->passes.first;
@@ -501,6 +502,8 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
rl->recty = recty;
if (rr->do_exr_tile) {
+ rl->display_buffer = MEM_mapallocN(rectx * recty * sizeof(unsigned int), "Combined display space rgba");
+
rl->exrhandle = IMB_exr_get_handle();
IMB_exr_add_channel(rl->exrhandle, rl->name, "Combined.R", 0, 0, NULL);