Fix T59495, T59992, T59904, T59178, T60598: broken keyframed value editing.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 29 Jan 2019 10:59:17 +0000 (11:59 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 31 Jan 2019 11:04:57 +0000 (12:04 +0100)
This removes a bunch of animation/driver evaluations and recalc flags that
should be redundant in the new depsgraph, and were incorrectly affecting
the evaluated scene in a permanent way.

Still two cases that could be removed if the depsgraph is improved, in
BKE_object_handle_data_update and BKE_cachefile_update_frame.

For physics subframe interpolation there are also still calls to
BKE_object_where_is_calc that should ideally be removed as well, though
they are not known to cause keyframing bugs.

Differential Revision: https://developer.blender.org/D4274

22 files changed:
source/blender/blenkernel/BKE_animsys.h
source/blender/blenkernel/BKE_object.h
source/blender/blenkernel/intern/action.c
source/blender/blenkernel/intern/anim_sys.c
source/blender/blenkernel/intern/cachefile.c
source/blender/blenkernel/intern/dynamicpaint.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/object_update.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenkernel/intern/rigidbody.c
source/blender/blenkernel/intern/scene.c
source/blender/depsgraph/intern/builder/deg_builder.cc
source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
source/blender/draw/engines/eevee/eevee_motion_blur.c
source/blender/editors/animation/anim_deps.c
source/blender/editors/object/object_constraint.c
source/blender/editors/object/object_modifier.c
source/blender/editors/physics/physics_fluid.c
source/blender/editors/transform/transform_conversions.c
source/blender/makesdna/DNA_anim_types.h
source/blender/makesrna/intern/rna_fcurve.c
source/blender/makesrna/intern/rna_space.c

index 3790230153a93fbcd1eacfa7fa5da02e6b36b51d..618d6523b0cb5219fe89e09f2ce9bc03c2f44963 100644 (file)
@@ -186,6 +186,13 @@ void BKE_animsys_free_nla_keyframing_context_cache(struct ListBase *cache);
 /* ------------- Main API -------------------- */
 /* In general, these ones should be called to do all animation evaluation */
 
+/* Flags for recalc parameter, indicating which part to recalculate. */
+typedef enum eAnimData_Recalc {
+       ADT_RECALC_DRIVERS      = (1 << 0),
+       ADT_RECALC_ANIM         = (1 << 1),
+       ADT_RECALC_ALL          = (ADT_RECALC_DRIVERS | ADT_RECALC_ANIM),
+} eAnimData_Recalc;
+
 /* Evaluation loop for evaluating animation data  */
 void BKE_animsys_evaluate_animdata(struct Depsgraph *depsgraph, struct Scene *scene, struct ID *id, struct AnimData *adt, float ctime, short recalc);
 
index c7d34480a20b69e8aac0c8bd260506a470bc89b9..7117d8942f4c12f916d6ca1d764387e90d5941c3 100644 (file)
@@ -166,9 +166,6 @@ void BKE_object_where_is_calc_ex(
         struct Object *ob, float r_originmat[3][3]);
 void BKE_object_where_is_calc_time(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float ctime);
-void BKE_object_where_is_calc_time_ex(
-        struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float ctime,
-        struct RigidBodyWorld *rbw, float r_originmat[3][3]);
 void BKE_object_where_is_calc_mat4(struct Object *ob, float obmat[4][4]);
 
 /* possibly belong in own moduke? */
index 10ceee487fb27278940aa7fcd7a85e76af32a95c..13bcfaf4f3281ba1ec8c26a471ea0314032fb860 100644 (file)
@@ -1470,7 +1470,6 @@ void what_does_obaction(Object *ob, Object *workob, bPose *pose, bAction *act, c
                /* init animdata, and attach to workob */
                workob->adt = &adt;
 
-               adt.recalc = ADT_RECALC_ANIM;
                adt.action = act;
 
                /* execute effects of Action on to workob (or it's PoseChannels) */
index 9aff54ea3bc6513dbf88ae51df82bffeb4f6db4c..5be8921200458226cb971d9498fb5acfca57f8f3 100644 (file)
@@ -1764,7 +1764,7 @@ static void animsys_evaluate_drivers(PointerRNA *ptr, AnimData *adt, float ctime
                if ((fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED)) == 0) {
                        /* check if driver itself is tagged for recalculation */
                        /* XXX driver recalc flag is not set yet by depsgraph! */
-                       if ((driver) && !(driver->flag & DRIVER_FLAG_INVALID) /*&& (driver->flag & DRIVER_FLAG_RECALC)*/) {
+                       if ((driver) && !(driver->flag & DRIVER_FLAG_INVALID)) {
                                /* evaluate this using values set already in other places
                                 * NOTE: for 'layering' option later on, we should check if we should remove old value before adding
                                 *       new to only be done when drivers only changed */
@@ -1775,9 +1775,6 @@ static void animsys_evaluate_drivers(PointerRNA *ptr, AnimData *adt, float ctime
                                        ok = animsys_write_rna_setting(&anim_rna, curval);
                                }
 
-                               /* clear recalc flag */
-                               driver->flag &= ~DRIVER_FLAG_RECALC;
-
                                /* set error-flag if evaluation failed */
                                if (ok == 0)
                                        driver->flag |= DRIVER_FLAG_INVALID;
@@ -3513,7 +3510,7 @@ void BKE_animsys_evaluate_animdata(Depsgraph *depsgraph, Scene *scene, ID *id, A
         *   that overrides 'rough' work in NLA
         */
        /* TODO: need to double check that this all works correctly */
-       if ((recalc & ADT_RECALC_ANIM) || (adt->recalc & ADT_RECALC_ANIM)) {
+       if (recalc & ADT_RECALC_ANIM) {
                /* evaluate NLA data */
                if ((adt->nla_tracks.first) && !(adt->flag & ADT_NLA_EVAL_OFF)) {
                        /* evaluate NLA-stack
@@ -3524,9 +3521,6 @@ void BKE_animsys_evaluate_animdata(Depsgraph *depsgraph, Scene *scene, ID *id, A
                /* evaluate Active Action only */
                else if (adt->action)
                        animsys_evaluate_action_ex(depsgraph, &id_ptr, adt->action, ctime);
-
-               /* reset tag */
-               adt->recalc &= ~ADT_RECALC_ANIM;
        }
 
        /* recalculate drivers
@@ -3534,10 +3528,7 @@ void BKE_animsys_evaluate_animdata(Depsgraph *depsgraph, Scene *scene, ID *id, A
         *   or be layered on top of existing animation data.
         * - Drivers should be in the appropriate order to be evaluated without problems...
         */
-       if ((recalc & ADT_RECALC_DRIVERS)
-           /* XXX for now, don't check yet, as depsgraph hasn't been updated */
-           /* && (adt->recalc & ADT_RECALC_DRIVERS)*/)
-       {
+       if (recalc & ADT_RECALC_DRIVERS) {
                animsys_evaluate_drivers(&id_ptr, adt, ctime);
        }
 
@@ -3555,9 +3546,6 @@ void BKE_animsys_evaluate_animdata(Depsgraph *depsgraph, Scene *scene, ID *id, A
                RNA_property_update_cache_flush(bmain, scene);
                RNA_property_update_cache_free();
        }
-
-       /* clear recalc flag now */
-       adt->recalc = 0;
 }
 
 /* Evaluation of all ID-blocks with Animation Data blocks - Animation Data Only
@@ -3705,8 +3693,7 @@ void BKE_animsys_eval_animdata(Depsgraph *depsgraph, ID *id)
                              * which should get handled as part of the dependency graph instead...
                              */
        DEG_debug_print_eval_time(depsgraph, __func__, id->name, id, ctime);
-       short recalc = ADT_RECALC_ANIM;
-       BKE_animsys_evaluate_animdata(depsgraph, scene, id, adt, ctime, recalc);
+       BKE_animsys_evaluate_animdata(depsgraph, scene, id, adt, ctime, ADT_RECALC_ANIM);
 }
 
 void BKE_animsys_update_driver_array(ID *id)
@@ -3758,7 +3745,7 @@ void BKE_animsys_eval_driver(Depsgraph *depsgraph,
        if ((fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED)) == 0) {
                /* check if driver itself is tagged for recalculation */
                /* XXX driver recalc flag is not set yet by depsgraph! */
-               if ((driver_orig) && !(driver_orig->flag & DRIVER_FLAG_INVALID) /*&& (driver_orig->flag & DRIVER_FLAG_RECALC)*/) {
+               if ((driver_orig) && !(driver_orig->flag & DRIVER_FLAG_INVALID)) {
                        /* evaluate this using values set already in other places
                         * NOTE: for 'layering' option later on, we should check if we should remove old value before adding
                         *       new to only be done when drivers only changed */
@@ -3797,11 +3784,6 @@ void BKE_animsys_eval_driver(Depsgraph *depsgraph,
                                }
                        }
 
-                       //printf("\tnew val = %f\n", fcu->curval);
-
-                       /* clear recalc flag */
-                       driver_orig->flag &= ~DRIVER_FLAG_RECALC;
-
                        /* set error-flag if evaluation failed */
                        if (ok == 0) {
                                printf("invalid driver - %s[%d]\n", fcu->rna_path, fcu->array_index);
index 6fcfe468e98b0ad9371a5dfd4aa9d76e46248b49..128608b3b51c09472abf4b769a4d2d49635ce064 100644 (file)
@@ -184,7 +184,8 @@ void BKE_cachefile_update_frame(
        char filename[FILE_MAX];
 
        for (cache_file = bmain->cachefiles.first; cache_file; cache_file = cache_file->id.next) {
-               /* Execute drivers only, as animation has already been done. */
+               /* TODO: dependency graph should be updated to do drivers on cachefile.
+                * Execute drivers only, as animation has already been done. */
                BKE_animsys_evaluate_animdata(depsgraph, scene, &cache_file->id, cache_file->adt, ctime, ADT_RECALC_DRIVERS);
 
                if (!cache_file->is_sequence) {
index 2cb9bd5c6191b6a788f2f6f11f33ff17b59cec0e..74f8f27b601babc169b3f00db6c2a6309c1851a3 100644 (file)
@@ -5962,8 +5962,6 @@ static int dynamicPaint_doStep(
                                            psys_check_enabled(brushObj, brush->psys, for_render))
                                        {
                                                /* Paint a particle system */
-                                               BKE_animsys_evaluate_animdata(depsgraph, scene, &brush->psys->part->id, brush->psys->part->adt,
-                                                                             BKE_scene_frame_get(scene), ADT_RECALC_ANIM);
                                                dynamicPaint_paintParticles(surface, brush->psys, brush, timescale);
                                        }
                                        /* Object center distance: */
index 341a15268ef55a9dab845d15c62d244c366fe769..f3ff601b7e06b682a4e5f589861208bf41c515b6 100644 (file)
@@ -2210,15 +2210,10 @@ static void solve_parenting(Object *ob, Object *par, float obmat[4][4],
 }
 
 /* note, scene is the active scene while actual_scene is the scene the object resides in */
-void BKE_object_where_is_calc_time_ex(
+static void object_where_is_calc_ex(
         Depsgraph *depsgraph, Scene *scene, Object *ob, float ctime,
         RigidBodyWorld *rbw, float r_originmat[3][3])
 {
-       if (ob == NULL) return;
-
-       /* execute drivers only, as animation has already been done */
-       BKE_animsys_evaluate_animdata(depsgraph, scene, &ob->id, ob->adt, ctime, ADT_RECALC_DRIVERS);
-
        if (ob->parent) {
                Object *par = ob->parent;
 
@@ -2249,7 +2244,9 @@ void BKE_object_where_is_calc_time_ex(
 
 void BKE_object_where_is_calc_time(Depsgraph *depsgraph, Scene *scene, Object *ob, float ctime)
 {
-       BKE_object_where_is_calc_time_ex(depsgraph, scene, ob, ctime, NULL, NULL);
+       /* Execute drivers and animation. */
+       BKE_animsys_evaluate_animdata(depsgraph, scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
+       object_where_is_calc_ex(depsgraph, scene, ob, ctime, NULL, NULL);
 }
 
 /* get object transformation matrix without recalculating dependencies and
@@ -2269,11 +2266,13 @@ void BKE_object_where_is_calc_mat4(Object *ob, float obmat[4][4])
 
 void BKE_object_where_is_calc_ex(Depsgraph *depsgraph, Scene *scene, RigidBodyWorld *rbw, Object *ob, float r_originmat[3][3])
 {
-       BKE_object_where_is_calc_time_ex(depsgraph, scene, ob, DEG_get_ctime(depsgraph), rbw, r_originmat);
+       float ctime = DEG_get_ctime(depsgraph);
+       object_where_is_calc_ex(depsgraph, scene, ob, ctime, rbw, r_originmat);
 }
 void BKE_object_where_is_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
 {
-       BKE_object_where_is_calc_time_ex(depsgraph, scene, ob, DEG_get_ctime(depsgraph), NULL, NULL);
+       float ctime = DEG_get_ctime(depsgraph);
+       object_where_is_calc_ex(depsgraph, scene, ob, ctime, NULL, NULL);
 }
 
 /**
@@ -4013,16 +4012,17 @@ bool BKE_object_modifier_update_subframe(
        /* was originally ID_RECALC_ALL - TODO - which flags are really needed??? */
        /* TODO(sergey): What about animation? */
        ob->id.recalc |= ID_RECALC_ALL;
-       BKE_animsys_evaluate_animdata(depsgraph, scene, &ob->id, ob->adt, frame, ADT_RECALC_ANIM);
        if (update_mesh) {
+               BKE_animsys_evaluate_animdata(depsgraph, scene, &ob->id, ob->adt, frame, ADT_RECALC_ANIM);
                /* ignore cache clear during subframe updates
                 * to not mess up cache validity */
                object_cacheIgnoreClear(ob, 1);
                BKE_object_handle_update(depsgraph, scene, ob);
                object_cacheIgnoreClear(ob, 0);
        }
-       else
+       else {
                BKE_object_where_is_calc_time(depsgraph, scene, ob, frame);
+       }
 
        /* for curve following objects, parented curve has to be updated too */
        if (ob->type == OB_CURVE) {
index 5a25880a7d1966b876942d6424c40437e7d58780..1b0717856840e4a38abb88da320f067ec0151d47 100644 (file)
@@ -158,22 +158,13 @@ void BKE_object_handle_data_update(
         Scene *scene,
         Object *ob)
 {
-       ID *data_id = (ID *)ob->data;
-       AnimData *adt = BKE_animdata_from_id(data_id);
-       Key *key;
        float ctime = BKE_scene_frame_get(scene);
 
        DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
 
-       /* TODO(sergey): Only used by legacy depsgraph. */
-       if (adt) {
-               /* evaluate drivers - datalevel */
-               /* XXX: for mesh types, should we push this to evaluated mesh instead? */
-               BKE_animsys_evaluate_animdata(depsgraph, scene, data_id, adt, ctime, ADT_RECALC_DRIVERS);
-       }
-
-       /* TODO(sergey): Only used by legacy depsgraph. */
-       key = BKE_key_from_object(ob);
+       /* TODO: only here to evaluate drivers twice to fix dependency graph
+        * not handling shape key values that depend on each other. */
+       Key *key = BKE_key_from_object(ob);
        if (key && key->block.first) {
                if (!(ob->shapeflag & OB_SHAPE_LOCK))
                        BKE_animsys_evaluate_animdata(depsgraph, scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS);
index 59eb431b44b57b5422b55de4e04a7a6796063406..9d04960e77dc29151391f1ebbf9564f53205356b 100644 (file)
@@ -993,8 +993,6 @@ static void evaluate_emitter_anim(struct Depsgraph *depsgraph, Scene *scene, Obj
        if (ob->parent)
                evaluate_emitter_anim(depsgraph, scene, ob->parent, cfra);
 
-       /* we have to force RECALC_ANIM here since where_is_objec_time only does drivers */
-       BKE_animsys_evaluate_animdata(depsgraph, scene, &ob->id, ob->adt, cfra, ADT_RECALC_ANIM);
        BKE_object_where_is_calc_time(depsgraph, scene, ob, cfra);
 }
 
@@ -4239,9 +4237,6 @@ void particle_system_update(struct Depsgraph *depsgraph, Scene *scene, Object *o
                BKE_mesh_tessface_ensure(sim.psmd->mesh_final);
        }
 
-       /* execute drivers only, as animation has already been done */
-       BKE_animsys_evaluate_animdata(depsgraph, scene, &part->id, part->adt, cfra, ADT_RECALC_DRIVERS);
-
        /* to verify if we need to restore object afterwards */
        psys->flag &= ~PSYS_OB_ANIM_RESTORE;
 
index 67e0834e0882785ed9283eb4df602c178c437216..ee9c9be6e7fd6b30819a9c0a0402cab51b2f65b3 100644 (file)
@@ -1412,6 +1412,8 @@ static void rigidbody_update_sim_ob(Depsgraph *depsgraph, Scene *scene, RigidBod
  */
 static void rigidbody_update_simulation(Depsgraph *depsgraph, Scene *scene, RigidBodyWorld *rbw, bool rebuild)
 {
+       float ctime = DEG_get_ctime(depsgraph);
+
        /* update world */
        if (rebuild)
                BKE_rigidbody_validate_sim_world(scene, rbw, true);
@@ -1443,7 +1445,7 @@ static void rigidbody_update_simulation(Depsgraph *depsgraph, Scene *scene, Rigi
                        /* validate that we've got valid object set up here... */
                        RigidBodyOb *rbo = ob->rigidbody_object;
                        /* update transformation matrix of the object so we don't get a frame of lag for simple animations */
-                       BKE_object_where_is_calc(depsgraph, scene, ob);
+                       BKE_object_where_is_calc_time(depsgraph, scene, ob, ctime);
 
                        /* TODO remove this whole block once we are sure we never get NULL rbo here anymore. */
                        /* This cannot be done in CoW evaluation context anymore... */
@@ -1497,7 +1499,7 @@ static void rigidbody_update_simulation(Depsgraph *depsgraph, Scene *scene, Rigi
                /* validate that we've got valid object set up here... */
                RigidBodyCon *rbc = ob->rigidbody_constraint;
                /* update transformation matrix of the object so we don't get a frame of lag for simple animations */
-               BKE_object_where_is_calc(depsgraph, scene, ob);
+               BKE_object_where_is_calc_time(depsgraph, scene, ob, ctime);
 
                /* TODO remove this whole block once we are sure we never get NULL rbo here anymore. */
                /* This cannot be done in CoW evaluation context anymore... */
index 126a4dfed47e5802bf6b39fd53da400196c25314..a3faa3d375c4f4764a2bd59212aeac79797163f0 100644 (file)
@@ -1402,7 +1402,7 @@ static void scene_armature_depsgraph_workaround(Main *bmain, Depsgraph *depsgrap
                return;
        }
        for (ob = bmain->object.first; ob; ob = ob->id.next) {
-               if (ob->type == OB_ARMATURE && ob->adt && ob->adt->recalc & ADT_RECALC_ANIM) {
+               if (ob->type == OB_ARMATURE && ob->adt) {
                        if (ob->pose == NULL || (ob->pose->flag & POSE_RECALC)) {
                                BKE_pose_rebuild(bmain, ob, ob->data, true);
                        }
index ab3ca9f70cf40622130e67c66b7f41ba94b9e593..10369cb295ad31d26ce0fc5685d56809c1069d0a 100644 (file)
@@ -132,12 +132,6 @@ void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
                ID *id = id_node->id_orig;
                id_node->finalize_build(graph);
                int flag = 0;
-               if ((id->recalc & ID_RECALC_ALL)) {
-                       AnimData *adt = BKE_animdata_from_id(id);
-                       if (adt != NULL && (adt->recalc & ADT_RECALC_ANIM) != 0) {
-                               flag |= ID_RECALC_ANIMATION;
-                       }
-               }
                /* Tag rebuild if special evaluation flags changed. */
                if (id_node->eval_flags != id_node->previous_eval_flags) {
                        flag |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY;
index 8c349b7067f5039b5222021d643f8828372629f5..083153185dd6911e0a5280fc908c15ceef480360 100644 (file)
@@ -166,13 +166,6 @@ void DepsgraphNodeBuilder::build_rig(Object *object, bool is_object_visible)
        if (object->pose == NULL || (object->pose->flag & POSE_RECALC)) {
                /* By definition, no need to tag depsgraph as dirty from here, so we can pass NULL bmain. */
                BKE_pose_rebuild(NULL, object, armature, true);
-               /* XXX: Without this animation gets lost in certain circumstances
-                * after loading file. Need to investigate further since it does
-                * not happen with simple scenes..
-                */
-               if (object->adt) {
-                       object->adt->recalc |= ADT_RECALC_ANIM;
-               }
        }
        /* Speed optimization for animation lookups. */
        if (object->pose != NULL) {
index 33e11c3017bfa3add6ddc181e50425bd7997ea67..d031a0a23c8bda931a564f2957defa4632957ada 100644 (file)
@@ -72,7 +72,6 @@ static void eevee_motion_blur_camera_get_matrix_at_time(
        /* Past matrix */
        /* FIXME : This is a temporal solution that does not take care of parent animations */
        /* Recalc Anim manually */
-       BKE_animsys_evaluate_animdata(draw_ctx->depsgraph, scene, &cam_cpy.id, cam_cpy.adt, time, ADT_RECALC_ALL);
        BKE_animsys_evaluate_animdata(draw_ctx->depsgraph, scene, &camdata_cpy.id, camdata_cpy.adt, time, ADT_RECALC_ALL);
        BKE_object_where_is_calc_time(draw_ctx->depsgraph, scene, &cam_cpy, time);
 
index b69d93aaacfcfb048e9bf872655c3a05af35d2c3..45ecf155a27f44e46fe87ee5d41a642e20773de6 100644 (file)
@@ -77,7 +77,6 @@ void ANIM_list_elem_update(Main *bmain, Scene *scene, bAnimListElem *ale)
        /* tag AnimData for refresh so that other views will update in realtime with these changes */
        adt = BKE_animdata_from_id(id);
        if (adt) {
-               adt->recalc |= ADT_RECALC_ANIM;
                DEG_id_tag_update(id, ID_RECALC_ANIMATION);
                if (adt->action != NULL) {
                        DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE);
@@ -117,13 +116,6 @@ void ANIM_list_elem_update(Main *bmain, Scene *scene, bAnimListElem *ale)
 void ANIM_id_update(Main *bmain, ID *id)
 {
        if (id) {
-               AnimData *adt = BKE_animdata_from_id(id);
-
-               /* tag AnimData for refresh so that other views will update in realtime with these changes */
-               if (adt)
-                       adt->recalc |= ADT_RECALC_ANIM;
-
-               /* set recalc flags */
                DEG_id_tag_update_ex(bmain, id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION); // XXX or do we want something more restrictive?
        }
 }
index e362eb535b849710c65bc1cf06394088f97de732..3fdd770b0084277d788f4e994b54c49776dd4df1 100644 (file)
@@ -1242,7 +1242,7 @@ static void object_pose_tag_update(Main *bmain, Object *ob)
                 * Note that this is a bit wide here, since we cannot be sure whether there are some locked proxy bones
                 * or not...
                 * XXX Temp hack until new depsgraph hopefully solves this. */
-               ob->adt->recalc |= ADT_RECALC_ANIM;
+               DEG_id_tag_update(&ob->id, ID_RECALC_ANIMATION);
        }
 }
 
@@ -1856,7 +1856,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
                        /* We need to make use of ugly POSE_ANIMATION_WORKAROUND here too, else anim data are not reloaded
                         * after calling `BKE_pose_rebuild()`, which causes T43872.
                         * XXX Temp hack until new depsgraph hopefully solves this. */
-                       ob->adt->recalc |= ADT_RECALC_ANIM;
+                       DEG_id_tag_update(&ob->id, ID_RECALC_ANIMATION);
                }
                DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_TRANSFORM);
        }
index 02ee1f9c36027c0a18bb56d377479dadfee30391..23a7064b994c648ca5bce4a3555587313ab571ff 100644 (file)
@@ -2190,23 +2190,8 @@ static int ocean_bake_exec(bContext *C, wmOperator *op)
 
        /* precalculate time variable before baking */
        for (f = omd->bakestart; f <= omd->bakeend; f++) {
-               /* from physics_fluid.c:
-                *
-                * XXX: This can't be used due to an anim sys optimization that ignores recalc object animation,
-                * leaving it for the depgraph (this ignores object animation such as modifier properties though... :/ )
-                * --> BKE_animsys_evaluate_all_animation(bmain, eval_time);
-                * This doesn't work with drivers:
-                * --> BKE_animsys_evaluate_animdata(&fsDomain->id, fsDomain->adt, eval_time, ADT_RECALC_ALL);
-                */
-
-               /* Modifying the global scene isn't nice, but we can do it in
-                * this part of the process before a threaded job is created */
-
-               //scene->r.cfra = f;
-               //ED_update_for_newframe(bmain, scene);
-
-               /* ok, this doesn't work with drivers, but is way faster.
-                * let's use this for now and hope nobody wants to drive the time value... */
+               /* For now only simple animation of time value is supported, nothing else.
+                * No drivers or other modifier parameters. */
                BKE_animsys_evaluate_animdata(CTX_data_depsgraph(C), scene, (ID *)ob, ob->adt, f, ADT_RECALC_ANIM);
 
                och->time[i] = omd->time;
index 96d67398b2bd127709cdecf9007005f3be1248dc..b864d9a2c52bbd850b2e255155ca79290d0ed2f9 100644 (file)
@@ -399,13 +399,6 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
 
                eval_time = domainSettings->bakeStart + i;
 
-               /* XXX: This can't be used due to an anim sys optimization that ignores recalc object animation,
-                * leaving it for the depgraph (this ignores object animation such as modifier properties though... :/ )
-                * --> BKE_animsys_evaluate_all_animation(CTX_data_main(C), eval_time);
-                * This doesn't work with drivers:
-                * --> BKE_animsys_evaluate_animdata(&fsDomain->id, fsDomain->adt, eval_time, ADT_RECALC_ALL);
-                */
-
                /* Modifying the global scene isn't nice, but we can do it in
                 * this part of the process before a threaded job is created */
                scene->r.cfra = (int)eval_time;
index d3661cf60e1377322b011b2258843618447c88d7..75ecf766f85f99cfc8628ad938b731e1df4d4e35 100644 (file)
@@ -5791,7 +5791,7 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob)
                skip_invert = true;
 
        if (skip_invert == false && constinv == false) {
-               ob->transflag |= OB_NO_CONSTRAINTS;  /* BKE_object_where_is_calc_time checks this */
+               ob->transflag |= OB_NO_CONSTRAINTS;  /* BKE_object_where_is_calc checks this */
                BKE_object_where_is_calc(t->depsgraph, t->scene, ob);
                ob->transflag &= ~OB_NO_CONSTRAINTS;
        }
index 4fb0a19dfc8ddcb67aeb285caac2a388e9a73722..14ebc2f4aa24da1057416c599844d35a8cfdb61c 100644 (file)
@@ -520,8 +520,7 @@ typedef enum eDriver_Types {
 typedef enum eDriver_Flags {
                /* driver has invalid settings (internal flag)  */
        DRIVER_FLAG_INVALID             = (1<<0),
-               /* driver needs recalculation (set by depsgraph) */
-       DRIVER_FLAG_RECALC              = (1<<1),
+       DRIVER_FLAG_DEPRECATED  = (1<<1),
                /* driver does replace value, but overrides (for layering of animation over driver) */
                // TODO: this needs to be implemented at some stage or left out...
        //DRIVER_FLAG_LAYERING  = (1<<2),
@@ -1058,8 +1057,7 @@ typedef struct AnimData {
                /* settings for animation evaluation */
        /** User-defined settings. */
        int flag;
-       /** Depsgraph recalculation flags. */
-       int recalc;
+       int pad;
 
                /* settings for active action evaluation (based on NLA strip settings) */
        /** Accumulation mode for active action. */
@@ -1100,13 +1098,6 @@ typedef enum eAnimData_Flag {
        ADT_CURVES_ALWAYS_VISIBLE = (1<<17),
 } eAnimData_Flag;
 
-/* Animation Data recalculation settings (to be set by depsgraph) */
-typedef enum eAnimData_Recalc {
-       ADT_RECALC_DRIVERS      = (1 << 0),
-       ADT_RECALC_ANIM         = (1 << 1),
-       ADT_RECALC_ALL          = (ADT_RECALC_DRIVERS | ADT_RECALC_ANIM),
-} eAnimData_Recalc;
-
 /* Base Struct for Anim ------------------------------------- */
 
 /* Used for BKE_animdata_from_id()
index 057cb9eba0d879caf52c2e75338ba71edbb55f96..1156bc2a7c59c1e6a2133d12383f20786456d3b1 100644 (file)
@@ -622,8 +622,6 @@ static void rna_FModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
         */
        DEG_id_tag_update(id, ID_RECALC_ANIMATION);
        if (adt != NULL) {
-               adt->recalc |= ADT_RECALC_ANIM;
-
                if (adt->action != NULL) {
                        /* action is separate datablock, needs separate tag */
                        DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE);
index 4313f12036dfefb2342c52f30965bdd476ae7123..28dd3a123b1350bf44beca2a32254b8f61c77e08 100644 (file)
@@ -1516,7 +1516,7 @@ static void rna_SpaceDopeSheetEditor_action_update(bContext *C, PointerRNA *ptr)
                        }
 
                        /* Force update of animdata */
-                       adt->recalc |= ADT_RECALC_ANIM;
+                       DEG_id_tag_update(&obact->id, ID_RECALC_ANIMATION);
                }
 
                /* force depsgraph flush too */