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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-06-19 17:07:10 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-06-19 17:19:49 +0300
commit86c1cad1cf479be0b3125015926aeeb05d7b6065 (patch)
tree19901d80ce180f766b4aec36592d2b5d7cf644b1 /source/blender/blenkernel/intern/image.c
parent7c3ecbf040604d98375ac8839ca1787309f22372 (diff)
Fix missing render slots bugs after recent changes.
Diffstat (limited to 'source/blender/blenkernel/intern/image.c')
-rw-r--r--source/blender/blenkernel/intern/image.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index fc6530a2ca7..b5abdcae2d4 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -3041,17 +3041,28 @@ void BKE_image_backup_render(Scene *scene, Image *ima, bool free_current_slot)
/* called right before rendering, ima->renderslots contains render
* result pointers for everything but the current render */
Render *re = RE_GetSceneRender(scene);
- int slot = ima->render_slot, last = ima->last_render_slot;
- if (slot != last) {
- RenderSlot *last_slot = BKE_image_get_renderslot(ima, last);
+ /* Ensure we always have a valid render slot. */
+ if (!ima->renderslots.first) {
+ BKE_image_add_renderslot(ima, NULL);
+ ima->render_slot = 0;
+ ima->last_render_slot = 0;
+ }
+ else if (ima->render_slot >= BLI_listbase_count(&ima->renderslots)) {
+ ima->render_slot = 0;
+ ima->last_render_slot = 0;
+ }
+
+ RenderSlot *last_slot = BKE_image_get_renderslot(ima, ima->last_render_slot);
+ RenderSlot *cur_slot = BKE_image_get_renderslot(ima, ima->render_slot);
+
+ if (last_slot && ima->render_slot != ima->last_render_slot) {
last_slot->render = NULL;
RE_SwapResult(re, &last_slot->render);
- RenderSlot *cur_slot = BKE_image_get_renderslot(ima, slot);
if (cur_slot->render) {
if (free_current_slot) {
- BKE_image_clear_renderslot(ima, NULL, slot);
+ BKE_image_clear_renderslot(ima, NULL, ima->render_slot);
}
else {
RE_SwapResult(re, &cur_slot->render);
@@ -3059,7 +3070,7 @@ void BKE_image_backup_render(Scene *scene, Image *ima, bool free_current_slot)
}
}
- ima->last_render_slot = slot;
+ ima->last_render_slot = ima->render_slot;
}
/**************************** multiview load openexr *********************************/
@@ -4713,6 +4724,8 @@ static void image_update_views_format(Image *ima, ImageUser *iuser)
}
}
+/**************************** Render Slots ***************************/
+
RenderSlot *BKE_image_add_renderslot(Image *ima, const char *name)
{
RenderSlot *slot = MEM_callocN(sizeof(RenderSlot), "Image new Render Slot");
@@ -4801,7 +4814,6 @@ bool BKE_image_clear_renderslot(Image *ima, ImageUser *iuser, int index)
RenderSlot *BKE_image_get_renderslot(Image *ima, int index)
{
- RenderSlot *slot = BLI_findlink(&ima->renderslots, index);
- BLI_assert(slot);
- return slot;
+ /* Can be NULL for images without render slots. */
+ return BLI_findlink(&ima->renderslots, index);
}