[Bf-blender-cvs] [0305b20] master: Fix for Freestyle view map caching not properly updated upon changes of render resolution and scale.

Tamito Kajiyama noreply at git.blender.org
Mon Feb 2 02:19:26 CET 2015


Commit: 0305b208eb8d582fa04985e6350214a0b669159d
Author: Tamito Kajiyama
Date:   Mon Feb 2 09:17:16 2015 +0900
Branches: master
https://developer.blender.org/rB0305b208eb8d582fa04985e6350214a0b669159d

Fix for Freestyle view map caching not properly updated upon changes of render resolution and scale.

Problem reports independently by Light BWK and Folkert de Vries, thanks.

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

M	source/blender/freestyle/intern/application/Controller.cpp
M	source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
M	source/blender/freestyle/intern/scene_graph/SceneHash.cpp

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

diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index 682183e..8d9b1a4 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -295,7 +295,7 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer *srl)
 		}
 		cam->setProjectionMatrix(proj);
 		_RootNode->AddChild(cam);
-		_RootNode->AddChild(new NodeSceneRenderLayer(*srl));
+		_RootNode->AddChild(new NodeSceneRenderLayer(*re->scene, *srl));
 
 		sceneHashFunc.reset();
 		//blenderScene->accept(sceneHashFunc);
diff --git a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
index 2fc08bb..4b079df 100644
--- a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
+++ b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
@@ -29,7 +29,7 @@
 #include "Node.h"
 
 extern "C" {
-#include "DNA_scene_types.h" /* for SceneRenderLayer */
+#include "DNA_scene_types.h" /* for Scene and SceneRenderLayer */
 }
 
 using namespace std;
@@ -39,14 +39,24 @@ namespace Freestyle {
 class NodeSceneRenderLayer : public Node
 {
 public:
-	inline NodeSceneRenderLayer(SceneRenderLayer& srl) : Node(), _SceneRenderLayer(srl) {}
+	inline NodeSceneRenderLayer(Scene& scene, SceneRenderLayer& srl) : Node(), _Scene(scene), _SceneRenderLayer(srl) {}
 	virtual ~NodeSceneRenderLayer() {}
 
+	inline struct Scene& scene() const
+	{
+		return _Scene;
+	}
+
 	inline struct SceneRenderLayer& sceneRenderLayer() const
 	{
 		return _SceneRenderLayer;
 	}
 
+	inline void setSceneRenderLayer(Scene& scene)
+	{
+		_Scene = scene;
+	}
+
 	inline void setSceneRenderLayer(SceneRenderLayer& srl)
 	{
 		_SceneRenderLayer = srl;
@@ -56,6 +66,8 @@ public:
 	virtual void accept(SceneVisitor& v);
 
 protected:
+
+	Scene& _Scene;
 	SceneRenderLayer& _SceneRenderLayer;
 };
 
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
index ee1d0c5..2253873 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
+++ b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
@@ -35,13 +35,18 @@ string SceneHash::toString()
 	 return ss.str();
 }
 
-void SceneHash::visitNodeSceneRenderLayer(NodeSceneRenderLayer& srl)
+void SceneHash::visitNodeSceneRenderLayer(NodeSceneRenderLayer& node)
 {
-	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));
+	struct RenderData *r = &node.scene().r;
+	adler32((unsigned char *)&r->xsch, sizeof(r->xsch));  // resolution_x
+	adler32((unsigned char *)&r->ysch, sizeof(r->ysch));  // resolution_y
+	adler32((unsigned char *)&r->size, sizeof(r->size));  // resolution_percentage
+
+	struct FreestyleConfig *config = &node.sceneRenderLayer().freestyleConfig;
+	adler32((unsigned char *)&config->flags, sizeof(config->flags));
+	adler32((unsigned char *)&config->crease_angle, sizeof(config->crease_angle));
+	adler32((unsigned char *)&config->sphere_radius, sizeof(config->sphere_radius));
+	adler32((unsigned char *)&config->dkr_epsilon, sizeof(config->dkr_epsilon));
 }
 
 void SceneHash::visitNodeCamera(NodeCamera& cam)




More information about the Bf-blender-cvs mailing list