Dependency Graph: some refactoring which should have no user visible impact
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 21 Feb 2013 19:33:04 +0000 (19:33 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 21 Feb 2013 19:33:04 +0000 (19:33 +0000)
besides performance in some cases.

* DAG_scene_sort is now removed and replaced by DAG_relations_tag_update in
  most cases. This will clear the dependency graph, and only rebuild it right
  before it's needed again when the scene is re-evaluated.

  This is done because DAG_scene_sort is slow when called many times from
  python operators. Further the scene argument is not needed because most
  operations can potentially affect more than the current scene.

* DAG_scene_relations_update will now rebuild the dependency graph if it's not
  there yet, and DAG_scene_relations_rebuild will force a rebuild for the rare
  cases that need it.

* Remove various places where ob->recalc was set manually. This should go
  through DAG_id_tag_update() in nearly all cases instead since this is now
  a fast operation. Also removed DAG_ids_flush_update that goes along with
  such manual tagging of ob->recalc.

53 files changed:
source/blender/blenkernel/BKE_depsgraph.h
source/blender/blenkernel/intern/anim.c
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/constraint.c
source/blender/blenkernel/intern/depsgraph.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/scene.c
source/blender/blenloader/intern/readfile.c
source/blender/collada/AnimationImporter.cpp
source/blender/collada/ArmatureExporter.h
source/blender/collada/DocumentImporter.cpp
source/blender/collada/SkinInfo.cpp
source/blender/collada/collada_utils.cpp
source/blender/editors/animation/drivers.c
source/blender/editors/animation/keyframing.c
source/blender/editors/animation/keyingsets.c
source/blender/editors/armature/editarmature.c
source/blender/editors/curve/editcurve.c
source/blender/editors/interface/interface_templates.c
source/blender/editors/mesh/editmesh_tools.c
source/blender/editors/mesh/meshtools.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_constraint.c
source/blender/editors/object/object_edit.c
source/blender/editors/object/object_group.c
source/blender/editors/object/object_hook.c
source/blender/editors/object/object_modifier.c
source/blender/editors/object/object_relations.c
source/blender/editors/object/object_transform.c
source/blender/editors/physics/dynamicpaint_ops.c
source/blender/editors/physics/particle_boids.c
source/blender/editors/physics/particle_object.c
source/blender/editors/physics/rigidbody_constraint.c
source/blender/editors/physics/rigidbody_object.c
source/blender/editors/space_graph/graph_buttons.c
source/blender/editors/space_outliner/outliner_edit.c
source/blender/editors/space_outliner/outliner_tools.c
source/blender/editors/space_view3d/view3d_snap.c
source/blender/editors/transform/transform_conversions.c
source/blender/makesdna/DNA_scene_types.h
source/blender/makesrna/intern/rna_boid.c
source/blender/makesrna/intern/rna_curve.c
source/blender/makesrna/intern/rna_dynamicpaint.c
source/blender/makesrna/intern/rna_fcurve.c
source/blender/makesrna/intern/rna_modifier.c
source/blender/makesrna/intern/rna_object.c
source/blender/makesrna/intern/rna_object_force.c
source/blender/makesrna/intern/rna_particle.c
source/blender/makesrna/intern/rna_pose.c
source/blender/makesrna/intern/rna_scene.c
source/blender/makesrna/intern/rna_smoke.c
source/blender/windowmanager/intern/wm_operators.c

index 49dc1bfd732106270a1595079d2afb66ce250868..eaf19f8dd08ec7c510c14cceac91b1136324fd4f 100644 (file)
@@ -99,8 +99,16 @@ int    is_acyclic(struct DagForest *dag);
 /* ********** API *************** */
 /* Note that the DAG never executes changes in Objects, only sets flags in Objects */
 
-/* (re)-create dependency graph for scene */
-void    DAG_scene_sort(struct Main *bmain, struct Scene *sce);
+/* clear all dependency graphs, call this when changing relations between objects.
+ * the dependency graphs will be rebuilt just before they are used to avoid them
+ * getting rebuild many times during operators */
+void    DAG_relations_tag_update(struct Main *bmain);
+
+/* (re)-create the dependency graph before using it */
+void    DAG_scene_relations_update(struct Main *bmain, struct Scene *sce);
+
+/* force an immediate rebuild of the dependency graph, only needed in rare cases */
+void    DAG_scene_relations_rebuild(struct Main *bmain, struct Scene *scene);
 
 /* flag all objects that need recalc because they're animated */
 void    DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
@@ -109,9 +117,6 @@ void    DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned i
 /* tag objects for update on file load */
 void    DAG_on_visible_update(struct Main *bmain, const short do_time);
 
-/* when setting manual RECALC flags, call this afterwards */
-void    DAG_ids_flush_update(struct Main *bmain, int time);
-
 /* tag datablock to get updated for the next redraw */
 void    DAG_id_tag_update(struct ID *id, short flag);
 /* flush all tagged updates */
index a6b3008e00ad727258fca340ef62e422d99edb2e..50fe1f7a433d3375f701a2ef085278a88a7207c7 100644 (file)
@@ -320,7 +320,7 @@ static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
        }
        
        /* "brew me a list that's sorted a bit faster now depsy" */
-       DAG_scene_sort(G.main, scene);
+       DAG_scene_relations_rebuild(G.main, scene);
 }
 
 /* update scene for current frame */
index fb2d1a3aaf770687f8932a8e63943df97badb262..be316197078237d937ae43284a97d6d14b382e75 100644 (file)
@@ -1000,8 +1000,7 @@ int BKE_copybuffer_paste(bContext *C, char *libname, ReportList *reports)
        flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
        
        /* recreate dependency graph to include new objects */
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        
        BLO_blendhandle_close(bh);
        /* remove library... */
index 1a25def38296e0919a5c1d206ecda40829dca892..48ad3f513899d5e7ed0cbbc0578120963767cd93 100644 (file)
@@ -4261,7 +4261,7 @@ static void con_unlink_refs_cb(bConstraint *UNUSED(con), ID **idpoin, short isRe
 
 /* Free data of a specific constraint if it has any info.
  * be sure to run BIK_clear_data() when freeing an IK constraint,
- * unless DAG_scene_sort is called. 
+ * unless DAG_relations_tag_update is called. 
  */
 void BKE_free_constraint_data(bConstraint *con)
 {
index 99d0c5ed964f5d2578088622f6f95d899760a73e..56600069aa0574e2b37eeebc40d18ee94bee347b 100644 (file)
@@ -837,7 +837,6 @@ DagForest *build_dag(Main *bmain, Scene *sce, short mask)
        DagAdjList *itA;
 
        dag = sce->theDag;
-       sce->dagisvalid = 1;
        if (dag)
                free_forest(dag);
        else {
@@ -1846,8 +1845,18 @@ static void scene_sort_groups(Main *bmain, Scene *sce)
        }
 }
 
+/* free the depency graph */
+static void dag_scene_free(Scene *sce)
+{
+       if (sce->theDag) {
+               free_forest(sce->theDag);
+               MEM_freeN(sce->theDag);
+               sce->theDag = NULL;
+       }
+}
+
 /* sort the base list on dependency order */
-void DAG_scene_sort(Main *bmain, Scene *sce)
+static void dag_scene_build(Main *bmain, Scene *sce)
 {
        DagNode *node, *rootnode;
        DagNodeQueue *nqueue;
@@ -1856,7 +1865,7 @@ void DAG_scene_sort(Main *bmain, Scene *sce)
        int skip = 0;
        ListBase tempbase;
        Base *base;
-       
+
        tempbase.first = tempbase.last = NULL;
        
        build_dag(bmain, sce, DAG_RL_ALL_BUT_DATA);
@@ -1936,10 +1945,34 @@ void DAG_scene_sort(Main *bmain, Scene *sce)
                        printf(" %s\n", base->object->id.name);
                }
        }
+
        /* temporal...? */
        sce->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */
 }
 
+/* clear all dependency graphs */
+void DAG_relations_tag_update(Main *bmain)
+{
+       Scene *sce;
+
+       for (sce = bmain->scene.first; sce; sce = sce->id.next)
+               dag_scene_free(sce);
+}
+
+/* rebuild dependency graph only for a given scene */
+void DAG_scene_relations_rebuild(Main *bmain, Scene *sce)
+{
+       dag_scene_free(sce);
+       DAG_scene_relations_update(bmain, sce);
+}
+
+/* create dependency graph if it was cleared or didn't exist yet */
+void DAG_scene_relations_update(Main *bmain, Scene *sce)
+{
+       if (!sce->theDag)
+               dag_scene_build(bmain, sce);
+}
+
 static void lib_id_recalc_tag(Main *bmain, ID *id)
 {
        id->flag |= LIB_ID_RECALC;
@@ -2177,7 +2210,7 @@ void DAG_scene_flush_update(Main *bmain, Scene *sce, unsigned int lay, const sho
        
        if (sce->theDag == NULL) {
                printf("DAG zero... not allowed to happen!\n");
-               DAG_scene_sort(bmain, sce);
+               DAG_scene_relations_update(bmain, sce);
        }
        
        firstnode = sce->theDag->DagNode.first;  /* always scene node */
@@ -2545,20 +2578,6 @@ static void dag_current_scene_layers(Main *bmain, ListBase *lb)
        }
 }
 
