[Bf-blender-cvs] [f424d43] multiview: Viewer Node: further fixing

Dalai Felinto noreply at git.blender.org
Tue Aug 19 18:01:57 CEST 2014


Commit: f424d433f6df54bac471e72833cd7217e5ba96ff
Author: Dalai Felinto
Date:   Tue Aug 19 18:00:53 2014 +0200
Branches: multiview
https://developer.blender.org/rBf424d433f6df54bac471e72833cd7217e5ba96ff

Viewer Node: further fixing

* creating float buffers for new viewer
* give correct view count when using basic stereo
* update image when changing menu
* only get rid of old cache when needed
* crash when using backdrop

===================================================================

M	source/blender/blenkernel/BKE_image.h
M	source/blender/blenkernel/intern/image.c
M	source/blender/compositor/nodes/COM_ViewerNode.cpp
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/imbuf/IMB_moviecache.h
M	source/blender/imbuf/intern/moviecache.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index fd2dec0..e9f02e3 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -53,6 +53,7 @@ void   BKE_images_init(void);
 void   BKE_images_exit(void);
 
 void    BKE_image_free_cached_frames(struct Image *image);
+int     BKE_image_cache_count(struct Image *image);
 void    BKE_image_free_buffers(struct Image *image);
 /* call from library */
 void    BKE_image_free(struct Image *image);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index d7656c9..f6f790e 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -261,6 +261,14 @@ void BKE_image_free_cached_frames(Image *image)
 	image_free_cahced_frames(image);
 }
 
+int BKE_image_cache_count(Image *image)
+{
+	if (image->cache)
+		return IMB_moviecache_count(image->cache);
+	else
+		return 0;
+}
+
 /**
  * Simply free the image data from memory,
  * on display the image can load again (except for render buffers).
@@ -3167,7 +3175,7 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
 					frame = 0; // XXX iuser ? iuser->framenr : 0;
 
 					if ((ima->flag & IMA_IS_STEREO) &&
-					    (iuser->flag & IMA_SHOW_STEREO))
+					    iuser && (iuser->flag & IMA_SHOW_STEREO))
 					{
 						index = iuser->eye;
 					}
@@ -3179,7 +3187,7 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
 					if (!ibuf) {
 						/* Composite Viewer, all handled in compositor */
 						/* fake ibuf, will be filled in compositor */
-						ibuf = IMB_allocImBuf(256, 256, 32, IB_rect);
+						ibuf = IMB_allocImBuf(256, 256, 32, IB_rect | IB_rectfloat);
 						image_assign_ibuf(ima, ibuf, index, frame);
 					}
 				}
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cpp b/source/blender/compositor/nodes/COM_ViewerNode.cpp
index 5edbe31..5c0eb31 100644
--- a/source/blender/compositor/nodes/COM_ViewerNode.cpp
+++ b/source/blender/compositor/nodes/COM_ViewerNode.cpp
@@ -38,9 +38,18 @@ static size_t ViewerNodeViewsCount(const RenderData *rd)
 	SceneRenderView *srv;
 	size_t totviews	= 0;
 
-	for (srv = (SceneRenderView *)rd->views.first; srv; srv = srv->next)
-		if ((srv->viewflag & SCE_VIEW_DISABLE) == 0)
-			totviews++;
+	if (rd->views_setup == SCE_VIEWS_SETUP_BASIC) {
+		if (BLI_findstring(&rd->views, STEREO_LEFT_NAME, offsetof(SceneRenderView, name)))
+		    totviews++;
+
+		if (BLI_findstring(&rd->views, STEREO_RIGHT_NAME, offsetof(SceneRenderView, name)))
+		    totviews++;
+	}
+	else {
+		for (srv = (SceneRenderView *)rd->views.first; srv; srv = srv->next)
+			if ((srv->viewflag & SCE_VIEW_DISABLE) == 0)
+				totviews++;
+	}
 	return totviews;
 }
 
@@ -115,7 +124,7 @@ void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorC
 		}
 
 		size_t num_views = ViewerNodeViewsCount(context.getRenderData());
-		size_t num_caches = 1;
+		size_t num_caches = BKE_image_cache_count(image);
 
 		if (num_views != num_caches) {
 			BKE_image_free_cached_frames(image);
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index dc9fb3a..f996823 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -647,6 +647,7 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Rende
 		}
 
 		but = uiDefMenuBut(block, ui_imageuser_view_menu_viewer, rnd_pt, display_name, 0, 0, wmenu1, UI_UNIT_Y, TIP_("Select View"));
+		uiButSetFunc(but, image_multi_cb, rr, iuser);
 		uiButSetMenuFromPulldown(but);
 	}
 }
diff --git a/source/blender/imbuf/IMB_moviecache.h b/source/blender/imbuf/IMB_moviecache.h
index 0c72d1b..9d31561 100644
--- a/source/blender/imbuf/IMB_moviecache.h
+++ b/source/blender/imbuf/IMB_moviecache.h
@@ -77,4 +77,5 @@ void IMB_moviecacheIter_step(struct MovieCacheIter *iter);
 struct ImBuf *IMB_moviecacheIter_getImBuf(struct MovieCacheIter *iter);
 void *IMB_moviecacheIter_getUserKey(struct MovieCacheIter *iter);
 
+size_t IMB_moviecache_count(struct MovieCache *cache);
 #endif
diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c
index ea75673..3a54e85 100644
--- a/source/blender/imbuf/intern/moviecache.c
+++ b/source/blender/imbuf/intern/moviecache.c
@@ -619,3 +619,18 @@ void *IMB_moviecacheIter_getUserKey(struct MovieCacheIter *iter)
 	MovieCacheKey *key = BLI_ghashIterator_getKey((GHashIterator *) iter);
 	return key->userkey;
 }
+
+size_t IMB_moviecache_count(MovieCache *cache)
+{
+	GHashIterator *iter;
+	size_t tot = 0;
+
+	iter = BLI_ghashIterator_new(cache->hash);
+	while (!BLI_ghashIterator_done(iter)) {
+		BLI_ghashIterator_step(iter);
+		tot++;
+	}
+
+	BLI_ghashIterator_free(iter);
+	return tot;
+}




More information about the Bf-blender-cvs mailing list