[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56880] trunk/blender/source/blender/ blenkernel/intern: Bug fix, own collection.

Ton Roosendaal ton at blender.org
Fri May 17 15:15:43 CEST 2013


Revision: 56880
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56880
Author:   ton
Date:     2013-05-17 13:15:43 +0000 (Fri, 17 May 2013)
Log Message:
-----------
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).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/key.c
    trunk/blender/source/blender/blenkernel/intern/object.c

Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c	2013-05-17 13:02:03 UTC (rev 56879)
+++ trunk/blender/source/blender/blenkernel/intern/key.c	2013-05-17 13:15:43 UTC (rev 56880)
@@ -1389,10 +1389,6 @@
 			cp_cu_key(ob->data, key, actkb, kb, 0, tot, out, tot);
 	}
 	else {
-		/* do shapekey local drivers */
-		float ctime = BKE_scene_frame_get(scene);
-
-		BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS);
 		
 		if (ob->type == OB_MESH) do_mesh_key(scene, ob, key, out, tot);
 		else if (ob->type == OB_LATTICE) do_latt_key(scene, ob, key, out, tot);

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-05-17 13:02:03 UTC (rev 56879)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-05-17 13:15:43 UTC (rev 56880)
@@ -2621,6 +2621,7 @@
 		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 @@
 				/* 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) {




More information about the Bf-blender-cvs mailing list