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.
This commit is contained in:
@@ -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);
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user