diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_library.h | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 14 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/group.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 81 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 2 |
7 files changed, 66 insertions, 55 deletions
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index 62c5fc952ad..4bd762a0ca3 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -103,9 +103,9 @@ struct BlendThumbnail *BKE_main_thumbnail_from_imbuf(struct Main *bmain, struct struct ImBuf *BKE_main_thumbnail_to_imbuf(struct Main *bmain, struct BlendThumbnail *data); void BKE_main_thumbnail_create(struct Main *bmain); -void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const bool tag); -void BKE_main_id_tag_listbase(struct ListBase *lb, const bool tag); -void BKE_main_id_tag_all(struct Main *mainvar, const bool tag); +void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const int tag, const bool value); +void BKE_main_id_tag_listbase(struct ListBase *lb, const int tag, const bool value); +void BKE_main_id_tag_all(struct Main *mainvar, const int tag, const bool value); void BKE_main_id_flag_listbase(ListBase *lb, const int flag, const bool value); void BKE_main_id_flag_all(struct Main *bmain, const int flag, const bool value); diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 635fc1e7a66..b9cf21a7a3a 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -964,7 +964,7 @@ Main *BKE_undo_get_main(Scene **r_scene) void BKE_copybuffer_begin(Main *bmain) { /* set all id flags to zero; */ - BKE_main_id_flag_all(bmain, LIB_TAG_NEED_EXPAND | LIB_TAG_DOIT, false); + BKE_main_id_tag_all(bmain, LIB_TAG_NEED_EXPAND | LIB_TAG_DOIT, false); } void BKE_copybuffer_tag_ID(ID *id) @@ -1034,7 +1034,7 @@ int BKE_copybuffer_save(const char *filename, ReportList *reports) MEM_freeN(mainb); /* set id flag to zero; */ - BKE_main_id_flag_all(G.main, LIB_TAG_NEED_EXPAND | LIB_TAG_DOIT, false); + BKE_main_id_tag_all(G.main, LIB_TAG_NEED_EXPAND | LIB_TAG_DOIT, false); if (path_list_backup) { BKE_bpath_list_restore(G.main, path_list_flag, path_list_backup); @@ -1067,7 +1067,7 @@ int BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Rep * its also generally useful to know what is new * * take extra care BKE_main_id_flag_all(bmain, LIB_TAG_PRE_EXISTING, false) is called after! */ - BKE_main_id_flag_all(bmain, LIB_TAG_PRE_EXISTING, true); + BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, true); /* here appending/linking starts */ mainl = BLO_library_link_begin(bmain, &bh, libname); @@ -1086,7 +1086,7 @@ int BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Rep /* important we unset, otherwise these object wont * link into other scenes from this blend file */ - BKE_main_id_flag_all(bmain, LIB_TAG_PRE_EXISTING, false); + BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false); /* recreate dependency graph to include new objects */ DAG_relations_tag_update(bmain); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 8bd8b4ff94a..55c54cdac49 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -938,9 +938,9 @@ DagForest *build_dag(Main *bmain, Scene *sce, short mask) dag->need_update = false; /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later [#32017] */ - BKE_main_id_tag_idcode(bmain, ID_MA, false); - BKE_main_id_tag_idcode(bmain, ID_LA, false); - BKE_main_id_tag_idcode(bmain, ID_GR, false); + BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false); + BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false); + BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false); /* add base node for scene. scene is always the first node in DAG */ scenenode = dag_add_node(dag, sce); @@ -956,7 +956,7 @@ DagForest *build_dag(Main *bmain, Scene *sce, short mask) build_dag_group(dag, scenenode, bmain, sce, ob->dup_group, mask); } - BKE_main_id_tag_idcode(bmain, ID_GR, false); + BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false); /* Now all relations were built, but we need to solve 1 exceptional case; * When objects have multiple "parents" (for example parent + constraint working on same object) @@ -2297,7 +2297,7 @@ void DAG_scene_update_flags(Main *bmain, Scene *scene, unsigned int lay, const b GroupObject *go; Scene *sce_iter; - BKE_main_id_tag_idcode(bmain, ID_GR, false); + BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false); /* set ob flags where animated systems are */ for (SETLOOPER(scene, sce_iter, base)) { @@ -2476,7 +2476,7 @@ void DAG_on_visible_update(Main *bmain, const bool do_time) for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set) dag_scene_flush_layers(sce_iter, lay); - BKE_main_id_tag_idcode(bmain, ID_GR, false); + BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false); for (SETLOOPER(scene, sce_iter, base)) { ob = base->object; @@ -2507,7 +2507,7 @@ void DAG_on_visible_update(Main *bmain, const bool do_time) } } - BKE_main_id_tag_idcode(bmain, ID_GR, false); + BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false); /* now tag update flags, to ensure deformers get calculated on redraw */ DAG_scene_update_flags(bmain, scene, lay, do_time, true); diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c index 4506f932413..a44eb1df9fe 100644 --- a/source/blender/blenkernel/intern/group.c +++ b/source/blender/blenkernel/intern/group.c @@ -260,7 +260,7 @@ static bool group_object_cyclic_check_internal(Object *object, Group *group) bool BKE_group_object_cyclic_check(Main *bmain, Object *object, Group *group) { /* first flag all groups */ - BKE_main_id_tag_listbase(&bmain->group, true); + BKE_main_id_tag_listbase(&bmain->group, LIB_TAG_DOIT, true); return group_object_cyclic_check_internal(object, group); } diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index c4603207062..811fbf5e5f0 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -575,7 +575,51 @@ ListBase *which_libbase(Main *mainlib, short type) } /** - * Clear or set given flags for all ids in listbase (runtime flags only). + * Clear or set given tags for all ids in listbase (runtime tags). + */ +void BKE_main_id_tag_listbase(ListBase *lb, const int tag, const bool value) +{ + ID *id; + if (value) { + for (id = lb->first; id; id = id->next) { + id->tag |= tag; + } + } + else { + const int ntag = ~tag; + for (id = lb->first; id; id = id->next) { + id->tag &= ntag; + } + } +} + +/** + * Clear or set given tags for all ids of given type in bmain (runtime tags). + */ +void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const int tag, const bool value) +{ + ListBase *lb = which_libbase(mainvar, type); + + BKE_main_id_tag_listbase(lb, tag, value); +} + +/** + * Clear or set given tags for all ids in bmain (runtime tags). + */ +void BKE_main_id_tag_all(struct Main *mainvar, const int tag, const bool value) +{ + ListBase *lbarray[MAX_LIBARRAY]; + int a; + + a = set_listbasepointers(mainvar, lbarray); + while (a--) { + BKE_main_id_tag_listbase(lbarray[a], tag, value); + } +} + + +/** + * Clear or set given flags for all ids in listbase (persistent flags). */ void BKE_main_id_flag_listbase(ListBase *lb, const int flag, const bool value) { @@ -592,7 +636,7 @@ void BKE_main_id_flag_listbase(ListBase *lb, const int flag, const bool value) } /** - * Clear or set given flags for all ids in bmain (runtime flags only). + * Clear or set given flags for all ids in bmain (persistent flags). */ void BKE_main_id_flag_all(Main *bmain, const int flag, const bool value) { @@ -1756,39 +1800,6 @@ static void lib_indirect_test_id(ID *id, Library *lib) #undef LIBTAG } -void BKE_main_id_tag_listbase(ListBase *lb, const bool tag) -{ - ID *id; - if (tag) { - for (id = lb->first; id; id = id->next) { - id->tag |= LIB_TAG_DOIT; - } - } - else { - for (id = lb->first; id; id = id->next) { - id->tag &= ~LIB_TAG_DOIT; - } - } -} - -void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const bool tag) -{ - ListBase *lb = which_libbase(mainvar, type); - - BKE_main_id_tag_listbase(lb, tag); -} - -void BKE_main_id_tag_all(struct Main *mainvar, const bool tag) -{ - ListBase *lbarray[MAX_LIBARRAY]; - int a; - - a = set_listbasepointers(mainvar, lbarray); - while (a--) { - BKE_main_id_tag_listbase(lbarray[a], tag); - } -} - /* if lib!=NULL, only all from lib local * bmain is almost certainly G.main */ void BKE_library_make_local(Main *bmain, Library *lib, bool untagged_only, bool set_fake) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 2d4029bb105..48fd34e38f4 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1810,8 +1810,8 @@ void BKE_scene_update_tagged(EvaluationContext *eval_ctx, Main *bmain, Scene *sc /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later * when trying to find materials with drivers that need evaluating [#32017] */ - BKE_main_id_tag_idcode(bmain, ID_MA, false); - BKE_main_id_tag_idcode(bmain, ID_LA, false); + BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false); + BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false); /* update all objects: drivers, matrices, displists, etc. flags set * by depgraph or manual, no layer check here, gets correct flushed @@ -1969,8 +1969,8 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain, /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later * when trying to find materials with drivers that need evaluating [#32017] */ - BKE_main_id_tag_idcode(bmain, ID_MA, false); - BKE_main_id_tag_idcode(bmain, ID_LA, false); + BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false); + BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false); /* run rigidbody sim */ /* NOTE: current position is so that rigidbody sim affects other objects, might change in the future */ diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 32e7ad7799a..8da1ed24447 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -3799,7 +3799,7 @@ ImBuf *BKE_sequencer_give_ibuf(const SeqRenderData *context, float cfra, int cha } #ifdef USE_SCENE_RECURSIVE_HACK - BKE_main_id_tag_idcode(context->bmain, ID_SCE, false); + BKE_main_id_tag_idcode(context->bmain, ID_SCE, LIB_TAG_DOIT, false); #endif return seq_render_strip_stack(context, seqbasep, cfra, chanshown); |