-void DAG_ids_flush_update(Main *bmain, int time)
-{
-       ListBase listbase;
-       DagSceneLayer *dsl;
-       
-       /* get list of visible scenes and layers */
-       dag_current_scene_layers(bmain, &listbase);
-
-       for (dsl = listbase.first; dsl; dsl = dsl->next)
-               DAG_scene_flush_update(bmain, dsl->scene, dsl->layer, time);
-       
-       BLI_freelistN(&listbase);
-}
-
 void DAG_on_visible_update(Main *bmain, const short do_time)
 {
        ListBase listbase;
@@ -3169,7 +3188,7 @@ void DAG_print_dependencies(Main *bmain, Scene *scene, Object *ob)
        }
        else {
                printf("\nDEPENDENCY RELATIONS for %s\n\n", scene->id.name + 2);
-               DAG_scene_sort(bmain, scene);
+               DAG_scene_relations_rebuild(bmain, scene);
        }
        
        dag_print_dependencies = 0;
index 58b47398a7d79922d86752fe25aa25f3c098cb8c..95b1809bbae003946772420fa10c3493bfbeb0f9 100644 (file)
@@ -74,6 +74,7 @@
 #include "BKE_bullet.h"
 #include "BKE_colortools.h"
 #include "BKE_deform.h"
+#include "BKE_depsgraph.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_animsys.h"
 #include "BKE_anim.h"
@@ -406,7 +407,8 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
 
        if (*obpoin == unlinkOb) {
                *obpoin = NULL;
-               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; // XXX: should this just be OB_RECALC_DATA?
+               // XXX: should this just be OB_RECALC_DATA?
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
        }
 }
 
@@ -440,14 +442,14 @@ void BKE_object_unlink(Object *ob)
                        obt->proxy = NULL;
                if (obt->proxy_from == ob) {
                        obt->proxy_from = NULL;
-                       obt->recalc |= OB_RECALC_OB;
+                       DAG_id_tag_update(&obt->id, OB_RECALC_OB);
                }
                if (obt->proxy_group == ob)
                        obt->proxy_group = NULL;
                
                if (obt->parent == ob) {
                        obt->parent = NULL;
-                       obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                       DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                }
                
                modifiers_foreachObjectLink(obt, unlink_object__unlinkModifierLinks, ob);
@@ -457,15 +459,15 @@ void BKE_object_unlink(Object *ob)
 
                        if (cu->bevobj == ob) {
                                cu->bevobj = NULL;
-                               obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        }
                        if (cu->taperobj == ob) {
                                cu->taperobj = NULL;
-                               obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        }
                        if (cu->textoncurve == ob) {
                                cu->textoncurve = NULL;
-                               obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        }
                }
                else if (obt->type == OB_ARMATURE && obt->pose) {
@@ -483,7 +485,7 @@ void BKE_object_unlink(Object *ob)
                                                        if (ct->tar == ob) {
                                                                ct->tar = NULL;
                                                                ct->subtarget[0] = '\0';
-                                                               obt->recalc |= OB_RECALC_DATA;
+                                                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                                                        }
                                                }
                                                
@@ -497,7 +499,7 @@ void BKE_object_unlink(Object *ob)
                }
                else if (ELEM(OB_MBALL, ob->type, obt->type)) {
                        if (BKE_mball_is_basis_for(obt, ob))
-                               obt->recalc |= OB_RECALC_DATA;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                }
                
                sca_remove_ob_poin(obt, ob);
@@ -514,7 +516,7 @@ void BKE_object_unlink(Object *ob)
                                        if (ct->tar == ob) {
                                                ct->tar = NULL;
                                                ct->subtarget[0] = '\0';
-                                               obt->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                                        }
                                }
                                
@@ -526,12 +528,12 @@ void BKE_object_unlink(Object *ob)
                /* object is deflector or field */
                if (ob->pd) {
                        if (obt->soft)
-                               obt->recalc |= OB_RECALC_DATA;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
 
                        /* cloth */
                        for (md = obt->modifiers.first; md; md = md->next)
                                if (md->type == eModifierType_Cloth)
-                                       obt->recalc |= OB_RECALC_DATA;
+                                       DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                }
                
                /* strips */
@@ -560,14 +562,14 @@ void BKE_object_unlink(Object *ob)
                                for (; pt; pt = pt->next) {
                                        if (pt->ob == ob) {
                                                pt->ob = NULL;
-                                               obt->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                                                break;
                                        }
                                }
 
                                if (tpsys->target_ob == ob) {
                                        tpsys->target_ob = NULL;
-                                       obt->recalc |= OB_RECALC_DATA;
+                                       DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                                }
 
                                if (tpsys->part->dup_ob == ob)
@@ -602,7 +604,7 @@ void BKE_object_unlink(Object *ob)
                                }
                        }
                        if (ob->pd)
-                               obt->recalc |= OB_RECALC_DATA;
+                               DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
                }
 
                obt = obt->id.next;
@@ -970,7 +972,7 @@ Object *BKE_object_add(struct Scene *scene, int type)
        base = BKE_scene_base_add(scene, ob);
        BKE_scene_base_deselect_all(scene);
        BKE_scene_base_select(scene, base);
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
        return ob;
 }
@@ -1480,7 +1482,8 @@ void BKE_object_make_proxy(Object *ob, Object *target, Object *gob)
        ob->proxy_group = gob;
        id_lib_extern(&target->id);
        
-       ob->recalc = target->recalc = OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+       DAG_id_tag_update(&target->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
        
        /* copy transform
         * - gob means this proxy comes from a group, just apply the matrix
index c01ea4e518df8f614bbca10dc8e7636467b1ee4c..f90fde983aaa6f66958e53941746cf97550e69df 100644 (file)
@@ -3509,12 +3509,12 @@ ModifierData *object_add_particle_system(Scene *scene, Object *ob, const char *n
        psys->flag = PSYS_ENABLED | PSYS_CURRENT;
        psys->cfra = BKE_scene_frame_get_from_ctime(scene, CFRA + 1);
 
-       DAG_scene_sort(G.main, scene);
+       DAG_relations_tag_update(G.main);
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 
        return md;
 }
-void object_remove_particle_system(Scene *scene, Object *ob)
+void object_remove_particle_system(Scene *UNUSED(scene), Object *ob)
 {
        ParticleSystem *psys = psys_get_current(ob);
        ParticleSystemModifierData *psmd;
@@ -3552,7 +3552,7 @@ void object_remove_particle_system(Scene *scene, Object *ob)
        else
                ob->mode &= ~OB_MODE_PARTICLE_EDIT;
 
-       DAG_scene_sort(G.main, scene);
+       DAG_relations_tag_update(G.main);
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 }
 static void default_particle_settings(ParticleSettings *part)
index 279c321d371efaad2df42c55615e691b590b6825..9a1a146c2710664864624ec13ea4bb5b605662a2 100644 (file)
@@ -649,12 +649,11 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
        }
 
        /* sort baselist */
-       DAG_scene_sort(bmain, scene);
+       DAG_scene_relations_rebuild(bmain, scene);
        
        /* ensure dags are built for sets */
-       for (sce = scene->set; sce; sce = sce->set)
-               if (sce->theDag == NULL)
-                       DAG_scene_sort(bmain, sce);
+       for (sce = scene; sce; sce = sce->set)
+               DAG_scene_relations_update(bmain, sce);
 
        /* copy layers and flags from bases to objects */
        for (base = scene->base.first; base; base = base->next) {
@@ -1150,9 +1149,15 @@ static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scen
 /* this is called in main loop, doing tagged updates before redraw */
 void BKE_scene_update_tagged(Main *bmain, Scene *scene)
 {
+       Scene *sce_iter;
+       
        /* keep this first */
        BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
 
+       /* (re-)build dependency graph if needed */
+       for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set)
+               DAG_scene_relations_update(bmain, sce_iter);
+
        /* flush recalc flags to dependencies */
        DAG_ids_flush_tagged(bmain);
 
@@ -1203,10 +1208,8 @@ void BKE_scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
        /* clear animation overrides */
        /* XXX TODO... */
 
-       for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set) {
-               if (sce_iter->theDag == NULL)
-                       DAG_scene_sort(bmain, sce_iter);
-       }
+       for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
+               DAG_scene_relations_update(bmain, sce_iter);
 
        /* flush recalc flags to dependencies, if we were only changing a frame
         * this would not be necessary, but if a user or a script has modified
index 4471e45be1d432dcb07654e401112f2484d4c3dd..0e799b3d9515499a38e89e9c084f0ad2184c0920 100644 (file)
 #include "BKE_context.h"
 #include "BKE_curve.h"
 #include "BKE_deform.h"
+#include "BKE_depsgraph.h"
 #include "BKE_effect.h"
 #include "BKE_fcurve.h"
 #include "BKE_global.h" // for G
@@ -2754,7 +2755,7 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
        }
        
        if (rebuild) {
-               ob->recalc = (OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                pose->flag |= POSE_RECALC;
        }
 }
@@ -5115,7 +5116,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
        RigidBodyWorld *rbw;
        
        sce->theDag = NULL;
-       sce->dagisvalid = 0;
        sce->obedit = NULL;
        sce->stats = NULL;
        sce->fps_info = NULL;
@@ -10114,7 +10114,7 @@ static void give_base_to_groups(Main *mainvar, Scene *scene)
                        base = BKE_scene_base_add(scene, ob);
                        base->flag |= SELECT;
                        base->object->flag= base->flag;
-                       ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
+                       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        scene->basact = base;
                        
                        /* assign the group */
index 943c4fb574df59a9ec7ce596f0f7d6ad9afd2b8d..6018807183285c223148514a45a22340397449d4 100644 (file)
@@ -1888,7 +1888,7 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
                job->lay = BKE_scene_base_find(scene, job)->lay = 2;
 
                mul_v3_fl(job->size, 0.5f);
-               job->recalc |= OB_RECALC_OB;
+               DAG_id_tag_update(&job->id, OB_RECALC_OB);
 
                verify_adt_action((ID *)&job->id, 1);
 
@@ -1909,14 +1909,14 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
                if (par_job) {
                        job->parent = par_job;
 
-                       par_job->recalc |= OB_RECALC_OB;
+                       DAG_id_tag_update(&par_job->id, OB_RECALC_OB);
                        job->parsubstr[0] = 0;
                }
 
                BKE_object_where_is_calc(scene, job);
 
                // after parenting and layer change
-               DAG_scene_sort(CTX_data_main(C), scene);
+               DAG_relations_tag_update(CTX_data_main(C));
 
                joint_objects[node->getUniqueId()] = job;
        }
