diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2015-01-17 16:33:13 +0300 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2015-01-17 18:39:03 +0300 |
commit | c9e5d9226b8c89f0081f8191f868c23e595b0c3f (patch) | |
tree | 52ac59048c9f21e9fcee967b9e9ea29b3e888f90 | |
parent | 448d143ad0e73a9d2c86f84def2b9f89b8332470 (diff) |
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.
5 files changed, 16 insertions, 5 deletions
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp index f8931d32f56..682183ef6ff 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 29f3bfe0d94..da3d55ef563 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 a381932e9e7..ec53efa14cd 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 cfadf80dcf6..32b4c5455a7 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 b56b5f92c14..5919344b6e0 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) |