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)

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

Reply via email to