[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14520] trunk/blender/source/blender/ blenkernel/intern/depsgraph.c:
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue Apr 22 23:53:30 CEST 2008
Revision: 14520
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14520
Author: blendix
Date: 2008-04-22 23:53:30 +0200 (Tue, 22 Apr 2008)
Log Message:
-----------
Fix for bug #9654: point cache was being reset too often, made
transforming unrelated objects slow.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/depsgraph.c
Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c 2008-04-22 19:14:33 UTC (rev 14519)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c 2008-04-22 21:53:30 UTC (rev 14520)
@@ -1818,7 +1818,7 @@
}
/* node was checked to have lasttime != curtime , and is of type ID_OB */
-static void flush_pointcache_reset(DagNode *node, int curtime)
+static void flush_pointcache_reset(DagNode *node, int curtime, int reset)
{
DagAdjList *itA;
Object *ob;
@@ -1829,9 +1829,15 @@
if(itA->node->type==ID_OB) {
if(itA->node->lasttime!=curtime) {
ob= (Object*)(node->ob);
- if(BKE_ptcache_object_reset(ob, PTCACHE_RESET_DEPSGRAPH))
- ob->recalc |= OB_RECALC_DATA;
- flush_pointcache_reset(itA->node, curtime);
+
+ if(reset || (ob->recalc & OB_RECALC)) {
+ if(BKE_ptcache_object_reset(ob, PTCACHE_RESET_DEPSGRAPH))
+ ob->recalc |= OB_RECALC_DATA;
+
+ flush_pointcache_reset(itA->node, curtime, 1);
+ }
+ else
+ flush_pointcache_reset(itA->node, curtime, 0);
}
}
}
@@ -1877,9 +1883,15 @@
for(itA = firstnode->child; itA; itA= itA->next) {
if(itA->node->lasttime!=lasttime && itA->node->type==ID_OB) {
ob= (Object*)(itA->node->ob);
- if(BKE_ptcache_object_reset(ob, PTCACHE_RESET_DEPSGRAPH))
- ob->recalc |= OB_RECALC_DATA;
- flush_pointcache_reset(itA->node, lasttime);
+
+ if(ob->recalc & OB_RECALC) {
+ if(BKE_ptcache_object_reset(ob, PTCACHE_RESET_DEPSGRAPH))
+ ob->recalc |= OB_RECALC_DATA;
+
+ flush_pointcache_reset(itA->node, lasttime, 1);
+ }
+ else
+ flush_pointcache_reset(itA->node, lasttime, 0);
}
}
}
More information about the Bf-blender-cvs
mailing list