[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