index 6222496a9f75cdce5bb6b45f913992c7840e1bf2..931cc5d29880b29e12fe1c79722c5b81448b21e1 100644 (file)
@@ -70,7 +70,6 @@ public:
        //void operator()(Object *ob);
 
 private:
-       Scene *scene;
        UnitConverter converter;
        const ExportSettings *export_settings;
 
index 17a1c7f1e1859866f1b643a6a48939f16b06f2f4..2b906fa9ac28a1bda1e9630e45d10fffde4a715d 100644 (file)
@@ -230,8 +230,7 @@ void DocumentImporter::finish()
                }
 
                // update scene
-               DAG_scene_sort(bmain, sce);
-               DAG_ids_flush_update(bmain, 0);
+               DAG_relations_tag_update(bmain);
                WM_event_add_notifier(mContext, NC_OBJECT | ND_TRANSFORM, NULL);
 
        }
@@ -242,8 +241,7 @@ void DocumentImporter::finish()
        armature_importer.set_tags_map(this->uid_tags_map);
        armature_importer.make_armatures(mContext);
        armature_importer.make_shape_keys();
-       DAG_scene_sort(bmain, sce);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
 
 #if 0
        armature_importer.fix_animation();
@@ -277,8 +275,7 @@ void DocumentImporter::finish()
                }
                libnode_ob.clear();
 
-               DAG_scene_sort(bmain, sce);
-               DAG_ids_flush_update(bmain, 0);
+               DAG_relations_tag_update(bmain);
        }
 }
 
@@ -389,7 +386,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
        fprintf(stderr, "create <instance_node> under node id=%s from node id=%s\n", instance_node ? instance_node->getOriginalId().c_str() : NULL, source_node ? source_node->getOriginalId().c_str() : NULL);
 
        Object *obn = BKE_object_copy(source_ob);
-       obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
        BKE_scene_base_add(sce, obn);
 
        if (instance_node) {
@@ -416,8 +413,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
                anim_importer.read_node_transform(source_node, obn);
        }
 
-       /*DAG_scene_sort(CTX_data_main(mContext), sce);
-       DAG_ids_flush_update(CTX_data_main(mContext), 0);*/
+       /*DAG_relations_tag_update(CTX_data_main(mContext));*/
 
        COLLADAFW::NodePointerArray &children = source_node->getChildNodes();
        if (children.getCount()) {
index 470f663f716aff88c3dfc42b5636e1577ea4f3e7..15320a8f221f5b5cc28489391ed4f76935c63377 100644 (file)
@@ -237,10 +237,9 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::map<COLLADAFW::Unique
        BKE_object_workob_calc_parent(scene, ob, &workob);
        invert_m4_m4(ob->parentinv, workob.obmat);
 
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
+       DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA);
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 #endif
 
index 45db8510cbb036632f0e78291c3ce5d58f63bf7c..f43878943c18272cc994d41f1825eefa659a0796 100644 (file)
@@ -85,7 +85,6 @@ int bc_test_parent_loop(Object *par, Object *ob)
 int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
 {
        Object workob;
-       Main *bmain = CTX_data_main(C);
        Scene *sce = CTX_data_scene(C);
        
        if (!par || bc_test_parent_loop(par, ob))
@@ -113,12 +112,11 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
        BKE_object_workob_calc_parent(sce, ob, &workob);
        invert_m4_m4(ob->parentinv, workob.obmat);
 
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
-       par->recalc |= OB_RECALC_OB;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+       DAG_id_tag_update(&par->id, OB_RECALC_OB);
 
        /** done once after import
-       DAG_scene_sort(bmain, sce);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
     */
 
@@ -132,7 +130,7 @@ Object *bc_add_object(Scene *scene, int type, const char *name)
 
        ob->data = BKE_object_obdata_add_from_type(type);
        ob->lay = scene->lay;
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
        BKE_scene_base_select(scene, BKE_scene_base_add(scene, ob));
 
@@ -367,4 +365,4 @@ void bc_match_scale(std::vector<Object *> *objects_done,
                BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
        }
 
-}
\ No newline at end of file
+}
index 25833c13925bee8985cf402bc74f59f3852f4634..cd5e873f40dc4902513f64bc897ec6cf99338f07 100644 (file)
@@ -489,8 +489,6 @@ static int add_driver_button_exec(bContext *C, wmOperator *op)
                /* send updates */
                uiContextAnimUpdate(C);
                
-               DAG_ids_flush_update(CTX_data_main(C), 0);
-               
                WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
        }
        
@@ -541,8 +539,6 @@ static int remove_driver_button_exec(bContext *C, wmOperator *op)
                /* send updates */
                uiContextAnimUpdate(C);
                
-               DAG_ids_flush_update(CTX_data_main(C), 0);
-               
                WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL);  // XXX
        }
        
index c99f939300e99686564806642f52834e2f8dd67d..6d1e6eab26b95f37b95b7777d724d7b49577fe3d 100644 (file)
@@ -1215,7 +1215,6 @@ static int modify_key_op_poll(bContext *C)
 
 static int insert_key_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks = NULL;
        int type = RNA_enum_get(op->ptr, "type");
@@ -1261,9 +1260,6 @@ static int insert_key_exec(bContext *C, wmOperator *op)
        else
                BKE_report(op->reports, RPT_WARNING, "Keying set failed to insert any keyframes");
        
-       /* send updates */
-       DAG_ids_flush_update(bmain, 0);
-       
        return OPERATOR_FINISHED;
 }
 
@@ -1371,7 +1367,6 @@ void ANIM_OT_keyframe_insert_menu(wmOperatorType *ot)
 
 static int delete_key_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks = NULL;
        int type = RNA_enum_get(op->ptr, "type");
@@ -1417,9 +1412,6 @@ static int delete_key_exec(bContext *C, wmOperator *op)
        else
                BKE_report(op->reports, RPT_WARNING, "Keying set failed to remove any keyframes");
        
-       /* send updates */
-       DAG_ids_flush_update(bmain, 0);
-       
        return OPERATOR_FINISHED;
 }
 
@@ -1459,8 +1451,6 @@ void ANIM_OT_keyframe_delete(wmOperatorType *ot)
  
 static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
-       
        CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
        {
                /* just those in active action... */
@@ -1505,12 +1495,11 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
                }
                
                /* update... */
-               ob->recalc |= OB_RECALC_OB;
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
        }
        CTX_DATA_END;
        
        /* send updates */
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
        
        return OPERATOR_FINISHED;
@@ -1536,7 +1525,6 @@ void ANIM_OT_keyframe_clear_v3d(wmOperatorType *ot)
 
 static int delete_key_v3d_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        float cfra = (float)CFRA;
        
@@ -1563,12 +1551,11 @@ static int delete_key_v3d_exec(bContext *C, wmOperator *op)
                
                /* report success (or failure) */
                BKE_reportf(op->reports, RPT_INFO, "Object '%s' successfully had %d keyframes removed", id->name + 2, success);
