[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