diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index ea63161..0312633 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -224,7 +224,7 @@ bool BKE_image_is_openexr(struct Image *ima);
void BKE_image_backup_render(struct Scene *scene, struct Image *ima);
/* for singlelayer openexr saving */
-bool BKE_image_save_openexr_multiview(struct Image *ima, struct ImBuf *ibuf, const char *filepath, const int flags);
+bool BKE_image_save_openexr_multiview(struct Image *ima, struct Scene *scene, struct ImBuf *ibuf, const char *filepath, const int flags);
/* goes over all textures that use images */
void BKE_image_free_all_textures(void);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index ff30543..99488fb 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2956,14 +2956,23 @@ static const char *image_get_view_cb(void *base, const int view_id)
}
#endif /* WITH_OPENEXR */
+struct EXRData {
+ Image *ima;
+ Scene *scene;
+};
+
#ifdef WITH_OPENEXR
static ImBuf *image_get_buffer_cb(void *base, const int view_id)
{
- Image *ima = base;
+ struct EXRData *data = base;
+ Image *ima = data->ima;
+ Scene *scene = data->scene;
+
ImageUser iuser = {0};
iuser.view = view_id;
iuser.ok = 1;
+ iuser.scene = scene;
BKE_image_multiview_index(ima, &iuser);
@@ -2971,22 +2980,23 @@ static ImBuf *image_get_buffer_cb(void *base, const int view_id)
}
#endif /* WITH_OPENEXR */
-bool BKE_image_save_openexr_multiview(Image *ima, ImBuf *ibuf, const char *filepath, const int flags)
+bool BKE_image_save_openexr_multiview(Image *ima, Scene *scene, ImBuf *ibuf, const char *filepath, const int flags)
{
#ifdef WITH_OPENEXR
char name[FILE_MAX];
bool ok;
+ struct EXRData data = {ima, scene};
BLI_strncpy(name, filepath, sizeof(name));
BLI_path_abs(name, G.main->name);
- ibuf->userdata = ima;
+ ibuf->userdata = &data;
ok = IMB_exr_multiview_save(ibuf, name, flags, BLI_listbase_count(&ima->views), image_get_view_cb, image_get_buffer_cb);
ibuf->userdata = NULL;
return ok;
#else
- UNUSED_VARS(ima, ibuf, filepath, flags);
+ UNUSED_VARS(ima, scene, ibuf, filepath, flags);
return false;
#endif
}
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index ab062eb..308bb2f 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1739,7 +1739,7 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI
else if ((imf->imtype == R_IMF_IMTYPE_OPENEXR) && (imf->views_format == R_IMF_VIEWS_MULTIVIEW)) {
/* treat special Openexr case separetely (this is the singlelayer multiview OpenEXR */
BKE_imbuf_write_prepare(ibuf, imf);
- ok = BKE_image_save_openexr_multiview(ima, ibuf, simopts->filepath, (IB_rect | IB_zbuf | IB_zbuffloat | IB_multiview));
+ ok = BKE_image_save_openexr_multiview(ima, scene, ibuf, simopts->filepath, (IB_rect | IB_zbuf | IB_zbuffloat | IB_multiview));
ED_space_image_release_buffer(sima, ibuf, lock);
}
/* regular mono pipeline */