Commit: ff97dcebf301f78ffb56ea464209c3847b75e5f6
Author: Brecht Van Lommel
Date:   Thu Nov 2 14:29:42 2017 +0100
Branches: master
https://developer.blender.org/rBff97dcebf301f78ffb56ea464209c3847b75e5f6

Fix T53182: cancelling save buffers + denoising render clears image.

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

M       intern/cycles/blender/blender_session.cpp
M       source/blender/render/intern/include/render_types.h
M       source/blender/render/intern/source/external_engine.c
M       source/blender/render/intern/source/pipeline.c
M       source/blender/render/intern/source/render_result.c

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

diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index 2377c987b38..73383ad5080 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -340,7 +340,7 @@ void 
BlenderSession::do_write_update_render_tile(RenderTile& rtile, bool do_upda
                        update_render_result(b_rr, b_rlay, rtile);
                }
 
-               end_render_result(b_engine, b_rr, true, highlight, true);
+               end_render_result(b_engine, b_rr, true, highlight, false);
        }
        else {
                /* write result */
diff --git a/source/blender/render/intern/include/render_types.h 
b/source/blender/render/intern/include/render_types.h
index f9942bef61f..45206f21ae4 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -118,7 +118,8 @@ typedef struct RenderPart {
 enum {
        PART_STATUS_NONE        = 0,
        PART_STATUS_IN_PROGRESS = 1,
-       PART_STATUS_READY       = 2
+       PART_STATUS_RENDERED    = 2,
+       PART_STATUS_MERGED      = 3
 };
 
 /* controls state of render, everything that's read-only during render stage */
diff --git a/source/blender/render/intern/source/external_engine.c 
b/source/blender/render/intern/source/external_engine.c
index 3358d7a855b..b1cd23d0827 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -273,7 +273,7 @@ void RE_engine_end_result(RenderEngine *engine, 
RenderResult *result, int cancel
                RenderPart *pa = get_part_from_result(re, result);
 
                if (pa) {
-                       pa->status = PART_STATUS_READY;
+                       pa->status = (merge_results)? PART_STATUS_MERGED: 
PART_STATUS_RENDERED;
                }
                else if (re->result->do_exr_tile) {
                        /* if written result does not match any tile and we are 
using save
@@ -284,7 +284,7 @@ void RE_engine_end_result(RenderEngine *engine, 
RenderResult *result, int cancel
 
        if (!cancel || merge_results) {
                if (re->result->do_exr_tile) {
-                       if (!cancel) {
+                       if (!cancel && merge_results) {
                                render_result_exr_file_merge(re->result, 
result, re->viewname);
                        }
                }
diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index a0ebe241569..ce2fd3a1a48 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1133,7 +1133,7 @@ static void *do_part_thread(void *pa_v)
                BLI_rw_mutex_unlock(&R.resultmutex);
        }
        
-       pa->status = PART_STATUS_READY;
+       pa->status = PART_STATUS_MERGED;
        
        return NULL;
 }
@@ -1239,7 +1239,7 @@ static int sort_and_queue_parts(Render *re, int minx, 
ThreadQueue *workqueue)
        
        /* find center of rendered parts, image center counts for 1 too */
        for (pa = re->parts.first; pa; pa = pa->next) {
-               if (pa->status == PART_STATUS_READY) {
+               if (pa->status >= PART_STATUS_RENDERED) {
                        centx += BLI_rcti_cent_x(&pa->disprect);
                        centy += BLI_rcti_cent_y(&pa->disprect);
                        tot++;
diff --git a/source/blender/render/intern/source/render_result.c 
b/source/blender/render/intern/source/render_result.c
index df51cd3c2e6..aa0c7357302 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -1063,7 +1063,7 @@ void render_result_save_empty_result_tiles(Render *re)
                        IMB_exr_clear_channels(rl->exrhandle);
                
                        for (pa = re->parts.first; pa; pa = pa->next) {
-                               if (pa->status != PART_STATUS_READY) {
+                               if (pa->status != PART_STATUS_MERGED) {
                                        int party = pa->disprect.ymin - 
re->disprect.ymin + pa->crop;
                                        int partx = pa->disprect.xmin - 
re->disprect.xmin + pa->crop;
                                        
IMB_exrtile_write_channels(rl->exrhandle, partx, party, 0, re->viewname);

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

Reply via email to