[Bf-blender-cvs] [304f81b] multiview: Make sure left is always the first view
Dalai Felinto
noreply at git.blender.org
Wed Sep 17 14:12:26 CEST 2014
Commit: 304f81b0861b7d84b15a687b2eda8b51ce233a12
Author: Dalai Felinto
Date: Mon Sep 15 01:44:01 2014 +0200
Branches: multiview
https://developer.blender.org/rB304f81b0861b7d84b15a687b2eda8b51ce233a12
Make sure left is always the first view
===================================================================
M source/blender/blenkernel/intern/image.c
M source/blender/imbuf/intern/openexr/openexr_api.cpp
M source/blender/imbuf/intern/openexr/openexr_multi.h
M source/blender/imbuf/intern/openexr/openexr_stub.cpp
M source/blender/render/intern/source/render_result.c
===================================================================
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 476aae4..2199b59 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2793,7 +2793,27 @@ static void image_add_view_cb(void *base, const char *str)
iv = MEM_mallocN(sizeof(ImageView), "Viewer Image View");
BLI_strncpy(iv->name, str, sizeof(iv->name));
- BLI_addtail(&ima->views, iv);
+
+ /* For stereo drawing we need to ensure:
+ * STEREO_LEFT_NAME == STEREO_LEFT_ID and
+ * STEREO_RIGHT_NAME == STEREO_RIGHT_ID */
+
+ if (STREQ(str, STEREO_LEFT_NAME)) {
+ BLI_addhead(&ima->views, iv);
+ }
+ else if (STREQ(str, STEREO_RIGHT_NAME)) {
+ ImageView *left_iv = BLI_findstring(&ima->views, STEREO_LEFT_NAME, offsetof(ImageView, name));
+
+ if (left_iv == NULL) {
+ BLI_addhead(&ima->views, iv);
+ }
+ else {
+ BLI_insertlinkafter(&ima->views, left_iv, iv);
+ }
+ }
+ else {
+ BLI_addtail(&ima->views, iv);
+ }
}
static void image_add_buffer_cb(void *base, const char *str, ImBuf *ibuf, const int frame)
@@ -2808,8 +2828,6 @@ static void image_add_buffer_cb(void *base, const char *str, ImBuf *ibuf, const
return;
id = BLI_findstringindex(&ima->views, str, offsetof(ImageView, name));
-
- printf("%s : %s : %lu\n", __func__, str, id);
if (id == -1)
return;
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 78f13b1..28f275e 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -1265,7 +1265,7 @@ void IMB_exr_multilayer_convert(void *handle, void *base,
void * (*addlayer)(void *base, const char *str),
void (*addpass)(void *base, void *lay, const char *str,
float *rect, int totchan, const char *chan_id,
- const char *view, const int view_id))
+ const char *view))
{
ExrHandle *data = (ExrHandle *)handle;
ExrLayer *lay;
@@ -1285,7 +1285,7 @@ void IMB_exr_multilayer_convert(void *handle, void *base,
void *laybase = addlayer(base, lay->name);
if (laybase) {
for (pass = (ExrPass *)lay->passes.first; pass; pass = pass->next) {
- addpass(base, laybase, pass->internal_name, pass->rect, pass->totchan, pass->chan_id, pass->view, pass->view_id);
+ addpass(base, laybase, pass->internal_name, pass->rect, pass->totchan, pass->chan_id, pass->view);
pass->rect = NULL;
}
}
diff --git a/source/blender/imbuf/intern/openexr/openexr_multi.h b/source/blender/imbuf/intern/openexr/openexr_multi.h
index 61cee77..adf37ca 100644
--- a/source/blender/imbuf/intern/openexr/openexr_multi.h
+++ b/source/blender/imbuf/intern/openexr/openexr_multi.h
@@ -70,7 +70,7 @@ void IMB_exr_multilayer_convert(void *handle, void *base,
void * (*addview)(void *base, const char *str),
void * (*addlayer)(void *base, const char *str),
void (*addpass)(void *base, void *lay, const char *str, float *rect, int totchan,
- const char *chan_id, const char *view, const int view_id));
+ const char *chan_id, const char *view));
void IMB_exr_singlelayer_multiview_convert(void *handle, void *base,
void (*addview)(void *base, const char *str),
diff --git a/source/blender/imbuf/intern/openexr/openexr_stub.cpp b/source/blender/imbuf/intern/openexr/openexr_stub.cpp
index 3567afc..e764508 100644
--- a/source/blender/imbuf/intern/openexr/openexr_stub.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_stub.cpp
@@ -53,7 +53,7 @@ void IMB_exr_clear_channels (void *handle) { (void)handle; }
void IMB_exr_multilayer_convert (void *handle, void *base,
void * (*addlayer)(void *base, const char *str),
- void (*addpass)(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id, const char *view, const int view_id))
+ void (*addpass)(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id, const char *view))
{
(void)handle; (void)base; (void)addlayer; (void)addpass;
}
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index beb3e71..461600f 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -765,8 +765,9 @@ static void *ml_addlayer_cb(void *base, const char *str)
return rl;
}
-static void ml_addpass_cb(void *UNUSED(base), void *lay, const char *str, float *rect, int totchan, const char *chan_id, const char *view, const int view_id)
+static void ml_addpass_cb(void *base, void *lay, const char *str, float *rect, int totchan, const char *chan_id, const char *view)
{
+ RenderResult *rr = base;
RenderLayer *rl = lay;
RenderPass *rpass = MEM_callocN(sizeof(RenderPass), "loaded pass");
int a;
@@ -782,12 +783,15 @@ static void ml_addpass_cb(void *UNUSED(base), void *lay, const char *str, float
rpass->chan_id[a] = chan_id[a];
rpass->rect = rect;
- if (view[0] != '\0')
+ if (view[0] != '\0') {
BLI_snprintf(rpass->name, sizeof(rpass->name), "%s.%s", str, view);
- else
+ rpass->view_id = BLI_findstringindex(&rr->views, view, offsetof(RenderView, name));
+ }
+ else {
BLI_strncpy(rpass->name, str, sizeof(rpass->name));
+ rpass->view_id = 0;
+ }
- rpass->view_id = view_id;
BLI_strncpy(rpass->view, view, sizeof(rpass->view));
BLI_strncpy(rpass->internal_name, str, sizeof(rpass->internal_name));
}
@@ -798,9 +802,29 @@ static void *ml_addview_cb(void *base, const char *str)
RenderView *rv;
rv = MEM_callocN(sizeof(RenderView), "new render view");
- BLI_addtail(&rr->views, rv);
-
BLI_strncpy(rv->name, str, EXR_VIEW_MAXNAME);
+
+ /* For stereo drawing we need to ensure:
+ * STEREO_LEFT_NAME == STEREO_LEFT_ID and
+ * STEREO_RIGHT_NAME == STEREO_RIGHT_ID */
+
+ if (STREQ(str, STEREO_LEFT_NAME)) {
+ BLI_addhead(&rr->views, rv);
+ }
+ else if (STREQ(str, STEREO_RIGHT_NAME)) {
+ RenderView *left_rv = BLI_findstring(&rr->views, STEREO_LEFT_NAME, offsetof(RenderView, name));
+
+ if (left_rv == NULL) {
+ BLI_addhead(&rr->views, rv);
+ }
+ else {
+ BLI_insertlinkafter(&rr->views, left_rv, rv);
+ }
+ }
+ else {
+ BLI_addtail(&rr->views, rv);
+ }
+
return rv;
}
More information about the Bf-blender-cvs
mailing list