[Bf-blender-cvs] [f06335e] master: Fix for view map cache not flushed by updates of edge detection options.

Tamito Kajiyama noreply at git.blender.org
Sat Jan 3 07:41:11 CET 2015


Commit: f06335e12f0addb8102649af3087d02c680b9ad0
Author: Tamito Kajiyama
Date:   Sat Jan 3 01:48:27 2015 +0900
Branches: master
https://developer.blender.org/rBf06335e12f0addb8102649af3087d02c680b9ad0

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)




More information about the Bf-blender-cvs mailing list