diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-28 16:42:08 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-05-28 18:06:41 +0300 |
commit | 0cf0cc9873c114f3ccc19901931616a0e91f27cb (patch) | |
tree | b438a8434b251939be37abcc207d0856055c58de /source/blender | |
parent | d6643b57bcd9ca536bb9e6eb4cebd83a58578123 (diff) |
Depsgraph: Add query for whether graph is up to date
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/depsgraph/DEG_depsgraph_query.h | 5 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_query.cc | 20 |
2 files changed, 23 insertions, 2 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h index 9b7e5b95fdc..b9cbd75ce1e 100644 --- a/source/blender/depsgraph/DEG_depsgraph_query.h +++ b/source/blender/depsgraph/DEG_depsgraph_query.h @@ -116,6 +116,11 @@ bool DEG_is_original_object(struct Object *object); bool DEG_is_evaluated_id(struct ID *id); bool DEG_is_evaluated_object(struct Object *object); +/* Check whether depsgraph os fully evaluated. This includes the following checks: + * - Relations are up-to-date. + * - Nothing is tagged for update. */ +bool DEG_is_fully_evaluated(const struct Depsgraph *depsgraph); + /* ************************ DEG object iterators ********************* */ enum { diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc index 02f2519b3fb..326d852b1e1 100644 --- a/source/blender/depsgraph/intern/depsgraph_query.cc +++ b/source/blender/depsgraph/intern/depsgraph_query.cc @@ -29,12 +29,14 @@ extern "C" { #include <string.h> // XXX: memcpy #include "BLI_utildefines.h" +#include "BLI_listbase.h" +#include "BLI_ghash.h" + +#include "BKE_action.h" // XXX: BKE_pose_channel_find_name #include "BKE_customdata.h" #include "BKE_idcode.h" #include "BKE_main.h" -#include "BLI_listbase.h" -#include "BKE_action.h" // XXX: BKE_pose_channel_from_name } /* extern "C" */ #include "DNA_object_types.h" @@ -303,3 +305,17 @@ bool DEG_is_evaluated_object(Object *object) { return !DEG_is_original_object(object); } + +bool DEG_is_fully_evaluated(const struct Depsgraph *depsgraph) +{ + const DEG::Depsgraph *deg_graph = (const DEG::Depsgraph *)depsgraph; + /* Check whether relations are up to date. */ + if (deg_graph->need_update) { + return false; + } + /* Check whether IDs are up to date. */ + if (BLI_gset_len(deg_graph->entry_tags) > 0) { + return false; + } + return true; +} |