-               ob->recalc |= OB_RECALC_OB;
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
        }
        CTX_DATA_END;
        
        /* send updates */
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
        
        return OPERATOR_FINISHED;
@@ -1596,7 +1583,6 @@ void ANIM_OT_keyframe_delete_v3d(wmOperatorType *ot)
 
 static int insert_key_button_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = {{NULL}};
        PropertyRNA *prop = NULL;
@@ -1655,8 +1641,6 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
                /* send updates */
                uiContextAnimUpdate(C);
                
-               DAG_ids_flush_update(bmain, 0);
-               
                /* send notifiers that keyframes have been changed */
                WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        }
@@ -1686,7 +1670,6 @@ void ANIM_OT_keyframe_insert_button(wmOperatorType *ot)
 
 static int delete_key_button_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = {{NULL}};
        PropertyRNA *prop = NULL;
@@ -1728,8 +1711,6 @@ static int delete_key_button_exec(bContext *C, wmOperator *op)
                /* send updates */
                uiContextAnimUpdate(C);
                
-               DAG_ids_flush_update(bmain, 0);
-               
                /* send notifiers that keyframes have been changed */
                WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        }
@@ -1760,7 +1741,6 @@ void ANIM_OT_keyframe_delete_button(wmOperatorType *ot)
 
 static int clear_key_button_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        PointerRNA ptr = {{NULL}};
        PropertyRNA *prop = NULL;
        char *path;
@@ -1800,8 +1780,6 @@ static int clear_key_button_exec(bContext *C, wmOperator *op)
                /* send updates */
                uiContextAnimUpdate(C);
                
-               DAG_ids_flush_update(bmain, 0);
-               
                /* send notifiers that keyframes have been changed */
                WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        }
index 28db7bf572d13bf8275d29147ba5fd8999e6afba..4e8d7bdafe5542e0ab10a753ceb598a054163855 100644 (file)
@@ -289,7 +289,6 @@ void ANIM_OT_keying_set_path_remove(wmOperatorType *ot)
 
 static int add_keyingset_button_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks = NULL;
        PropertyRNA *prop = NULL;
@@ -360,7 +359,6 @@ static int add_keyingset_button_exec(bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(bmain, 0);
                WM_event_add_notifier(C, NC_SCENE | ND_KEYINGSET, NULL);
                
                /* show notification/report header, so that users notice that something changed */
@@ -392,7 +390,6 @@ void ANIM_OT_keyingset_button_add(wmOperatorType *ot)
 
 static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks = NULL;
        PropertyRNA *prop = NULL;
@@ -442,7 +439,6 @@ static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(bmain, 0);
                WM_event_add_notifier(C, NC_SCENE | ND_KEYINGSET, NULL);
                
                /* show warning */
@@ -1006,7 +1002,8 @@ int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSe
                        {
                                Object *ob = (Object *)ksp->id;
                                
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; // XXX: only object transforms only?
+                               // XXX: only object transforms?
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        }
                        break;
                }
index 06e00cd02c1294be2ebfb510aede59d8554451db..2eac6ba87ee9cf6a85a1da58ddaee3c21be50b7f 100644 (file)
@@ -1004,7 +1004,7 @@ int join_armature_exec(bContext *C, wmOperator *UNUSED(op))
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(bmain, scene);  /* because we removed object(s) */
+       DAG_relations_tag_update(bmain);  /* because we removed object(s) */
 
        ED_armature_from_edit(ob);
        ED_armature_edit_free(ob);
@@ -1217,7 +1217,7 @@ static int separate_armature_exec(bContext *C, wmOperator *UNUSED(op))
        
        /* 2) duplicate base */
        newbase = ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        newob = newbase->object;
        newbase->flag &= ~SELECT;
index e736c494add07ab59928c90b490e53768045eda2..b5aa55dbda978bbedb34dc8dbe5c3257e94a1c68 100644 (file)
@@ -1395,7 +1395,7 @@ static int separate_exec(bContext *C, wmOperator *op)
        
        /* 1. duplicate the object and data */
        newbase = ED_object_add_duplicate(bmain, scene, oldbase, 0); /* 0 = fully linked */
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        ED_base_object_select(newbase, BA_DESELECT);
        newob = newbase->object;
@@ -6218,7 +6218,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op))
        cu = ob->data;
        BLI_movelisttolist(&cu->nurb, &tempbase);
        
-       DAG_scene_sort(bmain, scene);   // because we removed object(s), call before editmode!
+       DAG_relations_tag_update(bmain);   // because we removed object(s), call before editmode!
        
        ED_object_enter_editmode(C, EM_WAITCURSOR);
        ED_object_exit_editmode(C, EM_FREEDATA | EM_WAITCURSOR | EM_DO_UNDO);
index 8e4d0289f78f1ea27ada36264516030b81007d49..adc40288777f47a2b2ec94739ee5b491262d5342 100644 (file)
@@ -1048,9 +1048,8 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
                case B_CONSTRAINT_CHANGETARGET:
                {
                        Main *bmain = CTX_data_main(C);
-                       Scene *scene = CTX_data_scene(C);
                        if (ob->pose) ob->pose->flag |= POSE_RECALC;  /* checks & sorts pose channels */
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
                        break;
                }
 #endif
index ee1d19de7b05960f21acd8de27336f819a28cc4d..1448b53d997b9326e7f0cd51ff43a02039303e15 100644 (file)
@@ -2389,7 +2389,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op)
        //TAG Mesh Objects that share this data
        for (base = scene->base.first; base; base = base->next) {
                if (base->object && base->object->data == me) {
-                       base->object->recalc = OB_RECALC_DATA;
+                       DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                }
        }
 #endif
@@ -3042,7 +3042,7 @@ static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh
        CustomData_bmesh_init_pool(&bm_new->pdata, bm_mesh_allocsize_default.totface, BM_FACE);
 
        base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH);
-       /* DAG_scene_sort(bmain, scene); */ /* normally would call directly after but in this case delay recalc */
+       /* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */
        assign_matarar(base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */
 
        ED_base_object_select(base_new, BA_SELECT);
@@ -3276,7 +3276,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
 
        if (retval) {
                /* delay depsgraph recalc until all objects are duplicated */
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
 
                return OPERATOR_FINISHED;
        }
index cb69faa5b5143e537de8666648647c3921d0c41e..f983a43f5738d651f5d5182b32002594cbcf807f 100644 (file)
@@ -559,7 +559,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
        }
 
 
-       DAG_scene_sort(bmain, scene);   // removed objects, need to rebuild dag before editmode call
+       DAG_relations_tag_update(bmain);   // removed objects, need to rebuild dag
 
 #if 0
        ED_object_enter_editmode(C, EM_WAITCURSOR);
index ab9cd55f99b79fccd8c80631b1de40c15936b0c8..bc577f6ee2936e74faf2e2c889f0a65cf1a6107c 100644 (file)
@@ -381,7 +381,7 @@ Object *ED_object_add_type(bContext *C, int type, const float loc[3], const floa
        ED_object_base_init_transform(C, BASACT, loc, rot);
 
        DAG_id_type_tag(bmain, ID_OB);
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        if (ob->data) {
                ED_render_id_flush_update(bmain, ob->data);
        }
@@ -469,7 +469,7 @@ static int effector_add_exec(bContext *C, wmOperator *op)
 
        ob->pd = object_add_collision_fields(type);
 
-       DAG_scene_sort(CTX_data_main(C), CTX_data_scene(C));
+       DAG_relations_tag_update(CTX_data_main(C));
 
        return OPERATOR_FINISHED;
 }
@@ -835,9 +835,9 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
                id_lib_extern(&group->id);
 
                /* works without this except if you try render right after, see: 22027 */
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
 
-               WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, CTX_data_scene(C));
+               WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
 
                return OPERATOR_FINISHED;
        }
@@ -993,13 +993,12 @@ static int object_delete_exec(bContext *C, wmOperator *op)
                if (scene->id.flag & LIB_DOIT) {
                        scene->id.flag &= ~LIB_DOIT;
                        
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
 
                        WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
                        WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
                }
        }
-       DAG_ids_flush_update(bmain, 0);
 
        return OPERATOR_FINISHED;
 }
@@ -1260,8 +1259,7 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_SCENE, scene);
        WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
 
@@ -1325,7 +1323,7 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob)
        }
 
        obn = BKE_object_copy(ob);
-       obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
        basen = MEM_mallocN(sizeof(Base), "duplibase");
        *basen = *base;
@@ -1427,7 +1425,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                        }
                        else {
                                newob = ob;
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        }
 
                        /* make new mesh data from the original copy */
@@ -1492,7 +1490,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                                        for (ob1 = bmain->object.first; ob1; ob1 = ob1->id.next) {
                                                if (ob1->data == ob->data) {
                                                        ob1->type = OB_CURVE;
-                                                       ob1->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                                                       DAG_id_tag_update(&ob1->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                                }
                                        }
                                }
@@ -1623,7 +1621,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                }
 
                /* delete object should renew depsgraph */
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
        }
 
 // XXX ED_object_enter_editmode(C, 0);
