[Bf-blender-cvs] [a16fef8] multiview: Move code to reset Viewer Image cache to BKE_image.h

Dalai Felinto noreply at git.blender.org
Sun Sep 7 01:17:39 CEST 2014


Commit: a16fef8e61205b0c820d7bb0dfb72cdd071f0aa4
Author: Dalai Felinto
Date:   Wed Sep 3 16:11:45 2014 +0200
Branches: multiview
https://developer.blender.org/rBa16fef8e61205b0c820d7bb0dfb72cdd071f0aa4

Move code to reset Viewer Image cache to BKE_image.h

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

M	source/blender/blenkernel/BKE_image.h
M	source/blender/blenkernel/intern/image.c
M	source/blender/compositor/nodes/COM_SplitViewerNode.cpp
M	source/blender/compositor/nodes/COM_ViewerNode.cpp

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

diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index c83d1f3..c0221a5 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -101,6 +101,7 @@ void    free_old_images(void);
 /* ImageUser is in Texture, in Nodes, Background Image, Image Window, .... */
 /* should be used in conjunction with an ID * to Image. */
 struct ImageUser;
+struct RenderData;
 struct RenderPass;
 struct RenderResult;
 
@@ -182,6 +183,8 @@ void BKE_image_walk_all_users(const struct Main *mainp, void *customdata,
 
 /* ensures an Image exists for viewing nodes or render */
 struct Image *BKE_image_verify_viewer(int type, const char *name);
+/* reset viewer nodes cache when the number of cache doesn't match the needed cached views */
+void BKE_image_verify_viewer_cache(const struct RenderData *rd, struct Image *ima, struct ImageUser *iuser);
 
 /* force an ImBuf to become part of Image */
 void BKE_image_assign_ibuf(struct Image *ima, struct ImBuf *ibuf);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index d85d08f..7b591b0 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2170,6 +2170,32 @@ Image *BKE_image_verify_viewer(int type, const char *name)
 	return ima;
 }
 
+/* Reset the rederout or nodes image cache when the number of cache
+ * doesn't match the needed cached views */
+void BKE_image_verify_viewer_cache(const RenderData *rd, Image *ima, ImageUser *iuser)
+{
+	size_t num_views, num_caches;
+
+	BLI_lock_thread(LOCK_DRAW_IMAGE);
+
+	if (BKE_scene_is_stereo3d(rd)) {
+		ima->flag |= IMA_IS_STEREO;
+	}
+	else {
+		ima->flag &= ~IMA_IS_STEREO;
+		iuser->flag &= ~IMA_SHOW_STEREO;
+	}
+
+	num_views = BKE_scene_num_views(rd);
+	num_caches = BKE_image_cache_count(ima);
+
+	if (num_views != num_caches) {
+		BKE_image_free_cached_frames(ima);
+	}
+
+	BLI_unlock_thread(LOCK_DRAW_IMAGE);
+}
+
 void BKE_image_assign_ibuf(Image *ima, ImBuf *ibuf)
 {
 	image_assign_ibuf(ima, ibuf, IMA_NO_INDEX, 0);
diff --git a/source/blender/compositor/nodes/COM_SplitViewerNode.cpp b/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
index 447d469..b176dd0 100644
--- a/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
+++ b/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
@@ -75,22 +75,6 @@ void SplitViewerNode::convertToOperations(NodeConverter &converter, const Compos
 		converter.registerViewer(viewerOperation);
 
 	if (image && BKE_scene_render_view_first(context.getRenderData(), context.getViewName())) {
-		BLI_lock_thread(LOCK_DRAW_IMAGE);
-		if (BKE_scene_is_stereo3d(context.getRenderData())) {
-			image->flag |= IMA_IS_STEREO;
-		}
-		else {
-			image->flag &= ~IMA_IS_STEREO;
-			imageUser->flag &= ~IMA_SHOW_STEREO;
-		}
-
-		size_t num_views = BKE_scene_num_views(context.getRenderData());
-		size_t num_caches = BKE_image_cache_count(image);
-
-		if (num_views != num_caches) {
-			BKE_image_free_cached_frames(image);
-		}
-
-		BLI_unlock_thread(LOCK_DRAW_IMAGE);
+		BKE_image_verify_viewer_cache(context.getRenderData(), image, imageUser);
 	}
 }
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cpp b/source/blender/compositor/nodes/COM_ViewerNode.cpp
index 4662e47..7743701 100644
--- a/source/blender/compositor/nodes/COM_ViewerNode.cpp
+++ b/source/blender/compositor/nodes/COM_ViewerNode.cpp
@@ -82,22 +82,6 @@ void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorC
 		converter.registerViewer(viewerOperation);
 
 	if (image && BKE_scene_render_view_first(context.getRenderData(), context.getViewName())) {
-		BLI_lock_thread(LOCK_DRAW_IMAGE);
-		if (BKE_scene_is_stereo3d(context.getRenderData())) {
-			image->flag |= IMA_IS_STEREO;
-		}
-		else {
-			image->flag &= ~IMA_IS_STEREO;
-			imageUser->flag &= ~IMA_SHOW_STEREO;
-		}
-
-		size_t num_views = BKE_scene_num_views(context.getRenderData());
-		size_t num_caches = BKE_image_cache_count(image);
-
-		if (num_views != num_caches) {
-			BKE_image_free_cached_frames(image);
-		}
-
-		BLI_unlock_thread(LOCK_DRAW_IMAGE);
+		BKE_image_verify_viewer_cache(context.getRenderData(), image, imageUser);
 	}
 }




More information about the Bf-blender-cvs mailing list