[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