@@ -1639,7 +1637,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                WM_event_add_notifier(C, NC_OBJECT | ND_DATA, BASACT->object);
        }
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
        WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
@@ -1691,7 +1689,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
        }
        else {
                obn = BKE_object_copy(ob);
-               obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+               DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
                basen = MEM_mallocN(sizeof(Base), "duplibase");
                *basen = *base;
@@ -1816,7 +1814,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
                                }
                                break;
                        case OB_ARMATURE:
-                               obn->recalc |= OB_RECALC_DATA;
+                               DAG_id_tag_update(&obn->id, OB_RECALC_DATA);
                                if (obn->pose)
                                        obn->pose->flag |= POSE_RECALC;
                                if (dupflag & USER_DUP_ARM) {
@@ -1906,7 +1904,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
 /* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
 /* leaves selection of base/object unaltered.
  * note: don't call this within a loop since clear_* funcs loop over the entire database.
- * note: caller must do DAG_scene_sort(bmain, scene);
+ * note: caller must do DAG_relations_tag_update(bmain);
  *       this is not done automatic since we may duplicate many objects in a batch */
 Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag)
 {
@@ -1927,7 +1925,7 @@ Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag
        BKE_object_relink(ob);
        set_sca_new_poins_ob(ob);
 
-       /* DAG_scene_sort(bmain, scene); */ /* caller must do */
+       /* DAG_relations_tag_update(bmain); */ /* caller must do */
 
        if (ob->data) {
                ED_render_id_flush_update(bmain, ob->data);
@@ -1971,8 +1969,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
 
        copy_object_set_idnew(C, dupflag);
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
 
        WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
@@ -2047,8 +2044,7 @@ static int add_named_exec(bContext *C, wmOperator *op)
 
        copy_object_set_idnew(C, dupflag);
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
 
        MEM_freeN(base);
 
index 7746329c17f16d85fc7bd5df8b7e2e87327a26bd..72a9e328a02d313333b82a295e2f770aee2ebd59 100644 (file)
@@ -1151,7 +1151,7 @@ void ED_object_constraint_dependency_update(Main *bmain, Scene *scene, Object *o
        ED_object_constraint_update(ob);
 
        if (ob->pose) ob->pose->flag |= POSE_RECALC;    // checks & sorts pose channels
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 }
 
 static int constraint_poll(bContext *C)
@@ -1310,7 +1310,6 @@ void CONSTRAINT_OT_move_up(wmOperatorType *ot)
 static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
        
        /* free constraints for all selected bones */
@@ -1322,7 +1321,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since relationships removed */
-       DAG_scene_sort(bmain, scene);       /* sort order of objects */
+       DAG_relations_tag_update(bmain);
        
        /* note, calling BIK_clear_data() isn't needed here */
 
@@ -1349,7 +1348,6 @@ void POSE_OT_constraints_clear(wmOperatorType *ot)
 static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        
        /* do freeing */
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -1360,7 +1358,7 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since relationships removed */
-       DAG_scene_sort(bmain, scene);       /* sort order of objects */
+       DAG_relations_tag_update(bmain);
        
        /* do updates */
        WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL);
@@ -1385,7 +1383,6 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot)
 static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        bPoseChannel *pchan = CTX_data_active_pose_bone(C);
        
        /* don't do anything if bone doesn't exist or doesn't have any constraints */
@@ -1407,7 +1404,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(bmain, scene);       /* sort order of objects/bones */
+       DAG_relations_tag_update(bmain);
 
        WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL);
        
@@ -1432,7 +1429,6 @@ void POSE_OT_constraints_copy(wmOperatorType *ot)
 static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        Object *obact = ED_object_active_context(C);
        
        /* copy all constraints from active object to all selected objects */
@@ -1447,7 +1443,7 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(bmain, scene);       /* sort order of objects */
+       DAG_relations_tag_update(bmain);
        
        /* notifiers for updates */
        WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, NULL);
@@ -1615,7 +1611,6 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o
 static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        bPoseChannel *pchan;
        bConstraint *con;
        
@@ -1709,7 +1704,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
 
 
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(bmain, scene);       /* sort order of objects */
+       DAG_relations_tag_update(bmain);
        
        if ((ob->type == OB_ARMATURE) && (pchan)) {
                ob->pose->flag |= POSE_RECALC;  /* sort pose channels */
index a13c050982415b401cdc17511c694a9d67962eb6..b94c9e940dca76395efa6fdde9ca26682b977a11 100644 (file)
@@ -150,7 +150,7 @@ static int object_hide_view_clear_exec(bContext *C, wmOperator *UNUSED(op))
        }
        if (changed) {
                DAG_id_type_tag(bmain, ID_OB);
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
                WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
        }
 
@@ -207,7 +207,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
 
        if (changed) {
                DAG_id_type_tag(bmain, ID_OB);
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
                
                WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
                
@@ -771,7 +771,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
        Base *base;
        Curve *cu, *cu1;
        Nurb *nu;
-       int do_scene_sort = FALSE;
+       bool do_depgraph_update = false;
        
        if (scene->id.lib) return;
 
@@ -798,7 +798,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
        for (base = FIRSTBASE; base; base = base->next) {
                if (base != BASACT) {
                        if (TESTBASELIB(v3d, base)) {
-                               base->object->recalc |= OB_RECALC_OB;
+                               DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                                
                                if (event == 1) {  /* loc */
                                        copy_v3_v3(base->object->loc, ob->loc);
@@ -897,7 +897,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                                                
                                                BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family));
                                                
-                                               base->object->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                                        }
                                }
                                else if (event == 19) {   /* bevel settings */
@@ -913,7 +913,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                                                cu1->ext1 = cu->ext1;
                                                cu1->ext2 = cu->ext2;
                                                
-                                               base->object->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                                        }
                                }
                                else if (event == 25) {   /* curve resolution */
@@ -932,7 +932,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                                                        nu = nu->next;
                                                }
                                                
-                                               base->object->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                                        }
                                }
                                else if (event == 21) {
@@ -948,7 +948,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                                                        }
 
                                                        modifier_copyData(md, tmd);
-                                                       base->object->recalc |= OB_RECALC_DATA;
+                                                       DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                                                }
                                        }
                                }
@@ -956,7 +956,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                                        /* Copy the constraint channels over */
                                        BKE_copy_constraints(&base->object->constraints, &ob->constraints, TRUE);
                                        
-                                       do_scene_sort = TRUE;
+                                       do_depgraph_update = true;
                                }
                                else if (event == 23) {
                                        base->object->softflag = ob->softflag;
@@ -1008,10 +1008,8 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
                }
        }
        
-       if (do_scene_sort)
-               DAG_scene_sort(bmain, scene);
-
-       DAG_ids_flush_update(bmain, 0);
+       if (do_depgraph_update)
+               DAG_relations_tag_update(bmain);
 }
 
 static void UNUSED_FUNCTION(copy_attr_menu) (Main * bmain, Scene * scene, View3D * v3d)
index 9b683a1ba98ec5ddad6887ecdc81021806a6ce80..3112bb21091143aef185b2975c35d0ac554c1664 100644 (file)
@@ -137,7 +137,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
                                BKE_report(op->reports, RPT_WARNING, "Skipped some groups because of cycle detected");
                        }
 
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
                        WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
 
                        return OPERATOR_FINISHED;
@@ -197,7 +197,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
        
        if (!ok) BKE_report(op->reports, RPT_ERROR, "Active object contains no groups");
        
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
@@ -229,7 +229,7 @@ static int group_objects_remove_all_exec(bContext *C, wmOperator *UNUSED(op))
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
@@ -269,7 +269,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
                        }
                        CTX_DATA_END;
 
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
                        WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
 
                        return OPERATOR_FINISHED;
@@ -319,7 +319,7 @@ static int group_create_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
index b1612a2b9d39eccf952fb9eaf772a5187b570d3f..43736909c4006cef03d3ff3b76ba862e52fa45bf 100644 (file)
@@ -516,7 +516,7 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
        mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL,
                     NULL, NULL, NULL, NULL, NULL);
        
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        return TRUE;
 }
index 00082b037819072b8ad6a723b7e1cae87bb4e247..b5faa5bdc4e0e0e04003130bbde2641c147e08a4 100644 (file)
@@ -151,10 +151,10 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc
                                ob->pd = object_add_collision_fields(0);
                        
                        ob->pd->deflect = 1;
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
                }
                else if (type == eModifierType_Surface)
-                       DAG_scene_sort(bmain, scene);
+                       DAG_relations_tag_update(bmain);
                else if (type == eModifierType_Multires) {
                        /* set totlvl from existing MDISPS layer if object already had it */
                        multiresModifier_set_levels_from_disps((MultiresModifierData *)new_md, ob);
@@ -343,10 +343,7 @@ int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Ob
        }
 
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
-
-       /* sorting has to be done after the update so that dynamic systems can react properly */
-       if (sort_depsgraph)
-               DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        return 1;
 }
