Commit: 91a975100cd13c425144a1a9a51f76d7cb846d59
Author: Tamito Kajiyama
Date:   Sat Jan 3 01:48:27 2015 +0900
Branches: blender-v2.73-release
https://developer.blender.org/rB91a975100cd13c425144a1a9a51f76d7cb846d59

Fix for view map cache not flushed by updates of edge detection options.

This fix should be considered for inclusion in the 2.73 release, since
it concerns a new feature of Freestyle introduced in 2.73.

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

M       source/blender/freestyle/CMakeLists.txt
M       source/blender/freestyle/intern/application/Controller.cpp
A       source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
A       source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
M       source/blender/freestyle/intern/scene_graph/SceneHash.cpp
M       source/blender/freestyle/intern/scene_graph/SceneHash.h
M       source/blender/freestyle/intern/scene_graph/SceneVisitor.h

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

diff --git a/source/blender/freestyle/CMakeLists.txt 
b/source/blender/freestyle/CMakeLists.txt
index cb187ec..6860afe 100644
--- a/source/blender/freestyle/CMakeLists.txt
+++ b/source/blender/freestyle/CMakeLists.txt
@@ -392,6 +392,8 @@ set(SRC
        intern/scene_graph/NodeGroup.h
        intern/scene_graph/NodeLight.cpp
        intern/scene_graph/NodeLight.h
+       intern/scene_graph/NodeSceneRenderLayer.cpp
+       intern/scene_graph/NodeSceneRenderLayer.h
        intern/scene_graph/NodeShape.cpp
        intern/scene_graph/NodeShape.h
        intern/scene_graph/NodeTransform.cpp
diff --git a/source/blender/freestyle/intern/application/Controller.cpp 
b/source/blender/freestyle/intern/application/Controller.cpp
index 237176d..7c8a0c9 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -40,6 +40,7 @@ extern "C" {
 #include "../scene_graph/NodeDrawingStyle.h"
 #include "../scene_graph/NodeShape.h"
 #include "../scene_graph/NodeTransform.h"
+#include "../scene_graph/NodeSceneRenderLayer.h"
 #include "../scene_graph/ScenePrettyPrinter.h"
 #include "../scene_graph/VertexRep.h"
 
@@ -294,6 +295,7 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer *srl)
                }
                cam->setProjectionMatrix(proj);
                _RootNode->AddChild(cam);
+               _RootNode->AddChild(new NodeSceneRenderLayer(*srl));
 
                sceneHashFunc.reset();
                //blenderScene->accept(sceneHashFunc);
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.h 
b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
similarity index 50%
copy from source/blender/freestyle/intern/scene_graph/SceneHash.h
copy to source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
index 5521b79..24c56ff 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.h
+++ b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
@@ -18,63 +18,18 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef __FREESTYLE_SCENE_HASH_H__
-#define __FREESTYLE_SCENE_HASH_H__
-
-/** \file blender/freestyle/intern/scene_graph/SceneHash.h
+/** \file blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
  *  \ingroup freestyle
+ *  \brief Class to represent a scene render layer in Blender.
  */
 
-#include "IndexedFaceSet.h"
-#include "NodeCamera.h"
-#include "SceneVisitor.h"
-
-#include "BLI_sys_types.h"
-
-#ifdef WITH_CXX_GUARDEDALLOC
-#include "MEM_guardedalloc.h"
-#endif
+#include "NodeSceneRenderLayer.h"
 
 namespace Freestyle {
 
-class SceneHash : public SceneVisitor
+void NodeSceneRenderLayer::accept(SceneVisitor& v)
 {
-public:
-       inline SceneHash() : SceneVisitor()
-       {
-               _sum = 1;
-       }
-
-       virtual ~SceneHash() {}
-
-       VISIT_DECL(NodeCamera)
-       VISIT_DECL(IndexedFaceSet)
-
-       string toString();
-
-       inline bool match() {
-               return _sum == _prevSum;
-       }
-
-       inline void store() {
-               _prevSum = _sum;
-       }
-
-       inline void reset() {
-               _sum = 1;
-       }
-
-private:
-       void adler32(unsigned char *data, int size);
-
-       uint32_t _sum;
-       uint32_t _prevSum;
-
-#ifdef WITH_CXX_GUARDEDALLOC
-       MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:SceneHash")
-#endif
-};
+       v.visitNodeSceneRenderLayer(*this);
+}
 
 } /* namespace Freestyle */
-
-#endif // __FREESTYLE_SCENE_HASH_H__
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.h 
b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
similarity index 51%
copy from source/blender/freestyle/intern/scene_graph/SceneHash.h
copy to source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
index 5521b79..2fc08bb 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.h
+++ b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
@@ -18,63 +18,47 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef __FREESTYLE_SCENE_HASH_H__
-#define __FREESTYLE_SCENE_HASH_H__
+#ifndef __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
+#define __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
 
