[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