Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2015-02-02 03:17:16 +0300
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2015-02-02 04:00:12 +0300
commit0305b208eb8d582fa04985e6350214a0b669159d (patch)
tree9111b476b091e26b21d0e025dcb7a3f78bf42b13 /source/blender
parent64124ba904dcaac2bf029a55943282843b8a2603 (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/freestyle/intern/application/Controller.cpp2
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h16
-rw-r--r--source/blender/freestyle/intern/scene_graph/SceneHash.cpp17
3 files changed, 26 insertions, 9 deletions
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)