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);
                        }
                }
        }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to