diff options
Diffstat (limited to 'source/blender/depsgraph/DEG_depsgraph_query.h')
-rw-r--r-- | source/blender/depsgraph/DEG_depsgraph_query.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h index 41650769fcf..b7ecd0544e4 100644 --- a/source/blender/depsgraph/DEG_depsgraph_query.h +++ b/source/blender/depsgraph/DEG_depsgraph_query.h @@ -34,6 +34,7 @@ #define __DEG_DEPSGRAPH_QUERY_H__ #include "DEG_depsgraph.h" +#include "DEG_depsgraph_build.h" struct ID; @@ -207,6 +208,34 @@ void DEG_foreach_dependent_ID(const Depsgraph *depsgraph, void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data); +/* ********************* DEG graph filtering ****************** */ + +/* ComponentKey for nodes we want to be able to evaluate in the filtered graph */ +typedef struct DEG_FilterTarget { + struct DEG_FilterTarget *next, *prev; + + struct ID *id; + /* TODO: component identifiers - Component Type, Subdata/Component Name */ +} DEG_FilterTarget; + +typedef enum eDEG_FilterQuery_Granularity { + DEG_FILTER_NODES_ALL = 0, + DEG_FILTER_NODES_NO_OPS = 1, + DEG_FILTER_NODES_ID_ONLY = 2, +} eDEG_FilterQuery_Granularity; + + +typedef struct DEG_FilterQuery { + /* List of DEG_FilterTarget's */ + struct ListBase targets; + + /* Level of detail in the resulting graph */ + eDEG_FilterQuery_Granularity detail_level; +} DEG_FilterQuery; + +/* Obtain a new graph instance that only contains the subset of desired nodes */ +Depsgraph *DEG_graph_filter(const Depsgraph *depsgraph, struct Main *bmain, DEG_FilterQuery *query); + #ifdef __cplusplus } /* extern "C" */ |