@@ -370,10 +367,7 @@ void ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob)
        }
 
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
-
-       /* sorting has to be done after the update so that dynamic systems can react properly */
-       if (sort_depsgraph)
-               DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 }
 
 int ED_object_modifier_move_up(ReportList *reports, Object *ob, ModifierData *md)
@@ -522,7 +516,7 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *
                }
        }
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        return 1;
 }
@@ -1831,7 +1825,7 @@ static int skin_armature_create_exec(bContext *C, wmOperator *op)
 
                arm_md->object = arm_ob;
                arm_md->deformflag = ARM_DEF_VGROUP | ARM_DEF_QUATERNION;
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
                DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
        }
 
index 629dba465bc4a1f1eb08743238d54934edc089a4..c5e8310e9fb4e14bdc33bf22e81acc82e1a08b56 100644 (file)
@@ -223,7 +223,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
        {
                if (ob != obedit) {
-                       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                        par = obedit->parent;
                        
                        while (par) {
@@ -260,7 +260,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        WM_event_add_notifier(C, NC_OBJECT, NULL);
 
@@ -364,7 +364,7 @@ static int make_proxy_exec(bContext *C, wmOperator *op)
                BKE_object_make_proxy(newob, ob, gob);
                
                /* depsgraph flushes are needed for the new data */
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
                DAG_id_tag_update(&newob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, newob);
        }
@@ -512,14 +512,13 @@ void ED_object_parent_clear(Object *ob, int type)
                break;
        }
        
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 }
 
 /* note, poll should check for editable scene */
 static int parent_clear_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        int type = RNA_enum_get(op->ptr, "type");
 
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -528,8 +527,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
        return OPERATOR_FINISHED;
@@ -597,7 +595,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
        bPoseChannel *pchan = NULL;
        int pararm = ELEM4(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO);
        
-       par->recalc |= OB_RECALC_OB;
+       DAG_id_tag_update(&par->id, OB_RECALC_OB);
        
        /* preconditions */
        if (partype == PAR_FOLLOW || partype == PAR_PATH_CONST) {
@@ -762,7 +760,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
                                invert_m4_m4(ob->parentinv, workob.obmat);
                        }
                        
-                       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
+                       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
                }
        }
 
@@ -791,8 +789,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
        if (!ok)
                return OPERATOR_CANCELLED;
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
 
@@ -903,7 +900,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
        Main *bmain = CTX_data_main(C);
        Object *par = ED_object_active_context(C);
        
-       par->recalc |= OB_RECALC_OB;
+       DAG_id_tag_update(&par->id, OB_RECALC_OB);
        
        /* context iterator */
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -918,7 +915,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
                                memset(ob->loc, 0, 3 * sizeof(float));
                                
                                /* set recalc flags */
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
                                
                                /* set parenting type for object - object only... */
                                ob->parent = par;
@@ -928,8 +925,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(bmain, CTX_data_scene(C));
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -955,7 +951,6 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
 
 static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
 
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -965,13 +960,12 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
                                ob->partype -= PARSLOW;
                                BKE_object_where_is_calc(scene, ob);
                                ob->partype |= PARSLOW;
-                               ob->recalc |= OB_RECALC_OB;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
                        }
                }
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SCENE, scene);
        
        return OPERATOR_FINISHED;
@@ -998,7 +992,6 @@ void OBJECT_OT_slow_parent_clear(wmOperatorType *ot)
 
 static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
 
        CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -1006,12 +999,11 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
                if (ob->parent)
                        ob->partype |= PARSLOW;
 
-               ob->recalc |= OB_RECALC_OB;
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
                
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SCENE, scene);
        
        return OPERATOR_FINISHED;
@@ -1046,7 +1038,6 @@ static EnumPropertyItem prop_clear_track_types[] = {
 static int object_track_clear_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        int type = RNA_enum_get(op->ptr, "type");
 
        if (CTX_data_edit_object(C)) {
@@ -1059,7 +1050,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
                
                /* remove track-object for old track */
                ob->track = NULL;
-               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                
                /* also remove all tracking constraints */
                for (con = ob->constraints.last; con; con = pcon) {
@@ -1073,8 +1064,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(bmain, 0);
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        return OPERATOR_FINISHED;
@@ -1111,7 +1101,6 @@ static EnumPropertyItem prop_make_track_types[] = {
 static int track_set_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        Object *obact = ED_object_active_context(C);
        
        int type = RNA_enum_get(op->ptr, "type");
@@ -1127,7 +1116,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
 
                                data = con->data;
                                data->tar = obact;
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                
                                /* Lamp, Camera and Speaker track differently by default */
                                if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER)
@@ -1147,7 +1136,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
 
                                data = con->data;
                                data->tar = obact;
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                
                                /* Lamp, Camera and Speaker track differently by default */
                                if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) {
@@ -1169,7 +1158,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
 
                                data = con->data;
                                data->tar = obact;
-                               ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                
                                /* Lamp, Camera and Speaker track differently by default */
                                if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) {
@@ -1181,8 +1170,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
                CTX_DATA_END;
        }
        
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -1297,7 +1285,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
        WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
        WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        return OPERATOR_FINISHED;
 }
@@ -1360,7 +1348,6 @@ Base *ED_object_scene_link(Scene *scene, Object *ob)
 
 static int make_links_scene_exec(bContext *C, wmOperator *op)
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene_to = BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene"));
 
        if (scene_to == NULL) {
@@ -1384,8 +1371,6 @@ static int make_links_scene_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(bmain, 0);
-
        /* redraw the 3D view because the object center points are colored differently */
        WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
 
@@ -1476,7 +1461,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
                                                /* if amount of material indices changed: */
                                                test_object_materials(ob_dst->data);
 
-                                               ob_dst->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
                                                break;
                                        case MAKE_LINKS_MATERIALS:
                                                /* new approach, using functions from kernel */
@@ -1515,7 +1500,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
                                                break;
                                        case MAKE_LINKS_MODIFIERS:
                                                BKE_object_link_modifiers(ob_dst, ob_src);
-                                               ob_dst->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                                               DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                                break;
                                        case MAKE_LINKS_FONTS:
                                        {
@@ -1535,7 +1520,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
                                                cu_dst->vfontbi = cu_src->vfontbi;
                                                id_us_plus((ID *)cu_dst->vfontbi);
 
-                                               ob_dst->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+                                               DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
                                                break;
                                        }
                                }
@@ -1554,10 +1539,9 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
                }
        }
 
-       DAG_scene_sort(bmain, scene);
-       
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
+
        return OPERATOR_FINISHED;
 }
 
@@ -1706,7 +1690,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag)
                        id = ob->data;
                        
                        if (id && id->us > 1 && id->lib == NULL) {
-                               ob->recalc = OB_RECALC_DATA;
+                               DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
                                
                                BKE_copy_animdata_id_action(id);
                                
@@ -1742,7 +1726,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag)
                                                ob->data = BKE_lattice_copy(ob->data);
                                                break;
                                        case OB_ARMATURE:
-                                               ob->recalc |= OB_RECALC_DATA;
+                                               DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
                                                ob->data = BKE_armature_copy(ob->data);
                                                BKE_pose_rebuild(ob, ob->data);
                                                break;
@@ -1778,7 +1762,7 @@ static void single_object_action_users(Scene *scene, int flag)
        for (base = FIRSTBASE; base; base = base->next) {
                ob = base->object;
                if (ob->id.lib == NULL && (flag == 0 || (base->flag & SELECT)) ) {
-                       ob->recalc = OB_RECALC_DATA;
+                       DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
                        BKE_copy_animdata_id_action(&ob->id);
                }
        }
@@ -2148,7 +2132,6 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
 
 static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-       Main *bmain = CTX_data_main(C);
        Base *base = ED_view3d_give_base_under_cursor(C, event->mval);
        Material *ma;
        char name[MAX_ID_NAME - 2];
@@ -2160,7 +2143,6 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *even
        
        assign_material(base->object, ma, 1, BKE_MAT_ASSIGN_USERPREF);
        
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
        WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);
        
index 13523154d6208727297dd58d617f33db48ceb1e7..01dcac2d1b4ca6694a246c806c9e94c93cbdccec 100644 (file)
@@ -213,7 +213,6 @@ static void object_clear_scale(Object *ob)
 static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, 
                                                void (*clear_func)(Object *), const char default_ksName[])
 {
-       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks;
        
@@ -244,8 +243,6 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op,
        CTX_DATA_END;
        
        /* this is needed so children are also updated */
-       DAG_ids_flush_update(bmain, 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        return OPERATOR_FINISHED;
@@ -318,7 +315,6 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
 
 static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
        float *v1, *v3;
        float mat[3][3];
 
@@ -338,8 +334,6 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(bmain, 0);
-       
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -991,7 +985,6 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
                        DAG_id_tag_update(&tob->id, OB_RECALC_OB | OB_RECALC_DATA);
 
        if (tot_change) {
-               DAG_ids_flush_update(bmain, 0);
                WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        }
 
index ecc7ea4ae005841eb0ced422e8f4f4d0a119bc0e..48316cfccb74344ee29f88b4f7427a8d8e9d3612 100644 (file)
@@ -172,8 +172,8 @@ static int type_toggle_exec(bContext *C, wmOperator *op)
        
        /* update dependency */
        DAG_id_tag_update(&cObject->id, OB_RECALC_DATA);
+       DAG_relations_tag_update(CTX_data_main(C));
        WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, cObject);
-       DAG_scene_sort(CTX_data_main(C), scene);
 
        return OPERATOR_FINISHED;
 }
