Revision: 14428
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14428
Author:   blendix
Date:     2008-04-15 15:07:56 +0200 (Tue, 15 Apr 2008)

Log Message:
-----------

Bug #8950: dependency cycles weren't always printed correct. For
debugging, also added a name for each dependency relation, and when
a cycle is detected it now prints the full cycle to the console.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/depsgraph_private.h
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/src/drawdeps.c

Modified: trunk/blender/source/blender/blenkernel/depsgraph_private.h
===================================================================
--- trunk/blender/source/blender/blenkernel/depsgraph_private.h 2008-04-15 
09:20:13 UTC (rev 14427)
+++ trunk/blender/source/blender/blenkernel/depsgraph_private.h 2008-04-15 
13:07:56 UTC (rev 14428)
@@ -54,6 +54,7 @@
        short type;
        int count;                      // number of identical arcs
        unsigned int lay;   // for flushing redraw/rebuild events
+       char *name;
        struct DagAdjList *next;
 } DagAdjList;
 
@@ -117,7 +118,7 @@
 DagNode * dag_add_node (DagForest *forest,void * fob);
 DagNode * dag_get_node (DagForest *forest,void * fob);
 DagNode * dag_get_sub_node (DagForest *forest,void * fob);
-void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short 
rel);
+void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short 
rel, char *name);
 
 void graph_bfs(void);
 

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c  2008-04-15 
09:20:13 UTC (rev 14427)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c  2008-04-15 
13:07:56 UTC (rev 14428)
@@ -327,9 +327,9 @@
                                                        ob = *oba;
                                                        node1 = 
dag_get_node(dag, ob);
                                                        if (ob->type == 
OB_ARMATURE)
-                                                               
dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB);
+                                                               
dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, 
"Python Ipo Driver");
                                                        else
-                                                               
dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB);
+                                                               
dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Python 
Ipo Driver");
                                                        oba++;
                                                }
 
@@ -340,9 +340,9 @@
                        else if (icu->driver->ob) {
                                node1 = dag_get_node(dag, icu->driver->ob);
                                if(icu->driver->blocktype==ID_AR)
-                                       dag_add_relation(dag, node1, node, 
isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB);
+                                       dag_add_relation(dag, node1, node, 
isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Ipo Driver");
                                else
-                                       dag_add_relation(dag, node1, node, 
isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB);
+                                       dag_add_relation(dag, node1, node, 
isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Ipo Driver");
                        }
                }
        }
@@ -363,7 +363,7 @@
        
        if ((ob->data) && (mask&DAG_RL_DATA)) {
                node2 = dag_get_node(dag,ob->data);
-               dag_add_relation(dag,node,node2,DAG_RL_DATA);
+               dag_add_relation(dag,node,node2,DAG_RL_DATA, "Object-Data 
Relation");
                node2->first_ancestor = ob;
                node2->ancestor_count += 1;
        }
@@ -388,11 +388,11 @@
                                                                node3 = 
dag_get_node(dag, ct->tar);
                                                                
                                                                if 
(ct->subtarget[0])
-                                                                       
dag_add_relation(dag,node3,node, DAG_RL_OB_DATA|DAG_RL_DATA_DATA);
+                                                                       
dag_add_relation(dag,node3,node, DAG_RL_OB_DATA|DAG_RL_DATA_DATA, cti->name);
                                                                else 
if(ELEM(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO))   
-                                                                       
dag_add_relation(dag,node3,node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                                                                       
dag_add_relation(dag,node3,node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, cti->name);
                                                                else
-                                                                       
dag_add_relation(dag,node3,node, DAG_RL_OB_DATA);
+                                                                       
dag_add_relation(dag,node3,node, DAG_RL_OB_DATA, cti->name);
                                                        }
                                                }
                                                
@@ -440,7 +440,7 @@
                                for(amod= strip->modifiers.first; amod; amod= 
amod->next) {
                                        if(amod->ob) {
                                                node2 = dag_get_node(dag, 
amod->ob);
-                                               dag_add_relation(dag, node2, 
node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                                               dag_add_relation(dag, node2, 
node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "NLA Strip Modifier");
                                        }
                                }
                        }
