[Bf-blender-cvs] [92d846c] multiview: Viewer Node: remove unused buffers when number of views change

Dalai Felinto noreply at git.blender.org
Tue Aug 19 15:22:22 CEST 2014


Commit: 92d846c7bb4e05c91780f0ed523a6c98b0f34fb3
Author: Dalai Felinto
Date:   Tue Aug 19 14:54:12 2014 +0200
Branches: multiview
https://developer.blender.org/rB92d846c7bb4e05c91780f0ed523a6c98b0f34fb3

Viewer Node: remove unused buffers when number of views change

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

M	source/blender/blenkernel/BKE_image.h
M	source/blender/blenkernel/intern/image.c
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 e48ccdc..fd2dec0 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -52,6 +52,7 @@ struct Main;
 void   BKE_images_init(void);
 void   BKE_images_exit(void);
 
+void    BKE_image_free_cached_frames(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 d5cb1e1..d7656c9 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -256,6 +256,11 @@ static void image_free_cahced_frames(Image *image)
 	}
 }
 
+void BKE_image_free_cached_frames(Image *image)
+{
+	image_free_cahced_frames(image);
+}
+
 /**
  * Simply free the image data from memory,
  * on display the image can load again (except for render buffers).
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cpp b/source/blender/compositor/nodes/COM_ViewerNode.cpp
index d3df5d5..5edbe31 100644
--- a/source/blender/compositor/nodes/COM_ViewerNode.cpp
+++ b/source/blender/compositor/nodes/COM_ViewerNode.cpp
@@ -22,6 +22,7 @@
 
 #include "COM_ViewerNode.h"
 #include "BKE_global.h"
+#include "BKE_image.h"
 #include "BLI_listbase.h"
 
 #include "COM_ViewerOperation.h"
@@ -32,6 +33,17 @@ ViewerNode::ViewerNode(bNode *editorNode) : Node(editorNode)
 	/* pass */
 }
 
+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++;
+	return totviews;
+}
+
 static bool ViewerNodeIsStereo(const RenderData *rd)
 {
 	SceneRenderView *srv[2];
@@ -101,6 +113,14 @@ void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorC
 			image->flag &= ~IMA_IS_STEREO;
 			imageUser->flag &= ~IMA_SHOW_STEREO;
 		}
+
+		size_t num_views = ViewerNodeViewsCount(context.getRenderData());
+		size_t num_caches = 1;
+
+		if (num_views != num_caches) {
+			BKE_image_free_cached_frames(image);
+		}
+
 		BLI_unlock_thread(LOCK_DRAW_IMAGE);
 	}
 }




More information about the Bf-blender-cvs mailing list