index dc309ec3c31c392f77f257ba31c7c84251fda3b8..154daf0eb7210db41476e4d16e110549f1215ff0 100644 (file)
@@ -100,7 +100,6 @@ void BOID_OT_rule_add(wmOperatorType *ot)
 static int rule_del_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_settings", &RNA_ParticleSettings);
        ParticleSettings *part = ptr.data;
        BoidRule *rule;
@@ -123,7 +122,7 @@ static int rule_del_exec(bContext *C, wmOperator *UNUSED(op))
        if (rule)
                rule->flag |= BOIDRULE_CURRENT;
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
 
        return OPERATOR_FINISHED;
@@ -254,7 +253,6 @@ void BOID_OT_state_add(wmOperatorType *ot)
 static int state_del_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_settings", &RNA_ParticleSettings);
        ParticleSettings *part = ptr.data;
        BoidState *state;
@@ -280,7 +278,7 @@ static int state_del_exec(bContext *C, wmOperator *UNUSED(op))
 
        state->flag |= BOIDSTATE_CURRENT;
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
        
        return OPERATOR_FINISHED;
index 23069ab8a085d2ed7587eb5b904897794ce2d699..8cae0140b5acdc4d3238c6e75bcf74b9389004d6 100644 (file)
@@ -151,7 +151,6 @@ static int psys_poll(bContext *C)
 
 static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       Scene *scene = CTX_data_scene(C);
        Main *bmain= CTX_data_main(C);
        ParticleSystem *psys;
        ParticleSettings *part = NULL;
@@ -177,7 +176,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
 
        psys_check_boid_data(psys);
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -205,7 +204,6 @@ void PARTICLE_OT_new(wmOperatorType *ot)
 static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
        Object *ob = ptr.id.data;
@@ -226,7 +224,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
 
        BLI_addtail(&psys->targets, pt);
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -251,7 +249,6 @@ void PARTICLE_OT_new_target(wmOperatorType *ot)
 static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
-       Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
        Object *ob = ptr.id.data;
@@ -275,7 +272,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
        if (pt)
                pt->flag |= PTARGET_CURRENT;
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
index a72a409f27743f9e7a33974d5176f7d87d8be5df..b3f92d3de46c7dde1ddf3e01ce58b649e054e899 100644 (file)
@@ -96,6 +96,8 @@ void ED_rigidbody_con_add(wmOperator *op, Scene *scene, Object *ob, int type)
 
        /* add constraint to rigid body constraint group */
        add_to_group(rbw->constraints, ob, scene, NULL);
+
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB);
 }
 
 void ED_rigidbody_con_remove(Scene *scene, Object *ob)
@@ -130,8 +132,6 @@ static int rigidbody_con_add_exec(bContext *C, wmOperator *op)
        ED_rigidbody_con_add(op, scene, ob, type);
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        /* done */
@@ -177,8 +177,6 @@ static int rigidbody_con_remove_exec(bContext *C, wmOperator *op)
        }
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        /* done */
index 2bf962f4f4a2715149c043ad311f9a7ae3be9e4b..6bcdf6e07aa562f1b6439db38125a91f8be98514 100644 (file)
@@ -151,8 +151,6 @@ static int rigidbody_ob_add_exec(bContext *C, wmOperator *op)
        ED_rigidbody_ob_add(op, scene, ob, type);
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        /* done */
@@ -197,8 +195,6 @@ static int rigidbody_ob_remove_exec(bContext *C, wmOperator *op)
                ED_rigidbody_ob_remove(scene, ob);
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
 
        /* done */
@@ -242,8 +238,6 @@ static int rigidbody_obs_add_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        WM_event_add_notifier(C, NC_OBJECT | ND_POINTCACHE, NULL);
 
@@ -289,8 +283,6 @@ static int rigidbody_obs_remove_exec(bContext *C, wmOperator *UNUSED(op))
        CTX_DATA_END;
 
        /* send updates */
-       DAG_ids_flush_update(CTX_data_main(C), 0);
-
        WM_event_add_notifier(C, NC_OBJECT | ND_POINTCACHE, NULL);
 
        /* done */
index 483348db18e4ab7ce747a8273fd8ca21992229eb..ab16a9d55e66adebbc77bed646630ea6c34fca99 100644 (file)
@@ -383,10 +383,7 @@ static void do_graph_region_driver_buttons(bContext *C, void *UNUSED(arg), int e
                case B_IPO_DEPCHANGE:
                {
                        /* rebuild depsgraph for the new deps */
-                       DAG_scene_sort(bmain, scene);
-                       
-                       /* force an update of depsgraph */
-                       DAG_ids_flush_update(bmain, 0);
+                       DAG_relations_tag_update(bmain);
                }
                break;
        }
index ab660b9cd4acb081bcfd3e3d04005b5b597a7698..9a1b36281965bf60d74c92f06613c912d9af165f 100644 (file)
@@ -1432,8 +1432,7 @@ static int parent_drop_exec(bContext *C, wmOperator *op)
 
        ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, FALSE, FALSE);
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
 
@@ -1522,8 +1521,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
 
                if ((par->type != OB_ARMATURE) && (par->type != OB_CURVE) && (par->type != OB_LATTICE)) {
                        if (ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, FALSE, FALSE)) {
-                               DAG_scene_sort(bmain, scene);
-                               DAG_ids_flush_update(bmain, 0);
+                               DAG_relations_tag_update(bmain);
                                WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
                                WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
                        }
@@ -1706,8 +1704,7 @@ static int parent_clear_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even
 
        ED_object_parent_clear(ob, RNA_enum_get(op->ptr, "type"));
 
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_relations_tag_update(bmain);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
        return OPERATOR_FINISHED;
@@ -1795,8 +1792,7 @@ static int scene_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
                        ED_base_object_select(base, BA_SELECT);
                }
 
-               DAG_scene_sort(bmain, scene);
-               DAG_ids_flush_update(bmain, 0);
+               DAG_relations_tag_update(bmain);
 
                WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, scene);
 
@@ -1828,7 +1824,6 @@ void OUTLINER_OT_scene_drop(wmOperatorType *ot)
 
 static int material_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-       Main *bmain = CTX_data_main(C);
        Material *ma = NULL;
        Object *ob = NULL;
        SpaceOops *soops = CTX_wm_space_outliner(C);
@@ -1860,7 +1855,6 @@ static int material_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
 
                assign_material(ob, ma, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF);
 
-               DAG_ids_flush_update(bmain, 0);
                WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
                WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);
 
index b2070cc2f1c331b2963679c696434ec723905042..303782f3fbd174485b15eaf0051cd704ed767792 100644 (file)
@@ -619,7 +619,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
                 *      cleanup tree here to prevent such cases. */
                outliner_cleanup_tree(soops);
 
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
                str = "Delete Objects";
                WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
        }
@@ -712,10 +712,8 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
        
 
        if (event == 3) { /* instance */
-               Main *bmain = CTX_data_main(C);
-
                /* works without this except if you try render right after, see: 22027 */
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(CTX_data_main(C));
        }
        
        ED_undo_push(C, prop_group_op_types[event].name);
@@ -1110,14 +1108,8 @@ static int outliner_animdata_operation_exec(bContext *C, wmOperator *op)
        
        /* update dependencies */
        if (updateDeps) {
-               Main *bmain = CTX_data_main(C);
-               Scene *scene = CTX_data_scene(C);
-               
                /* rebuild depsgraph for the new deps */
-               DAG_scene_sort(bmain, scene);
-               
-               /* force an update of depsgraph */
-               DAG_ids_flush_update(bmain, 0);
+               DAG_relations_tag_update(CTX_data_main(C));
        }
        
        return OPERATOR_FINISHED;
