[Bf-blender-cvs] [b239314] multiview: Refactor to use view name instead of view id

Dalai Felinto noreply at git.blender.org
Tue Sep 2 11:55:03 CEST 2014


Commit: b239314f295cbaefc2fb634550ae8852620177f7
Author: Dalai Felinto
Date:   Tue Sep 2 02:13:43 2014 +0200
Branches: multiview
https://developer.blender.org/rBb239314f295cbaefc2fb634550ae8852620177f7

Refactor to use view name instead of view id

This was is partly from the original code review round. At that time
Brecht Van Lommel suggested using names for the API instead of integers
(as we do for RenderLayers). I went a bit further and changed *most* of
the code to use strings.

The only parts that still use view_id are the ones closely related to UserImage.

That simplify the code and should make the code easier to understand,
review and maintain.

I tested many (if not all) of the supported areas, and apparently things
are working. But given the size of the intervention I wouldn't be
surprised if something stopped working, so please report.

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_session.h
M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/compositor/COM_compositor.h
M	source/blender/compositor/intern/COM_CompositorContext.h
M	source/blender/compositor/intern/COM_ExecutionSystem.cpp
M	source/blender/compositor/intern/COM_ExecutionSystem.h
M	source/blender/compositor/intern/COM_Node.cpp
M	source/blender/compositor/intern/COM_Node.h
M	source/blender/compositor/intern/COM_compositor.cpp
M	source/blender/compositor/nodes/COM_CompositorNode.cpp
M	source/blender/compositor/nodes/COM_ImageNode.cpp
M	source/blender/compositor/nodes/COM_OutputFileNode.cpp
M	source/blender/compositor/nodes/COM_RenderLayersNode.cpp
M	source/blender/compositor/nodes/COM_SplitViewerNode.cpp
M	source/blender/compositor/nodes/COM_SwitchViewNode.cpp
M	source/blender/compositor/nodes/COM_ViewerNode.cpp
M	source/blender/compositor/operations/COM_CompositorOperation.cpp
M	source/blender/compositor/operations/COM_CompositorOperation.h
M	source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp
M	source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h
M	source/blender/compositor/operations/COM_OutputFileOperation.cpp
M	source/blender/compositor/operations/COM_OutputFileOperation.h
M	source/blender/compositor/operations/COM_RenderLayersProg.cpp
M	source/blender/compositor/operations/COM_RenderLayersProg.h
M	source/blender/compositor/operations/COM_ViewerOperation.cpp
M	source/blender/compositor/operations/COM_ViewerOperation.h
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/space_node/node_edit.c
M	source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
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/makesrna/intern/rna_render.c
M	source/blender/nodes/composite/node_composite_tree.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/include/render_result.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/envmap.c
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/initrender.c
M	source/blender/render/intern/source/pipeline.c
M	source/blender/render/intern/source/render_result.c
M	source/blender/render/intern/source/rendercore.c
M	source/blender/render/intern/source/zbuf.c

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 65c9c41..438b560 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -318,9 +318,9 @@ static ShaderEvalType get_shader_type(const string& pass_type)
 		return SHADER_EVAL_BAKE;
 }
 
-static BL::RenderResult begin_render_result(BL::RenderEngine b_engine, int x, int y, int w, int h, const char *layername, int view)
+static BL::RenderResult begin_render_result(BL::RenderEngine b_engine, int x, int y, int w, int h, const char *layername, const char *viewname)
 {
-	return b_engine.begin_result(x, y, w, h, layername, view);
+	return b_engine.begin_result(x, y, w, h, layername, viewname);
 }
 
 static void end_render_result(BL::RenderEngine b_engine, BL::RenderResult b_rr, bool cancel, bool do_merge_results)
