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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to