-/** \file blender/freestyle/intern/scene_graph/SceneHash.h
+/** \file blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
  *  \ingroup freestyle
+ *  \brief Class to represent a scene render layer in Blender.
  */
 
-#include "IndexedFaceSet.h"
-#include "NodeCamera.h"
-#include "SceneVisitor.h"
+#include "Node.h"
 
-#include "BLI_sys_types.h"
+extern "C" {
+#include "DNA_scene_types.h" /* for SceneRenderLayer */
+}
 
-#ifdef WITH_CXX_GUARDEDALLOC
-#include "MEM_guardedalloc.h"
-#endif
+using namespace std;
 
 namespace Freestyle {
 
-class SceneHash : public SceneVisitor
+class NodeSceneRenderLayer : public Node
 {
 public:
-       inline SceneHash() : SceneVisitor()
-       {
-               _sum = 1;
-       }
-
-       virtual ~SceneHash() {}
-
-       VISIT_DECL(NodeCamera)
-       VISIT_DECL(IndexedFaceSet)
-
-       string toString();
+       inline NodeSceneRenderLayer(SceneRenderLayer& srl) : Node(), 
_SceneRenderLayer(srl) {}
+       virtual ~NodeSceneRenderLayer() {}
 
-       inline bool match() {
-               return _sum == _prevSum;
-       }
-
-       inline void store() {
-               _prevSum = _sum;
+       inline struct SceneRenderLayer& sceneRenderLayer() const
+       {
+               return _SceneRenderLayer;
        }
 
-       inline void reset() {
-               _sum = 1;
+       inline void setSceneRenderLayer(SceneRenderLayer& srl)
+       {
+               _SceneRenderLayer = srl;
        }
 
-private:
-       void adler32(unsigned char *data, int size);
-
-       uint32_t _sum;
-       uint32_t _prevSum;
+       /*! Accept the corresponding visitor */
+       virtual void accept(SceneVisitor& v);
 
-#ifdef WITH_CXX_GUARDEDALLOC
-       MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:SceneHash")
-#endif
+protected:
+       SceneRenderLayer& _SceneRenderLayer;
 };
 
 } /* namespace Freestyle */
 
-#endif // __FREESTYLE_SCENE_HASH_H__
+#endif // __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp 
b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
index 60b95aa..ee1d0c5 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
+++ b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
@@ -35,6 +35,15 @@ string SceneHash::toString()
         return ss.str();
 }
 
+void SceneHash::visitNodeSceneRenderLayer(NodeSceneRenderLayer& srl)
+{
+       struct FreestyleConfig *config = 
&srl.sceneRenderLayer().freestyleConfig;
+       adler32((unsigned char *)&config->flags, sizeof(int));
+       adler32((unsigned char *)&config->crease_angle, sizeof(float));
+       adler32((unsigned char *)&config->sphere_radius, sizeof(float));
+       adler32((unsigned char *)&config->dkr_epsilon, sizeof(float));
+}
+
 void SceneHash::visitNodeCamera(NodeCamera& cam)
 {
        double *proj = cam.projectionMatrix();
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.h 
b/source/blender/freestyle/intern/scene_graph/SceneHash.h
index 5521b79..9da7116 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.h
+++ b/source/blender/freestyle/intern/scene_graph/SceneHash.h
@@ -26,6 +26,7 @@
  */
 
 #include "IndexedFaceSet.h"
+#include "NodeSceneRenderLayer.h"
 #include "NodeCamera.h"
 #include "SceneVisitor.h"
 
@@ -48,6 +49,7 @@ public:
        virtual ~SceneHash() {}
 
        VISIT_DECL(NodeCamera)
+       VISIT_DECL(NodeSceneRenderLayer)
        VISIT_DECL(IndexedFaceSet)
 
        string toString();
diff --git a/source/blender/freestyle/intern/scene_graph/SceneVisitor.h 
b/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
index c00f512..712585c 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
+++ b/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
@@ -56,6 +56,7 @@ class NodeLight;
 class NodeCamera;
 class NodeDrawingStyle;
 class NodeTransform;
+class NodeSceneRenderLayer;
 
 class Rep;
 class LineRep;
@@ -87,6 +88,7 @@ public:
        VISIT_COMPLETE_DEF(NodeCamera)
        VISIT_COMPLETE_DEF(NodeDrawingStyle)
        VISIT_COMPLETE_DEF(NodeTransform)
+       VISIT_COMPLETE_DEF(NodeSceneRenderLayer)
 
        VISIT_COMPLETE_DEF(Rep)
        VISIT_COMPLETE_DEF(LineRep)

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

Reply via email to