@@ -337,7 +337,7 @@ void BlenderSession::do_write_update_render_tile(RenderTile& rtile, bool do_upda
 	int h = params.height;
 
 	/* get render result */
-	BL::RenderResult b_rr = begin_render_result(b_engine, x, y, w, h, b_rlay_name.c_str(), b_rview_id);
+	BL::RenderResult b_rr = begin_render_result(b_engine, x, y, w, h, b_rlay_name.c_str(), b_rview_name.c_str());
 
 	/* can happen if the intersected rectangle gives 0 width or height */
 	if (b_rr.ptr.data == NULL) {
@@ -402,14 +402,14 @@ void BlenderSession::render()
 
 	/* render each layer */
 	BL::RenderSettings r = b_scene.render();
-	BL::RenderSettings::layers_iterator b_iter;
-	BL::RenderResult::views_iterator b_iterv;
+	BL::RenderSettings::layers_iterator b_layer_iter;
+	BL::RenderResult::views_iterator b_view_iter;
 	
-	for(r.layers.begin(b_iter); b_iter != r.layers.end(); ++b_iter) {
-		b_rlay_name = b_iter->name();
+	for(r.layers.begin(b_layer_iter); b_layer_iter != r.layers.end(); ++b_layer_iter) {
+		b_rlay_name = b_layer_iter->name();
 
 		/* temporary render result to find needed passes and views */
-		BL::RenderResult b_rr = begin_render_result(b_engine, 0, 0, 1, 1, b_rlay_name.c_str(), -1);
+		BL::RenderResult b_rr = begin_render_result(b_engine, 0, 0, 1, 1, b_rlay_name.c_str(), NULL);
 		BL::RenderResult::layers_iterator b_single_rlay;
 		b_rr.layers.begin(b_single_rlay);
 
@@ -442,7 +442,7 @@ void BlenderSession::render()
 		}
 
 		buffer_params.passes = passes;
-		scene->film->pass_alpha_threshold = b_iter->pass_alpha_threshold();
+		scene->film->pass_alpha_threshold = b_layer_iter->pass_alpha_threshold();
 		scene->film->tag_passes_update(scene, passes);
 		scene->film->tag_update(scene);
 		scene->integrator->tag_update(scene);
@@ -450,10 +450,10 @@ void BlenderSession::render()
 		/* update scene */
 		sync->sync_data(b_v3d, b_engine.camera_override(), &python_thread_state, b_rlay_name.c_str());
 
-		for(b_rr.views.begin(b_iterv), b_rview_id=0; b_iterv != b_rr.views.end(); ++b_iterv, b_rview_id++) {
+		for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter) {
 
 			/* set the current view */
-			b_engine.active_view_set(b_rview_id);
+			b_engine.active_view_set(b_view_iter->name().c_str());
 
 			/* update scene */
 			sync->sync_camera(b_render, b_engine.camera_override(), width, height);
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index e07a710..619aa6b 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -89,7 +89,7 @@ public:
 	BL::SpaceView3D b_v3d;
 	BL::RegionView3D b_rv3d;
 	string b_rlay_name;
-	int b_rview_id;
+	string b_rview_name;
 
 	string last_status;
 	float last_progress;
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 05c1fb0..cba45df 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -946,7 +946,7 @@ void            ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMateria
 struct CompBuf;
 void ntreeCompositExecTree(struct Scene *scene, struct bNodeTree *ntree, struct RenderData *rd, int rendering, int do_previews,
                            const struct ColorManagedViewSettings *view_settings, const struct ColorManagedDisplaySettings *display_settings,
-                           int view_id);
+                           const char *view_name);
 void ntreeCompositTagRender(struct Scene *sce);
 int ntreeCompositTagAnimated(struct bNodeTree *ntree);
 void ntreeCompositTagGenerators(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 47fd27b..d34575a 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -149,7 +149,10 @@ double BKE_scene_unit_scale(const struct UnitSettings *unit, const int unit_type
 bool BKE_scene_is_stereo3d(const struct RenderData *rd);
 size_t BKE_scene_num_views(const struct RenderData *rd);
 bool BKE_scene_render_view_active(const struct RenderData *rd, const struct SceneRenderView *srv);
+bool BKE_scene_render_view_first(const struct RenderData *rd, const char *viewname);
+bool BKE_scene_render_view_last(const struct RenderData *rd, const char *viewname);
 struct SceneRenderView *BKE_scene_render_view_findindex(const struct RenderData *rd, const int view_id);
+size_t BKE_scene_view_get_id(const struct RenderData *rd, const char *viewname);
 void BKE_scene_videos_dimensions(const struct RenderData *rd, const size_t width, const size_t height, size_t *r_width, size_t *r_height);
 size_t BKE_scene_num_videos(const struct RenderData *rd);
 
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 83574fe..e41948e 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -2120,6 +2120,46 @@ bool BKE_scene_render_view_active(const RenderData *rd, const SceneRenderView *s
 	return false;
 }
 
+/* return true if viewname is the first or if the name is NULL or not found*/
+bool BKE_scene_render_view_first(const RenderData *rd, const char *viewname)
+{
+	SceneRenderView *srv;
+
+	if ((rd->scemode & R_MULTIVIEW) == 0)
+		return true;
+
+	if ((!viewname) || (!viewname[0]))
+		return true;
+
+	for (srv = rd->views.first; srv; srv = srv->next) {
+		if (BKE_scene_render_view_active(rd, srv)) {
+			return strcmp(viewname, srv->name) == 0;
+		}
+	}
+
+	return true;
+}
+
+/* return true if viewname is the last or if the name is NULL or not found */
+bool BKE_scene_render_view_last(const RenderData *rd, const char *viewname)
+{
+	SceneRenderView *srv;
+
+	if ((rd->scemode & R_MULTIVIEW) == 0)
+		return true;
+
+	if ((!viewname) || (!viewname[0]))
+		return true;
+
+	for (srv = rd->views.last; srv; srv = srv->prev) {
+		if (BKE_scene_render_view_active(rd, srv)) {
+			return strcmp(viewname, srv->name) == 0;
+		}
+	}
+
+	return true;
+}
+
 SceneRenderView *BKE_scene_render_view_findindex(const RenderData *rd, const int view_id)
 {
 	SceneRenderView *srv;
@@ -2138,6 +2178,30 @@ SceneRenderView *BKE_scene_render_view_findindex(const RenderData *rd, const int
 	return srv;
 }
 
+size_t BKE_scene_view_get_id(const RenderData *rd, const char *viewname)
+{
+	SceneRenderView *srv;
+	size_t nr;
+
+	if ((rd->scemode & R_MULTIVIEW) == 0)
+		return 0;
+
+	if ((!viewname) || (!viewname[0]))
+		return 0;
+
+	nr = 0;
+	for (srv = rd->views.first, nr = 0; srv; srv = srv->next) {
+		if (BKE_scene_render_view_active(rd, srv)) {
+			if (strcmp(viewname, srv->name) == 0)
+				return nr;
+			else
+				nr += 1;
+		}
+	}
+
+	return 0;
+}
+
 void BKE_scene_videos_dimensions(const RenderData *rd, const size_t width, const size_t height, size_t *r_width, size_t *r_height)
 {
 	if ((rd->scemode & R_MULTIVIEW) &&
diff --git a/source/blender/compositor/COM_compositor.h b/source/blender/compositor/COM_compositor.h
index d8063d7..8b0a617 100644
--- a/source/blender/compositor/COM_compositor.h
+++ b/source/blender/compositor/COM_compositor.h
@@ -316,7 +316,8 @@ extern "C" {
  *            generation in display space
  */
 void COM_execute(RenderData *rd, Scene *scene, bNodeTree *editingtree, int rendering,
-                 const ColorManagedViewSettings *viewSettings, const ColorManagedDisplaySettings *displaySettings, const int view_id);
+                 const ColorManagedViewSettings *viewSettings, const ColorManagedDisplaySettings *displaySettings,
+                 const char *viewName);
 
 /**
  * @brief Deinitialize the compositor caches and allocated memory.
diff --git a/source/blender/compositor/intern/COM_CompositorContext.h b/source/blender/compositor/intern/COM_CompositorContext.h
index 41349a4..5a1cf2e 100644
--- a/source/blender/compositor/intern/COM_CompositorContext.h
+++ b/source/blender/compositor/intern/COM_CompositorContext.h
@@ -88,9 +88,9 @@ private:
 	const ColorManagedDisplaySettings *m_displaySettings;
 
 	/**
-	 * @brief active view id (from all views, not only the rendering)
+	 * @brief active rendering view name
 	 */
-	int m_view_id;
+	const char *m_viewName;
 
 public:
 	/**
@@ -189,12 +189,12 @@ public:
 	/**
 	 * @brief get the active rendering view
 	 */
-	int getViewId() const { return this->m_view_id; }
+	const char *getViewName() const { return this->m_viewName; }
 
 	/**
 	 * @brief set the active rendering view
 	 */
-	void setViewId(int view_id) { this->m_view_id = view_id; }
+	void setViewName(const char *viewName) { this->m_viewName = viewName; }
 
 	int getChunksize() const { return this->getbNodeTree()->chunksize; }
 	
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.cpp b/source/blender/compositor/intern/COM_ExecutionSystem.cpp
index 25a18b2..9646a25 100644
--- a/source/blender/compositor/intern/COM_ExecutionSystem.cpp
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.cpp
@@ -44,9 +44,9 @@ extern "C" {
 
 ExecutionSystem::ExecutionSystem(RenderData *rd, Scene *scene, bNodeTree *editingtree, bool rendering, bool fastcalculation,
                                  const ColorManagedViewSettings *viewSettings, const ColorManagedDisplaySettings *displaySettings,
-                                 const int view_id)
+                                 const char *viewName)
 {
-	this->m_context.setViewId(view_id);
+	this->m_context.setViewN

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list