index f570ec38ae364e45605ed7291206419593d05bda..6edcf980d58d3e881477aba304bf6fd362c79ff5 100644 (file)
@@ -532,7 +532,6 @@ static void make_trans_verts(Object *obedit, float min[3], float max[3], int mod
 
 static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
        Object *obedit = CTX_data_edit_object(C);
        Scene *scene = CTX_data_scene(C);
        RegionView3D *rv3d = CTX_wm_region_data(C);
@@ -623,8 +622,6 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
                                DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
                        }
                        else {
-                               ob->recalc |= OB_RECALC_OB;
-                               
                                vec[0] = -ob->obmat[3][0] + gridf * floorf(0.5f + ob->obmat[3][0] / gridf);
                                vec[1] = -ob->obmat[3][1] + gridf * floorf(0.5f + ob->obmat[3][1] / gridf);
                                vec[2] = -ob->obmat[3][2] + gridf * floorf(0.5f + ob->obmat[3][2] / gridf);
@@ -644,12 +641,13 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
                                
                                /* auto-keyframing */
                                ED_autokeyframe_object(C, scene, ob, ks);
+
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
                        }
                }
                CTX_DATA_END;
        }
 
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -674,7 +672,6 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot)
 
 static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
 {
-       Main *bmain = CTX_data_main(C);
        Object *obedit = CTX_data_edit_object(C);
        Scene *scene = CTX_data_scene(C);
        View3D *v3d = CTX_wm_view3d(C);
@@ -748,8 +745,6 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
                                DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
                        }
                        else {
-                               ob->recalc |= OB_RECALC_OB;
-                               
                                vec[0] = -ob->obmat[3][0] + curs[0];
                                vec[1] = -ob->obmat[3][1] + curs[1];
                                vec[2] = -ob->obmat[3][2] + curs[2];
@@ -769,12 +764,13 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
 
                                /* auto-keyframing */
                                ED_autokeyframe_object(C, scene, ob, ks);
+
+                               DAG_id_tag_update(&ob->id, OB_RECALC_OB);
                        }
                }
                CTX_DATA_END;
        }
 
-       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
index 32ceaf97331a7dc5966bfa1fca04e018495e2de0..5be06188e4e6b2c0d5cde4d9f85d4aff1b1471d1 100644 (file)
@@ -4743,6 +4743,7 @@ static void set_trans_object_base_flags(TransInfo *t)
        }
 
        /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
+       DAG_scene_relations_update(G.main, t->scene);
        DAG_scene_flush_update(G.main, t->scene, -1, 0);
 
        /* and we store them temporal in base (only used for transform code) */
@@ -4820,6 +4821,7 @@ static int count_proportional_objects(TransInfo *t)
        
 
        /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
+       DAG_scene_relations_update(G.main, t->scene);
        DAG_scene_flush_update(G.main, t->scene, -1, 0);
 
        /* and we store them temporal in base (only used for transform code) */
index 644ab9286c57d48beeab4ba341ebfe97e19bab00..952854735f8e79c52a2566c613d9fc9c226f9e9f 100644 (file)
@@ -1140,12 +1140,9 @@ typedef struct Scene {
        
        /* none of the dependency graph  vars is mean to be saved */
        struct  DagForest *theDag;
-       short dagisvalid, dagflags;
+       short dagflags;
        short recalc;                           /* recalc = counterpart of ob->recalc */
 
-       short pad6;
-       int pad5;
-
        /* User-Defined KeyingSets */
        int active_keyingset;                   /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
        ListBase keyingsets;                    /* KeyingSets for this scene */
index 3da718afd1c8122c472798163a214d410b2357b5..63f4e48046894ed7b8d8b9f062bc1a65acd136e3 100644 (file)
@@ -100,7 +100,7 @@ static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
 
        WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
 }
-static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Boids_reset_deps(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
        if (ptr->type == &RNA_ParticleSystem) {
                ParticleSystem *psys = (ParticleSystem *)ptr->data;
@@ -112,7 +112,7 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
        else
                DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
 
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
 }
index 8f8136b0a2880d5e5c5062107f582042f0ae06b3..b7ef76eeaf320b42c200317d5c5750ef173702cf 100644 (file)
@@ -304,7 +304,7 @@ static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
 
 static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        rna_Curve_update_data(bmain, scene, ptr);
 }
 
index 99d2f6dbbda9626b6ad5c6c642ae371e3b19a31d..a505ae0dec285924a6d61561c55717441b5e156c 100644 (file)
@@ -152,7 +152,7 @@ static void rna_DynamicPaintSurfaces_changeFormat(Main *bmain, Scene *scene, Poi
 static void rna_DynamicPaint_resetDependancy(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_DynamicPaintSurface_reset(bmain, scene, ptr);
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 }
 
 static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
index 82e2cb3b0eac2ce2ffab00144dd1ce353321c218..a91832268e24413a66f43d9dd808ade7760db746 100644 (file)
@@ -116,7 +116,7 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
        driver->flag &= ~DRIVER_FLAG_INVALID;
        
        /* TODO: this really needs an update guard... */
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
        
        WM_main_add_notifier(NC_SCENE | ND_FRAME, scene);
index 1eaf54a69aaf8fa43415ac5f3176836340047ebe..810999033a4fb60b45c1fa1b081eae1875063c44 100644 (file)
@@ -267,7 +267,7 @@ static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
 static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Modifier_update(bmain, scene, ptr);
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 }
 
 static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
index 47b775801f6e3bfbbc1f335dea813560fcb008a8..3e7567e0eda7867a22fcbdce984cc708c205f5b2 100644 (file)
@@ -293,12 +293,10 @@ static void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA
        rna_Object_internal_update_data(bmain, scene, ptr);
 }
 
-static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
        DAG_id_tag_update(ptr->id.data, OB_RECALC_OB);
-       if (scene) {
-               DAG_scene_sort(bmain, scene);
-       }
+       DAG_relations_tag_update(bmain);
        WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->id.data);
 }
 
@@ -332,7 +330,7 @@ static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *b
                /* pass */
        }
        else {
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
        }
 
        DAG_id_type_tag(bmain, ID_OB);
index dcb288a6f3283af306c349ee839af0a41c9153e5..434f767ccad12ac3a3feb44150132434db8ff775 100644 (file)
@@ -547,7 +547,7 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
 
                rna_FieldSettings_shape_update(bmain, scene, ptr);
 
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
 
                if (ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
                        DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
@@ -590,9 +590,9 @@ static void rna_EffectorWeight_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
        WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
 }
 
-static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 
        DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
 
index f90389146aa668050a9604592a4b14d4a8266240..d6f3f594395af5caf0c71a6df67ba932d2b2d406 100644 (file)
@@ -622,7 +622,7 @@ static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
 
 static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        rna_Particle_redo(bmain, scene, ptr);
 }
 
@@ -659,7 +659,7 @@ static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget
        return NULL;
 }
 
-static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Particle_target_reset(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
        if (ptr->type == &RNA_ParticleTarget) {
                Object *ob = (Object *)ptr->id.data;
@@ -687,7 +687,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
                psys->recalc = PSYS_RECALC_RESET;
 
                DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
-               DAG_scene_sort(bmain, scene);
+               DAG_relations_tag_update(bmain);
        }
 
        WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
index 23f61282b7858e038291cccb96ed74dd01e5ed6f..1ed675962f39c76c82b6868433b5be4243da3b47 100644 (file)
@@ -187,13 +187,13 @@ static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value)
        }
 }
 
-static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
        Object *ob = ptr->id.data;
        bPose *pose = ptr->data;
 
        pose->flag |= POSE_RECALC;  /* checks & sorts pose channels */
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
        
        BKE_pose_update_constraint_flags(pose);
        
index 7718dc2376d6243983cc1aeb71e546859ce0fde1..afee72ff873e4ee8513e9268e70568344a285dc8 100644 (file)
@@ -381,10 +381,10 @@ static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *report
        if (scene == scene_act)
                ob->lay = base->lay;
 
-       ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
        /* slows down importers too much, run scene.update() */
-       /* DAG_scene_sort(G.main, scene); */
+       /* DAG_srelations_tag_update(G.main); */
 
        WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
 
@@ -412,8 +412,7 @@ static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *o
        ob->id.us--;
 
        /* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
-       DAG_scene_sort(G.main, scene);
-       DAG_ids_flush_update(G.main, 0);
+       DAG_relations_tag_update(G.main);
 
        WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
 }
@@ -1260,7 +1259,6 @@ static void rna_Scene_use_simplify_update(Main *bmain, Scene *UNUSED(scene), Poi
        for (SETLOOPER(sce, sce_iter, base))
                object_simplify_update(base->object);
        
-       DAG_ids_flush_update(bmain, 0);
        WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
 }
 
index bdcda79583e8d741d42a44a9486edb8930c0fa9f..86b97b93437eaaf95c756a010a5557077f2c1cfe 100644 (file)
@@ -62,7 +62,7 @@ static void rna_Smoke_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
 static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Smoke_update(bmain, scene, ptr);
-       DAG_scene_sort(bmain, scene);
+       DAG_relations_tag_update(bmain);
 }
 
 static void rna_Smoke_resetCache(Main *bmain, Scene *scene, PointerRNA *ptr)
index 9562f6d698f91378d5773c31e0594cf6f474b35d..7925747952916c5848256c9b4d772bc601ca8f62 100644 (file)
@@ -2174,8 +2174,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
        flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
 
        /* recreate dependency graph to include new objects */
-       DAG_scene_sort(bmain, scene);
-       DAG_ids_flush_update(bmain, 0);
+       DAG_scene_relations_rebuild(bmain, scene);
 
        BLO_blendhandle_close(bh);