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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 09:08:19 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 18:46:11 +0300
commit820d1b249df239b8ec1161ea3fb3f99fb62c9f49 (patch)
treecdd36f3ae22a6b36b12bf8c49a21f1a61ef0860a /source/blender/freestyle
parent28b1bbeb92a9e11cc067444b9ce4318ffa421977 (diff)
Fix freestyle renders not including some types of animation.
Freestyle Python scripts need to get the evaluated view layer and scene, not the original one.
Diffstat (limited to 'source/blender/freestyle')
-rw-r--r--source/blender/freestyle/intern/application/Controller.cpp4
-rw-r--r--source/blender/freestyle/intern/application/Controller.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp15
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h4
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp18
5 files changed, 23 insertions, 20 deletions
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index 5ae04698a73..ea11e64e775 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -232,9 +232,9 @@ bool Controller::hitViewMapCache()
return false;
}
-int Controller::LoadMesh(Render *re, ViewLayer *view_layer)
+int Controller::LoadMesh(Render *re, ViewLayer *view_layer, Depsgraph *depsgraph)
{
- BlenderFileLoader loader(re, view_layer);
+ BlenderFileLoader loader(re, view_layer, depsgraph);
loader.setRenderMonitor(_pRenderMonitor);
diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h
index 0304c18b8a6..80c7d8656a3 100644
--- a/source/blender/freestyle/intern/application/Controller.h
+++ b/source/blender/freestyle/intern/application/Controller.h
@@ -68,7 +68,7 @@ public:
//soc
void init_options();
- int LoadMesh(Render *re, ViewLayer *view_layer);
+ int LoadMesh(Render *re, ViewLayer *view_layer, Depsgraph *depsgraph);
int Load3DSFile(const char *iFileName);
void CloseFile();
void ComputeViewMap();
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 8a4fa91d650..4d77962bdfa 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -32,10 +32,10 @@
namespace Freestyle {
-BlenderFileLoader::BlenderFileLoader(Render *re, ViewLayer *view_layer)
+BlenderFileLoader::BlenderFileLoader(Render *re, ViewLayer *view_layer, Depsgraph *depsgraph)
{
_re = re;
- _view_layer = view_layer;
+ _depsgraph = depsgraph;
_Scene = NULL;
_numFacesRead = 0;
#if 0
@@ -79,11 +79,6 @@ NodeGroup *BlenderFileLoader::Load()
_z_offset = 0.f;
}
- ViewLayer *view_layer = (ViewLayer*)BLI_findstring(&_re->scene->view_layers, _view_layer->name, offsetof(ViewLayer, name));
- Depsgraph *depsgraph = DEG_graph_new(_re->scene, view_layer, DAG_EVAL_RENDER);
-
- BKE_scene_graph_update_tagged(depsgraph, _re->main);
-
#if 0
if (G.debug & G_DEBUG_FREESTYLE) {
cout << "Frustum: l " << _viewplane_left << " r " << _viewplane_right
@@ -95,7 +90,7 @@ NodeGroup *BlenderFileLoader::Load()
int id = 0;
DEG_OBJECT_ITER_BEGIN(
- depsgraph, ob,
+ _depsgraph, ob,
DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY |
DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET |
DEG_ITER_OBJECT_FLAG_VISIBLE |
@@ -111,7 +106,7 @@ NodeGroup *BlenderFileLoader::Load()
bool apply_modifiers = false;
bool calc_undeformed = false;
- Mesh *mesh = BKE_mesh_new_from_object(depsgraph,
+ Mesh *mesh = BKE_mesh_new_from_object(_depsgraph,
_re->main,
_re->scene,
ob,
@@ -125,8 +120,6 @@ NodeGroup *BlenderFileLoader::Load()
}
DEG_OBJECT_ITER_END;
- DEG_graph_free(depsgraph);
-
// Return the built scene.
return _Scene;
}
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
index 2fcf4373bba..8fb95ad7e37 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
@@ -89,7 +89,7 @@ class BlenderFileLoader
{
public:
/*! Builds a MaxFileLoader */
- BlenderFileLoader(Render *re, ViewLayer *view_layer);
+ BlenderFileLoader(Render *re, ViewLayer *view_layer, Depsgraph *depsgraph);
virtual ~BlenderFileLoader();
/*! Loads the 3D scene and returns a pointer to the scene root node */
@@ -124,7 +124,7 @@ protected:
unsigned n;
};
Render *_re;
- ViewLayer *_view_layer;
+ Depsgraph *_depsgraph;
NodeGroup *_Scene;
unsigned _numFacesRead;
#if 0
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 3486980fa65..470b1151391 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -51,6 +51,7 @@ extern "C" {
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_linestyle.h"
+#include "BKE_scene.h"
#include "BKE_text.h"
#include "BLT_translation.h"
@@ -62,6 +63,8 @@ extern "C" {
#include "BPY_extern.h"
+#include "DEG_depsgraph_query.h"
+
#include "renderpipeline.h"
#include "FRS_freestyle.h"
@@ -282,13 +285,13 @@ static bool test_edge_type_conditions(struct edge_type_condition *conditions,
return true;
}
-static void prepare(Render *re, ViewLayer *view_layer)
+static void prepare(Render *re, ViewLayer *view_layer, Depsgraph *depsgraph)
{
// load mesh
re->i.infostr = IFACE_("Freestyle: Mesh loading");
re->stats_draw(re->sdh, &re->i);
re->i.infostr = NULL;
- if (controller->LoadMesh(re, view_layer)) // returns if scene cannot be loaded or if empty
+ if (controller->LoadMesh(re, view_layer, depsgraph)) // returns if scene cannot be loaded or if empty
return;
if (re->test_break(re->tbh))
return;
@@ -606,12 +609,17 @@ Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render)
cout << "----------------------------------------------------------" << endl;
}
+ /* Create depsgraph and evaluate scene. */
+ ViewLayer *scene_view_layer = (ViewLayer*)BLI_findstring(&re->scene->view_layers, view_layer->name, offsetof(ViewLayer, name));
+ Depsgraph *depsgraph = DEG_graph_new(re->scene, scene_view_layer, DAG_EVAL_RENDER);
+ BKE_scene_graph_update_tagged(depsgraph, re->main);
+
// prepare Freestyle:
// - load mesh
// - add style modules
// - set parameters
// - compute view map
- prepare(re, view_layer);
+ prepare(re, view_layer, depsgraph);
if (re->test_break(re->tbh)) {
controller->CloseFile();
@@ -626,7 +634,7 @@ Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render)
re->i.infostr = IFACE_("Freestyle: Stroke rendering");
re->stats_draw(re->sdh, &re->i);
re->i.infostr = NULL;
- g_freestyle.scene = re->scene;
+ g_freestyle.scene = DEG_get_evaluated_scene(depsgraph);
int strokeCount = controller->DrawStrokes();
if (strokeCount > 0) {
freestyle_render = controller->RenderStrokes(re, true);
@@ -643,6 +651,8 @@ Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render)
}
}
+ DEG_graph_free(depsgraph);
+
return freestyle_render;
}