@@ -460,46 +460,46 @@
                
                switch(ob->partype) {
                        case PARSKEL:
-                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB);
+                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent");
                                break;
                        case PARVERT1: case PARVERT3: case PARBONE:
-                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB);
+                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Vertex Parent");
                                break;
                        default:
                                if(ob->parent->type==OB_LATTICE) 
-                                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB);
+                                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Lattice 
Parent");
                                else if(ob->parent->type==OB_CURVE) {
                                        Curve *cu= ob->parent->data;
                                        if(cu->flag & CU_PATH) 
-                                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB);
+                                               
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Curve Parent");
                                        else
-                                               
dag_add_relation(dag,node2,node,DAG_RL_OB_OB);
+                                               
dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Curve Parent");
                                }
                                        else
-                                               
dag_add_relation(dag,node2,node,DAG_RL_OB_OB);
+                                               
dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Curve Parent");
                }
                /* exception case: parent is duplivert */
                if(ob->type==OB_MBALL && (ob->parent->transflag & 
OB_DUPLIVERTS)) {
-                       dag_add_relation(dag, node2, node, 
DAG_RL_DATA_DATA|DAG_RL_OB_OB);
+                       dag_add_relation(dag, node2, node, 
DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Duplivert");
                }
                
                addtoroot = 0;
        }
        if (ob->track) {
                node2 = dag_get_node(dag,ob->track);
-               dag_add_relation(dag,node2,node,DAG_RL_OB_OB);
+               dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Track To");
                addtoroot = 0;
        }
        if (ob->proxy) {
                node2 = dag_get_node(dag, ob->proxy);
-               dag_add_relation(dag, node, node2, 
DAG_RL_DATA_DATA|DAG_RL_OB_OB);
+               dag_add_relation(dag, node, node2, 
DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Proxy");
                /* inverted relation, so addtoroot shouldn't be set to zero */
        }
        if (ob->type==OB_CAMERA) {
                Camera *cam = (Camera *)ob->data;
                if (cam->dof_ob) {
                        node2 = dag_get_node(dag, cam->dof_ob);
-                       dag_add_relation(dag,node2,node,DAG_RL_OB_OB);
+                       dag_add_relation(dag,node2,node,DAG_RL_OB_OB, "Camera 
DoF");
                }
        }
        if (ob->transflag & OB_DUPLI) {
@@ -509,7 +509,7 @@
                                if(go->ob) {
                                        node2 = dag_get_node(dag, go->ob);
                                        /* node2 changes node1, this keeps 
animations updated in groups?? not logical? */
-                                       dag_add_relation(dag, node2, node, 
DAG_RL_OB_OB);
+                                       dag_add_relation(dag, node2, node, 
DAG_RL_OB_OB, "Dupligroup");
                                }
                        }
                }
@@ -526,7 +526,7 @@
                                        Object *ob1= base->object;
                                        if((ob1->pd->deflect) && (ob1 != ob))  {
                                                node2 = dag_get_node(dag, ob1); 
                                
-                                               dag_add_relation(dag, node2, 
node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA);                                         
   
+                                               dag_add_relation(dag, node2, 
node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Softbody Collision");
                                        }
                                }
                        }
