[Bf-blender-cvs] [c9e5d92] master: Fix T43090: Cycles + Freestyle + border render = black render.

Tamito Kajiyama noreply at git.blender.org
Sat Jan 17 16:46:06 CET 2015


Commit: c9e5d9226b8c89f0081f8191f868c23e595b0c3f
Author: Tamito Kajiyama
Date:   Sat Jan 17 22:33:13 2015 +0900
Branches: master
https://developer.blender.org/rBc9e5d9226b8c89f0081f8191f868c23e595b0c3f

Fix T43090: Cycles + Freestyle + border render = black render.

The reported problem was due to a special case where there are no strokes
to be rendered.  Since rendering an empty scene is a waste of time, the issue
was addressed here by skipping the stroke rendering process entirely.

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

M	source/blender/freestyle/intern/application/Controller.cpp
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
M	source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
M	source/blender/freestyle/intern/stroke/Canvas.h

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

diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index f8931d3..682183e 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -869,7 +869,7 @@ void Controller::DrawStrokes()
 	real d = _Chrono.stop();
 	if (G.debug & G_DEBUG_FREESTYLE) {
 		cout << "Strokes generation  : " << d << endl;
-		cout << "Stroke count  : " << _Canvas->stroke_count << endl;
+		cout << "Stroke count  : " << _Canvas->getStrokeCount() << endl;
 	}
 	resetModified();
 	DeleteViewMap();
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index 29f3bfe..da3d55e 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -654,6 +654,12 @@ int BlenderStrokeRenderer::GenerateScene()
 	{
 		GenerateStrokeMesh(*it, true);
 	}
+	return get_stroke_count();
+}
+
+// Return the number of strokes
+int BlenderStrokeRenderer::get_stroke_count() const
+{
 	return strokeGroups.size() + texturedStrokeGroups.size();
 }
 
@@ -956,7 +962,8 @@ Render *BlenderStrokeRenderer::RenderScene(Render *re, bool render)
 
 	Render *freestyle_render = RE_NewRender(freestyle_scene->id.name);
 
-	RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene, render);
+	RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene,
+	                          render && get_stroke_count() > 0);
 
 	return freestyle_render;
 }
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
index a381932..ec53efa 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
@@ -85,6 +85,7 @@ protected:
 
 	static const char *uvNames[];
 
+	int get_stroke_count() const;
 	float get_stroke_vertex_z(void) const;
 	unsigned int get_stroke_mesh_id(void) const;
 	bool test_triangle_visibility(StrokeVertexRep *svRep[3]) const;
@@ -96,7 +97,6 @@ protected:
 #ifdef WITH_CXX_GUARDEDALLOC
 	MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:BlenderStrokeRenderer")
 #endif
-
 };
 
 } /* namespace Freestyle */
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index cfadf80..32b4c54 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -496,7 +496,7 @@ void FRS_composite_result(Render *re, SceneRenderLayer *srl, Render *freestyle_r
 	rl = render_get_active_layer( freestyle_render, freestyle_render->result );
 	if (!rl || rl->rectf == NULL) {
 		if (G.debug & G_DEBUG_FREESTYLE) {
-			cout << "Cannot find Freestyle result image" << endl;
+			cout << "No Freestyle result image to composite" << endl;
 		}
 		return;
 	}
diff --git a/source/blender/freestyle/intern/stroke/Canvas.h b/source/blender/freestyle/intern/stroke/Canvas.h
index b56b5f9..5919344 100644
--- a/source/blender/freestyle/intern/stroke/Canvas.h
+++ b/source/blender/freestyle/intern/stroke/Canvas.h
@@ -95,6 +95,7 @@ protected:
 	static const char *_MapsPath;
 	SteerableViewMap *_steerableViewMap;
 	bool _basic;
+	int stroke_count;
 
 public:
 	/* Builds the Canvas */
@@ -213,7 +214,10 @@ public:
 		return false;
 	}
 
-	int stroke_count;
+	inline int getStrokeCount() const
+	{
+		return stroke_count;
+	}
 
 	/*! modifiers */
 	inline void setSelectedFEdge(FEdge *iFEdge)




More information about the Bf-blender-cvs mailing list