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

This commit is contained in:
Brecht Van Lommel 2017-11-02 14:29:42 +01:00
parent 6355d98267
commit ff97dcebf3
Notes: blender-bot 2023-02-14 06:55:40 +01:00
Referenced by issue #53182, Cancelling Render clears the image when Save Buffers and Noise Reduc is on
5 changed files with 8 additions and 7 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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);
}
}

View File

@ -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++;

View File

@ -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);