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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2015-11-30 02:51:30 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2015-11-30 02:54:45 +0300
commit5b90a6e188f78ee4544b528c55fb0f2a8f6e9fd6 (patch)
treeb48605900800fdcfd036d192b5c45b3a790624a9 /source
parentf448659a56210a093570bafa868a3a19761e67df (diff)
Fix T38245: render slot getting lost when switching slots while compositing.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/intern/image.c17
-rw-r--r--source/blender/editors/render/render_internal.c4
-rw-r--r--source/blender/editors/render/render_opengl.c2
-rw-r--r--source/blender/editors/space_node/node_edit.c2
5 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index ea63161e008..ff0b5a1d4bf 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -221,7 +221,7 @@ void BKE_image_release_renderresult(struct Scene *scene, struct Image *ima);
bool BKE_image_is_openexr(struct Image *ima);
/* for multiple slot render, call this before render */
-void BKE_image_backup_render(struct Scene *scene, struct Image *ima);
+void BKE_image_backup_render(struct Scene *scene, struct Image *ima, bool free_current_slot);
/* for singlelayer openexr saving */
bool BKE_image_save_openexr_multiview(struct Image *ima, struct ImBuf *ibuf, const char *filepath, const int flags);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index f4fce5c0019..6ff30134210 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2923,7 +2923,7 @@ bool BKE_image_is_openexr(struct Image *ima)
return false;
}
-void BKE_image_backup_render(Scene *scene, Image *ima)
+void BKE_image_backup_render(Scene *scene, Image *ima, bool free_current_slot)
{
/* called right before rendering, ima->renders contains render
* result pointers for everything but the current render */
@@ -2931,13 +2931,18 @@ void BKE_image_backup_render(Scene *scene, Image *ima)
int slot = ima->render_slot, last = ima->last_render_slot;
if (slot != last) {
- if (ima->renders[slot]) {
- RE_FreeRenderResult(ima->renders[slot]);
- ima->renders[slot] = NULL;
- }
-
ima->renders[last] = NULL;
RE_SwapResult(re, &ima->renders[last]);
+
+ if (ima->renders[slot]) {
+ if (free_current_slot) {
+ RE_FreeRenderResult(ima->renders[slot]);
+ ima->renders[slot] = NULL;
+ }
+ else {
+ RE_SwapResult(re, &ima->renders[slot]);
+ }
+ }
}
ima->last_render_slot = slot;
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index f44374b1d7b..a7038ac53cc 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -311,7 +311,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
- BKE_image_backup_render(scene, ima);
+ BKE_image_backup_render(scene, ima, true);
/* cleanup sequencer caches before starting user triggered render.
* otherwise, invalidated cache entries can make their way into
@@ -956,7 +956,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
/* get a render result image, and make sure it is empty */
ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
- BKE_image_backup_render(rj->scene, ima);
+ BKE_image_backup_render(rj->scene, ima, true);
rj->image = ima;
/* setup new render */
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 2e9ccc520d9..f94f3cdf758 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -559,7 +559,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
/* create image and image user */
oglrender->ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
BKE_image_signal(oglrender->ima, NULL, IMA_SIGNAL_FREE);
- BKE_image_backup_render(oglrender->scene, oglrender->ima);
+ BKE_image_backup_render(oglrender->scene, oglrender->ima, true);
oglrender->iuser.scene = scene;
oglrender->iuser.ok = 1;
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 413cdc208dd..a312888fc44 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -277,7 +277,7 @@ void ED_node_composite_job(const bContext *C, struct bNodeTree *nodetree, Scene
G.is_break = false;
#endif
- BKE_image_backup_render(scene, BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"));
+ BKE_image_backup_render(scene, BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"), false);
wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene_owner, "Compositing",
WM_JOB_EXCL_RENDER | WM_JOB_PROGRESS, WM_JOB_TYPE_COMPOSITE);