From 0305b208eb8d582fa04985e6350214a0b669159d Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Mon, 2 Feb 2015 09:17:16 +0900 Subject: 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. --- .../blender/freestyle/intern/application/Controller.cpp | 2 +- .../freestyle/intern/scene_graph/NodeSceneRenderLayer.h | 16 ++++++++++++++-- .../blender/freestyle/intern/scene_graph/SceneHash.cpp | 17 +++++++++++------ 3 files changed, 26 insertions(+), 9 deletions(-) (limited to 'source/blender') diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp index 682183ef6ff..8d9b1a4fb52 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 2fc08bb1175..4b079df5632 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 ee1d0c53b87..22538736fbf 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) -- cgit v1.2.3