[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