diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-24 09:08:19 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-24 18:46:11 +0300 |
commit | 820d1b249df239b8ec1161ea3fb3f99fb62c9f49 (patch) | |
tree | cdd36f3ae22a6b36b12bf8c49a21f1a61ef0860a /source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp | |
parent | 28b1bbeb92a9e11cc067444b9ce4318ffa421977 (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/intern/blender_interface/FRS_freestyle.cpp')
-rw-r--r-- | source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
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; } |