diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-05 19:47:52 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-05 19:47:52 +0400 |
commit | 03bd670f8286c841a8696badb492256ca6fcadd8 (patch) | |
tree | 3e29e2fbbb71f6732da43311c7fc40573f71c358 /source/blender | |
parent | 5805a8d36d77404b868fe9f806261c3d0b5aed42 (diff) |
Fix #36649 and #36650: animation of freestyle line thickness and linestyle did
not render correct in animations, due to missing updates.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 18 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 17 |
2 files changed, 35 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 1874523dac9..5829ff4995e 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -44,6 +44,7 @@ #include "DNA_anim_types.h" #include "DNA_group_types.h" +#include "DNA_linestyle_types.h" #include "DNA_node_types.h" #include "DNA_object_types.h" #include "DNA_rigidbody_types.h" @@ -1064,6 +1065,7 @@ void BKE_scene_frame_set(struct Scene *scene, double cfra) */ static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene) { + SceneRenderLayer *srl; float ctime = BKE_scene_frame_get(scene); /* scene itself */ @@ -1098,6 +1100,22 @@ static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene) if (adt && adt->drivers.first) BKE_animsys_evaluate_animdata(scene, nid, adt, ctime, ADT_RECALC_DRIVERS); } + + /* freestyle */ + for (srl = scene->r.layers.first; srl; srl = srl->next) { + FreestyleConfig *config = &srl->freestyleConfig; + FreestyleLineSet *lineset; + + for (lineset = config->linesets.first; lineset; lineset = lineset->next) { + if (lineset->linestyle) { + ID *lid = &lineset->linestyle->id; + AnimData *adt = BKE_animdata_from_id(lid); + + if (adt && adt->drivers.first) + BKE_animsys_evaluate_animdata(scene, lid, adt, ctime, ADT_RECALC_DRIVERS); + } + } + } } /* deps hack - do extra recalcs at end */ diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index e4b861bd1ea..00c31cce39f 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -630,6 +630,22 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer * RE_init_threadcount(re); } +/* update some variables that can be animated, and otherwise wouldn't be due to + * RenderData getting copied once at the start of animation render */ +static void render_update_anim_renderdata(Render *re, RenderData *rd) +{ + /* filter */ + re->r.gauss = rd->gauss; + + /* motion blur */ + re->r.mblur_samples = rd->mblur_samples; + re->r.blurfac = rd->blurfac; + + /* freestyle */ + re->r.line_thickness_mode = rd->line_thickness_mode; + re->r.unit_line_thickness = rd->unit_line_thickness; +} + void RE_SetWindow(Render *re, rctf *viewplane, float clipsta, float clipend) { /* re->ok flag? */ @@ -2408,6 +2424,7 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc /* not too nice, but it survives anim-border render */ if (anim) { + render_update_anim_renderdata(re, &scene->r); re->disprect = disprect; return 1; } |