[Bf-blender-cvs] [967d659] multiview: From review: using image signal to handle needed updates after reload or image free
Dalai Felinto
noreply at git.blender.org
Tue Nov 25 18:56:46 CET 2014
Commit: 967d65960daa1e5fb2efd3451afacc3aa25c6911
Author: Dalai Felinto
Date: Mon Nov 24 17:09:29 2014 -0200
Branches: multiview
https://developer.blender.org/rB967d65960daa1e5fb2efd3451afacc3aa25c6911
>From review: using image signal to handle needed updates after reload or image free
===================================================================
M source/blender/blenkernel/BKE_image.h
M source/blender/blenkernel/intern/image.c
M source/blender/editors/space_image/image_ops.c
M source/blender/makesrna/intern/rna_image.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 3233a2b..bd9563e 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -204,9 +204,6 @@ struct RenderPass *BKE_image_multilayer_index(struct RenderResult *rr, struct Im
/* sets index offset for multiview files */
void BKE_image_multiview_index(struct Image *ima, struct ImageUser *iuser);
-/* called on image settings change (in ui) */
-void BKE_image_update_views_format(struct Scene *scene, struct Image *ima);
-
/* for multilayer images as well as for render-viewer */
bool BKE_image_is_multilayer(struct Image *ima);
struct RenderResult *BKE_image_acquire_renderresult(struct Scene *scene, struct Image *ima);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 551ef25..2529272 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -102,6 +102,7 @@ static SpinLock image_spin;
/* prototypes */
static size_t image_num_files(struct Image *ima);
static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r);
+static void image_update_views_format(Scene *scene, Image *ima);
/* max int, to indicate we don't store sequences in ibuf */
#define IMA_NO_INDEX 0x7FEFEFEF
@@ -2516,8 +2517,13 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
switch (signal) {
case IMA_SIGNAL_FREE:
BKE_image_free_buffers(ima);
- if (iuser)
+
+ if (iuser) {
iuser->ok = 1;
+ if (iuser->scene) {
+ image_update_views_format(iuser->scene, ima);
+ }
+ }
break;
case IMA_SIGNAL_SRC_CHANGE:
if (ima->type == IMA_TYPE_UV_TEST)
@@ -2598,8 +2604,12 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
else
BKE_image_free_buffers(ima);
- if (iuser)
+ if (iuser) {
iuser->ok = 1;
+ if (iuser->scene) {
+ image_update_views_format(iuser->scene, ima);
+ }
+ }
break;
case IMA_SIGNAL_USER_NEW_IMAGE:
@@ -4405,7 +4415,7 @@ ImBuf *BKE_image_get_first_ibuf(Image *image)
return ibuf;
}
-void BKE_image_update_views_format(Scene *scene, Image *ima)
+static void image_update_views_format(Scene *scene, Image *ima)
{
SceneRenderView *srv;
ImageView *iv;
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 1fce3ab..06fc2a3 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1098,8 +1098,6 @@ static int image_open_exec(bContext *C, wmOperator *op)
ima->views_format = imf->views_format;
*ima->stereo3d_format = imf->stereo3d_format;
-
- BKE_image_update_views_format(scene, ima);
}
else {
ima->flag &= IMA_IS_STEREO;
@@ -1153,6 +1151,7 @@ static int image_open_exec(bContext *C, wmOperator *op)
iuser->framenr = 1;
iuser->offset = frame_ofs - 1;
iuser->fie_ima = 2;
+ iuser->scene = scene;
BKE_image_init_imageuser(ima, iuser);
}
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 43bba64..4016a97 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -163,8 +163,9 @@ static void rna_Image_views_format_update(Main *UNUSED(bmain), Scene *scene, Poi
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf) {
- BKE_image_update_views_format(scene, ima);
- BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
+ ImageUser iuser = {NULL};
+ iuser.scene = scene;
+ BKE_image_signal(ima, &iuser, IMA_SIGNAL_FREE);
}
BKE_image_release_ibuf(ima, ibuf, lock);
More information about the Bf-blender-cvs
mailing list