@@ -537,18 +537,18 @@
                Object *mom= find_basis_mball(ob);
                if(mom!=ob) {
                        node2 = dag_get_node(dag, mom);
-                       
dag_add_relation(dag,node,node2,DAG_RL_DATA_DATA|DAG_RL_OB_DATA);  // mom 
depends on children!
+                       
dag_add_relation(dag,node,node2,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Metaball");  
// mom depends on children!
                }
        }
        else if (ob->type==OB_CURVE) {
                Curve *cu= ob->data;
                if(cu->bevobj) {
                        node2 = dag_get_node(dag, cu->bevobj);
-                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Bevel");
                }
                if(cu->taperobj) {
                        node2 = dag_get_node(dag, cu->taperobj);
-                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Curve Taper");
                }
                if(cu->ipo)
                        dag_add_driver_relation(cu->ipo, dag, node, 1);
@@ -558,7 +558,7 @@
                Curve *cu= ob->data;
                if(cu->textoncurve) {
                        node2 = dag_get_node(dag, cu->textoncurve);
-                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                       
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Texture On 
Curve");
                }
        }
        else if(ob->type==OB_MESH) {
@@ -569,7 +569,7 @@
                        
                        /* ob location depends on itself */
                        if((paf->flag & PAF_STATIC)==0)
-                               dag_add_relation(dag, node, node, 
DAG_RL_OB_DATA);
+                               dag_add_relation(dag, node, node, 
DAG_RL_OB_DATA, "Particle-Object Relation");
                        
                        listb= pdInitEffectors(ob, paf->group);         /* 
note, makes copy... */
                        if(listb) {
@@ -580,9 +580,9 @@
                                        if(pd->forcefield) {
                                                node2 = dag_get_node(dag, ob1);
                                                if(pd->forcefield==PFIELD_GUIDE)
-                                                       dag_add_relation(dag, 
node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                                                       dag_add_relation(dag, 
node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Field");
                                                else
-                                                       dag_add_relation(dag, 
node2, node, DAG_RL_OB_DATA);
+                                                       dag_add_relation(dag, 
node2, node, DAG_RL_OB_DATA, "Particle Field");
                                        }
                                }
                                
@@ -599,25 +599,25 @@
                for(; psys; psys=psys->next) {
                        ParticleSettings *part= psys->part;
                        
-                       dag_add_relation(dag, node, node, DAG_RL_OB_DATA);
+                       dag_add_relation(dag, node, node, DAG_RL_OB_DATA, 
"Particle-Object Relation");
 
                        if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob &&
                           
BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys-1)) {
                                node2 = dag_get_node(dag, psys->keyed_ob);
-                               dag_add_relation(dag, node2, node, 
DAG_RL_DATA_DATA);
+                               dag_add_relation(dag, node2, node, 
DAG_RL_DATA_DATA, "Particle Keyed Physics");
                        }
 
                        if(part->draw_as == PART_DRAW_OB && part->dup_ob) {
                                node2 = dag_get_node(dag, part->dup_ob);
-                               dag_add_relation(dag, node, node2, 
DAG_RL_OB_OB);
+                               dag_add_relation(dag, node, node2, 
DAG_RL_OB_OB, "Particle Object Visualisation");
                                if(part->dup_ob->type == OB_MBALL)
-                                       dag_add_relation(dag, node, node2, 
DAG_RL_DATA_DATA);
+                                       dag_add_relation(dag, node, node2, 
DAG_RL_DATA_DATA, "Particle Object Visualisation");
                        }
 
                        if(part->draw_as == PART_DRAW_GR && part->dup_group) {
                                for(go=part->dup_group->gobject.first; go; 
go=go->next) {
                                        node2 = dag_get_node(dag, go->ob);
-                                       dag_add_relation(dag, node, node2, 
DAG_RL_OB_OB);
+                                       dag_add_relation(dag, node, node2, 
DAG_RL_OB_OB, "Particle Group Visualisation");
                                }
                        }
 
@@ -632,22 +632,22 @@
                                        if(nec->type & PSYS_EC_EFFECTOR) {
                                                node2 = dag_get_node(dag, ob1);
                                                
if(ob1->pd->forcefield==PFIELD_GUIDE)
-                                                       dag_add_relation(dag, 
node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA);
+                                                       dag_add_relation(dag, 
node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Particle Field");
                                                else
-                                                       dag_add_relation(dag, 
node2, node, DAG_RL_OB_DATA);
+                                                       dag_add_relation(dag, 
node2, node, DAG_RL_OB_DATA, "Particle Field");
                                        }
                                        else if(nec->type & PSYS_EC_DEFLECT) {
                                                node2 = dag_get_node(dag, ob1);

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to