From e2f58d817a9012b4642b96ef9cff26ed906dd62d Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 17 May 2013 13:15:43 +0000 Subject: Bug fix, own collection. Shapekey drivers were executed for every call to derivedmesh, which shouldn't happen. It now only runs on the object_update() function, once for every depsgraph change. Error was found while testing preview render in viewport. On each render, the animsys sent a 'changed data' because of the shapekey drivers being called, causing eternal re-render loops (without showing anything). --- source/blender/blenkernel/intern/object.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'source/blender/blenkernel/intern/object.c') diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 57fd555d57e..741c4f5429e 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2621,6 +2621,7 @@ void BKE_object_handle_update_ex(Scene *scene, Object *ob, if (ob->recalc & OB_RECALC_DATA) { ID *data_id = (ID *)ob->data; AnimData *adt = BKE_animdata_from_id(data_id); + Key *key; float ctime = BKE_scene_frame_get(scene); if (G.debug & G_DEBUG) @@ -2631,6 +2632,12 @@ void BKE_object_handle_update_ex(Scene *scene, Object *ob, /* XXX: for mesh types, should we push this to derivedmesh instead? */ BKE_animsys_evaluate_animdata(scene, data_id, adt, ctime, ADT_RECALC_DRIVERS); } + + key = BKE_key_from_object(ob); + if (key && key->block.first) { + if (!(ob->shapeflag & OB_SHAPE_LOCK)) + BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS); + } /* includes all keys and modifiers */ switch (ob->type) { -- cgit v1.2.3