diff options
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 20 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_channels_defines.c | 10 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_channels_edit.c | 6 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_deps.c | 4 | ||||
-rw-r--r-- | source/blender/editors/animation/fmodifier_ui.c | 2 | ||||
-rw-r--r-- | source/blender/editors/animation/keyframing.c | 10 | ||||
-rw-r--r-- | source/blender/editors/animation/keyingsets.c | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_ID.h | 14 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_action.c | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_fcurve.c | 6 |
10 files changed, 35 insertions, 43 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index fe1ef81262d..2e78df7584a 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -2635,30 +2635,12 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDNode *id_node) * copied by copy-on-write, and not preserved. PROBABLY it is better * to preserve that cache in copy-on-write, but for the time being * we allow flush to layer collections component which will ensure - * that cached array fo bases exists and is up-to-date. - * - * - Action is allowed to flush as well, this way it's possible to - * keep current tagging in animation editors (which tags action for - * CoW update when it's changed) but yet guarantee evaluation order - * with objects which are using that action. */ + * that cached array fo bases exists and is up-to-date. */ if (comp_node->type == NodeType::PARAMETERS || comp_node->type == NodeType::LAYER_COLLECTIONS) { rel_flag &= ~RELATION_FLAG_NO_FLUSH; } - if (comp_node->type == NodeType::ANIMATION && id_type == ID_AC) { - rel_flag &= ~RELATION_FLAG_NO_FLUSH; - /* NOTE: We only allow flush on user edits. If the action block is - * just brought into the dependency graph it is either due to - * initial graph construction or due to some property got animated. - * In first case all the related datablocks will be tagged for an - * update as well. In the second case it is up to the editing - * function to tag changed datablock. - * - * This logic allows to preserve unkeyed changes on file load and on - * undo. */ - rel_flag |= RELATION_FLAG_FLUSH_USER_EDIT_ONLY; - } /* All entry operations of each component should wait for a proper * copy of ID. */ OperationNode *op_entry = comp_node->get_entry_operation(); diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index d1cef1cfa17..e3138dee1a7 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -4059,13 +4059,13 @@ static void achannel_setting_flush_widget_cb(bContext *C, void *ale_npoin, void WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, NULL); } - /* tag copy-on-write flushing (so that the settings will have an effect) */ + /* Tag for full animation update, so that the settings will have an effect. */ if (ale_setting->id) { - DEG_id_tag_update(ale_setting->id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(ale_setting->id, ID_RECALC_ANIMATION); } if (ale_setting->adt && ale_setting->adt->action) { - /* action is it's own datablock, so has to be tagged specifically... */ - DEG_id_tag_update(&ale_setting->adt->action->id, ID_RECALC_COPY_ON_WRITE); + /* Action is it's own datablock, so has to be tagged specifically. */ + DEG_id_tag_update(&ale_setting->adt->action->id, ID_RECALC_ANIMATION); } /* verify animation context */ @@ -4109,7 +4109,7 @@ static void achannel_nlatrack_solo_widget_cb(bContext *C, void *ale_poin, void * BKE_nlatrack_solo_toggle(adt, nlt); /* send notifiers */ - DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION); WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); } diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 3bcbe2d99e3..acffbd56b18 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1350,7 +1350,7 @@ static int animchannels_rearrange_exec(bContext *C, wmOperator *op) switch (ac.datatype) { case ANIMCONT_NLA: /* NLA-tracks only */ rearrange_nla_channels(&ac, adt, mode); - DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION); break; case ANIMCONT_DRIVERS: /* Drivers list only */ @@ -1637,7 +1637,7 @@ static void update_dependencies_on_delete(bAnimListElem *ale) if (adt != NULL) { DEG_id_tag_update(id, ID_RECALC_ANIMATION); if (adt->action != NULL) { - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION); } } /* Deals with NLA and drivers. @@ -1693,7 +1693,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op)) /* free the group itself */ if (adt->action) { BLI_freelinkN(&adt->action->groups, agrp); - DEG_id_tag_update_ex(CTX_data_main(C), &adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update_ex(CTX_data_main(C), &adt->action->id, ID_RECALC_ANIMATION); } else MEM_freeN(agrp); diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 7bef42d8682..dfb1a456364 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -72,13 +72,13 @@ void ANIM_list_elem_update(Main *bmain, Scene *scene, bAnimListElem *ale) if (adt) { DEG_id_tag_update(id, ID_RECALC_ANIMATION); if (adt->action != NULL) { - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION); } } /* Tag copy on the main object if updating anything directly inside AnimData */ if (ELEM(ale->type, ANIMTYPE_ANIMDATA, ANIMTYPE_NLAACTION, ANIMTYPE_NLATRACK, ANIMTYPE_NLACURVE)) { - DEG_id_tag_update(id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(id, ID_RECALC_ANIMATION); return; } diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 40454bcad0c..8edad506a33 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -100,7 +100,7 @@ static void delete_fmodifier_cb(bContext *C, void *ctx_v, void *fcm_v) /* send notifiers */ // XXX for now, this is the only way to get updates in all the right places... but would be nice to have a special one in this case WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); - DEG_id_tag_update(ctx->fcurve_owner_id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(ctx->fcurve_owner_id, ID_RECALC_ANIMATION); } /* --------------- */ diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 1922b876d1e..513fd29ef9b 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -157,7 +157,7 @@ bAction *verify_adt_action(Main *bmain, ID *id, short add) DEG_relations_tag_update(bmain); } - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH); /* return the action */ return adt->action; @@ -1317,10 +1317,10 @@ short insert_keyframe( if (ret) { if (act != NULL) { - DEG_id_tag_update(&act->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&act->id, ID_RECALC_ANIMATION_NO_FLUSH); } if (adt != NULL && adt->action != NULL && adt->action != act) { - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH); } } @@ -1371,11 +1371,11 @@ static void deg_tag_after_keyframe_delete(Main *bmain, ID *id, AnimData *adt) /* In the case last f-curve wes removed need to inform dependency graph * about relations update, since it needs to get rid of animation operation * for this datablock. */ - DEG_id_tag_update_ex(bmain, id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update_ex(bmain, id, ID_RECALC_ANIMATION_NO_FLUSH); DEG_relations_tag_update(bmain); } else { - DEG_id_tag_update_ex(bmain, &adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update_ex(bmain, &adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH); } } diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 444e4634644..d532e22e7f7 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -1049,7 +1049,7 @@ int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSe break; } default: - DEG_id_tag_update(ksp->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(ksp->id, ID_RECALC_ANIMATION_NO_FLUSH); break; } diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index cd29a3c5bc4..e1a83a7a5cc 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -527,7 +527,8 @@ enum { /* Tag given ID for an update in all the dependency graphs. */ typedef enum IDRecalcFlag { - /* Individual update tags, this is what ID gets tagged for update with. */ + /*************************************************************************** + * Individual update tags, this is what ID gets tagged for update with. */ /* ** Object transformation changed. ** */ ID_RECALC_TRANSFORM = (1 << 0), @@ -585,7 +586,16 @@ typedef enum IDRecalcFlag { */ ID_RECALC_COPY_ON_WRITE = (1 << 13), - /* Aggregate flags, use only for checks on runtime. + /*************************************************************************** + * Pseudonyms, to have more semantic meaning in the actual code without + * using too much low-level and implementation specific tags. */ + + /* Update animation datablock itself, without doing full re-evaluation of + * all dependent objects. */ + ID_RECALC_ANIMATION_NO_FLUSH = ID_RECALC_COPY_ON_WRITE, + + /*************************************************************************** + * Aggregate flags, use only for checks on runtime. * Do NOT use those for tagging. */ /* Identifies that SOMETHING has been changed in this ID. */ diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index 293ff1db505..1a66a122612 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -98,7 +98,7 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, PointerR MEM_freeN(agrp); RNA_POINTER_INVALIDATE(agrp_ptr); - DEG_id_tag_update(&act->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&act->id, ID_RECALC_ANIMATION_NO_FLUSH); WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } @@ -157,7 +157,7 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, PointerR RNA_POINTER_INVALIDATE(fcu_ptr); } - DEG_id_tag_update(&act->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&act->id, ID_RECALC_ANIMATION_NO_FLUSH); WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index b6cae3de386..ca4a6d2481f 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -495,7 +495,7 @@ static void rna_FCurve_update_eval(Main *UNUSED(bmain), Scene *UNUSED(scene), Po IdAdtTemplate *iat = (IdAdtTemplate *)ptr->id.data; if (iat && iat->adt && iat->adt->action) { /* action is separate datablock, needs separate tag */ - DEG_id_tag_update(&iat->adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&iat->adt->action->id, ID_RECALC_ANIMATION); } } @@ -618,7 +618,7 @@ static void rna_FModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin if (adt != NULL) { if (adt->action != NULL) { /* action is separate datablock, needs separate tag */ - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION); } } @@ -955,7 +955,7 @@ static void rna_Keyframe_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point if (adt != NULL) { if (adt->action != NULL) { /* action is separate datablock, needs separate tag */ - DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION); } } } |