diff options
Diffstat (limited to 'source/blender/depsgraph')
19 files changed, 127 insertions, 35 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h index d1de83ec8a9..945a4785b9c 100644 --- a/source/blender/depsgraph/DEG_depsgraph.h +++ b/source/blender/depsgraph/DEG_depsgraph.h @@ -168,7 +168,7 @@ void DEG_evaluate_on_framechange(struct EvaluationContext *eval_ctx, struct Main *bmain, Depsgraph *graph, float ctime, - const int layer); + const unsigned int layer); /* Data changed recalculation entry point. * < context_type: context to perform evaluation for @@ -176,7 +176,7 @@ void DEG_evaluate_on_framechange(struct EvaluationContext *eval_ctx, */ void DEG_evaluate_on_refresh_ex(struct EvaluationContext *eval_ctx, Depsgraph *graph, - const int layers); + const unsigned int layers); /* Data changed recalculation entry point. * < context_type: context to perform evaluation for diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h index ce30df29e26..98ccce7e34e 100644 --- a/source/blender/depsgraph/DEG_depsgraph_build.h +++ b/source/blender/depsgraph/DEG_depsgraph_build.h @@ -81,6 +81,7 @@ void DEG_scene_graph_free(struct Scene *scene); * as a symbolic reference to the current DepsNode. * All relations will be defined in reference to that node. */ +struct CacheFile; typedef enum { DEG_COMPONENT_PARAMETERS, /* Parameters Component - Default when nothing else fits (i.e. just SDNA property setting) */ @@ -93,6 +94,7 @@ typedef enum { DEG_COMPONENT_BONE, /* Bone Component - Child/Subcomponent of Pose */ DEG_COMPONENT_EVAL_PARTICLES, /* Particle Systems Component */ DEG_COMPONENT_SHADING, /* Material Shading Component */ + DEG_COMPONENT_CACHE, /* Cache Component */ } eDepsComponent; struct DepsNodeHandle @@ -122,6 +124,10 @@ struct DepsNodeHandle struct Image *ima, eDepsComponent component, const char *description); + void (*add_cache_relation)(struct DepsNodeHandle *handle, + struct CacheFile *cache_file, + eDepsComponent component, + const char *description); }; void DEG_add_scene_relation(struct DepsNodeHandle *node, @@ -149,6 +155,10 @@ void DEG_add_image_relation(struct DepsNodeHandle *handle, struct Image *ima, eDepsComponent component, const char *description); +void DEG_add_cache_relation(struct DepsNodeHandle *handle, + struct CacheFile *cache_file, + eDepsComponent component, + const char *description); /* TODO(sergey): Remove once all geometry update is granular. */ void DEG_add_special_eval_flag(struct Depsgraph *graph, struct ID *id, short flag); diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc index 7ca2ef05a36..42b00438d33 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder.cc @@ -140,6 +140,7 @@ DEG::eDepsNode_Type deg_build_get_component_type( case DEG_COMPONENT_BONE: return DEG::DEPSNODE_TYPE_BONE; case DEG_COMPONENT_EVAL_PARTICLES: return DEG::DEPSNODE_TYPE_EVAL_PARTICLES; case DEG_COMPONENT_SHADING: return DEG::DEPSNODE_TYPE_SHADING; + case DEG_COMPONENT_CACHE: return DEG::DEPSNODE_TYPE_CACHE; } return DEG::DEPSNODE_TYPE_UNDEFINED; } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 9c0f88a8042..71b2cc16871 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -46,6 +46,7 @@ extern "C" { #include "DNA_action_types.h" #include "DNA_anim_types.h" #include "DNA_armature_types.h" +#include "DNA_cachefile_types.h" #include "DNA_camera_types.h" #include "DNA_constraint_types.h" #include "DNA_curve_types.h" @@ -133,6 +134,15 @@ struct NodeBuilderHandle handle->builder->build_image(ima); } + static void add_cache_relation(DepsNodeHandle *_handle, + CacheFile *cache_file, + eDepsComponent component, + const char *description) + { + NodeBuilderHandle *handle = (NodeBuilderHandle *)_handle; + handle->builder->build_cachefile(cache_file); + } + NodeBuilderHandle(DepsgraphNodeBuilder *builder) : builder(builder) { @@ -140,6 +150,7 @@ struct NodeBuilderHandle base.add_texture_relation = add_texture_relation; base.add_nodetree_relation = add_nodetree_relation; base.add_image_relation = add_image_relation; + base.add_cache_relation = add_cache_relation; } DepsNodeHandle base; @@ -374,6 +385,14 @@ void DepsgraphNodeBuilder::build_scene(Main *bmain, Scene *scene) if (scene->gpd) { build_gpencil(scene->gpd); } + + /* cache files */ + for (CacheFile *cachefile = static_cast<CacheFile *>(bmain->cachefiles.first); + cachefile; + cachefile = static_cast<CacheFile *>(cachefile->id.next)) + { + build_cachefile(cachefile); + } } void DepsgraphNodeBuilder::build_group(Main *bmain, @@ -1345,4 +1364,18 @@ void DepsgraphNodeBuilder::build_gpencil(bGPdata *gpd) build_animdata(gpd_id); } +void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file) +{ + ID *cache_file_id = &cache_file->id; + + add_component_node(cache_file_id, DEPSNODE_TYPE_CACHE); + + add_operation_node(cache_file_id, DEPSNODE_TYPE_CACHE, + DEPSOP_TYPE_EXEC, NULL, + DEG_OPCODE_PLACEHOLDER, "Cache File Update"); + + add_id_node(cache_file_id); + build_animdata(cache_file_id); +} + } // namespace DEG diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index 35ef26713fd..e61c7572327 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -33,6 +33,7 @@ #include "intern/depsgraph_types.h" struct Base; +struct CacheFile; struct bGPdata; struct ListBase; struct GHash; @@ -148,6 +149,7 @@ struct DepsgraphNodeBuilder { void build_world(World *world); void build_compositor(Scene *scene); void build_gpencil(bGPdata *gpd); + void build_cachefile(CacheFile *cache_file); protected: Main *m_bmain; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 17d36c9645d..2e8fee7aea6 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -47,6 +47,7 @@ extern "C" { #include "DNA_anim_types.h" #include "DNA_armature_types.h" #include "DNA_camera_types.h" +#include "DNA_cachefile_types.h" #include "DNA_constraint_types.h" #include "DNA_curve_types.h" #include "DNA_effect_types.h" @@ -174,6 +175,16 @@ struct RelationBuilderHandle handle->builder->add_node_relation(comp_key, handle->node, DEPSREL_TYPE_STANDARD, description); } + static void add_cache_relation(DepsNodeHandle *_handle, + CacheFile *cache_file, + eDepsComponent component, + const char *description) + { + RelationBuilderHandle *handle = cast(_handle); + ComponentKey comp_key(&cache_file->id, deg_build_get_component_type(component)); + handle->builder->add_node_relation(comp_key, handle->node, DEG::DEPSREL_TYPE_CACHE, description); + } + RelationBuilderHandle(DepsgraphRelationBuilder *builder, OperationDepsNode *node, const string &default_name = "") : builder(builder), node(node), @@ -187,6 +198,7 @@ struct RelationBuilderHandle base.add_texture_relation = add_texture_relation; base.add_nodetree_relation = add_nodetree_relation; base.add_image_relation = add_image_relation; + base.add_cache_relation = add_cache_relation; } DepsNodeHandle base; @@ -683,6 +695,18 @@ void DepsgraphRelationBuilder::build_constraints(Scene *scene, ID *id, eDepsNode TimeSourceKey time_src_key; add_relation(time_src_key, constraint_op_key, DEPSREL_TYPE_TIME, "[TimeSrc -> Animation]"); } + else if (cti->type == CONSTRAINT_TYPE_TRANSFORM_CACHE) { + /* TODO(kevin): This is more a TimeSource -> CacheFile -> Constraint dependency chain. */ + TimeSourceKey time_src_key; + add_relation(time_src_key, constraint_op_key, DEPSREL_TYPE_TIME, "[TimeSrc -> Animation]"); + + bTransformCacheConstraint *data = (bTransformCacheConstraint *)con->data; + + if (data->cache_file) { + ComponentKey cache_key(&data->cache_file->id, DEPSNODE_TYPE_CACHE); + add_relation(cache_key, constraint_op_key, DEPSREL_TYPE_CACHE, cti->name); + } + } else if (cti->get_constraint_targets) { ListBase targets = {NULL, NULL}; cti->get_constraint_targets(con, &targets); diff --git a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc index 5ce84ee29db..70cd5f11a47 100644 --- a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc +++ b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc @@ -90,6 +90,7 @@ static const int deg_debug_node_type_color_map[][2] = { {DEPSNODE_TYPE_GEOMETRY, 8}, {DEPSNODE_TYPE_SEQUENCER, 9}, {DEPSNODE_TYPE_SHADING, 10}, + {DEPSNODE_TYPE_CACHE, 11}, {-1, 0} }; #endif @@ -288,7 +289,7 @@ static void deg_debug_graphviz_node_single(const DebugContext &ctx, if (node->type == DEPSNODE_TYPE_ID_REF) { IDDepsNode *id_node = (IDDepsNode *)node; char buf[256]; - BLI_snprintf(buf, sizeof(buf), " (Layers: %d)", id_node->layers); + BLI_snprintf(buf, sizeof(buf), " (Layers: %u)", id_node->layers); name += buf; } if (ctx.show_eval_priority && node->tclass == DEPSNODE_CLASS_OPERATION) { @@ -324,7 +325,7 @@ static void deg_debug_graphviz_node_cluster_begin(const DebugContext &ctx, if (node->type == DEPSNODE_TYPE_ID_REF) { IDDepsNode *id_node = (IDDepsNode *)node; char buf[256]; - BLI_snprintf(buf, sizeof(buf), " (Layers: %d)", id_node->layers); + BLI_snprintf(buf, sizeof(buf), " (Layers: %u)", id_node->layers); name += buf; } deg_debug_fprintf(ctx, "// %s\n", name.c_str()); @@ -401,6 +402,7 @@ static void deg_debug_graphviz_node(const DebugContext &ctx, case DEPSNODE_TYPE_EVAL_POSE: case DEPSNODE_TYPE_BONE: case DEPSNODE_TYPE_SHADING: + case DEPSNODE_TYPE_CACHE: case DEPSNODE_TYPE_EVAL_PARTICLES: { ComponentDepsNode *comp_node = (ComponentDepsNode *)node; diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h index 213bb304d73..08b264f8497 100644 --- a/source/blender/depsgraph/intern/depsgraph.h +++ b/source/blender/depsgraph/intern/depsgraph.h @@ -191,7 +191,7 @@ struct Depsgraph { /* Layers Visibility .................. */ /* Visible layers bitfield, used for skipping invisible objects updates. */ - int layers; + unsigned int layers; // XXX: additional stuff like eval contexts, mempools for allocating nodes from, etc. }; diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index 67707834076..6c4b7229a41 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" extern "C" { +#include "DNA_cachefile_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -120,6 +121,15 @@ void DEG_add_image_relation(struct DepsNodeHandle *handle, handle->add_image_relation(handle, ima, component, description); } +void DEG_add_cache_relation(struct DepsNodeHandle *handle, + struct CacheFile *cache_file, + eDepsComponent component, + const char *description) +{ + if (handle->add_cache_relation) + handle->add_cache_relation(handle, cache_file, component, description); +} + void DEG_add_special_eval_flag(Depsgraph *graph, ID *id, short flag) { DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph); diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc index ab82421195f..2e4904e4281 100644 --- a/source/blender/depsgraph/intern/depsgraph_eval.cc +++ b/source/blender/depsgraph/intern/depsgraph_eval.cc @@ -133,7 +133,7 @@ void DEG_evaluate_on_framechange(EvaluationContext *eval_ctx, Main *bmain, Depsgraph *graph, float ctime, - const int layers) + const unsigned int layers) { DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph); /* Update time on primary timesource. */ diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc index cac4eaae215..7f2f6a65f5e 100644 --- a/source/blender/depsgraph/intern/depsgraph_query.cc +++ b/source/blender/depsgraph/intern/depsgraph_query.cc @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" extern "C" { +#include "BKE_idcode.h" #include "BKE_main.h" #include "DEG_depsgraph_query.h" @@ -42,7 +43,7 @@ extern "C" { bool DEG_id_type_tagged(Main *bmain, short idtype) { - return bmain->id_tag_update[((unsigned char *)&idtype)[0]] != 0; + return bmain->id_tag_update[BKE_idcode_to_index(idtype)] != 0; } short DEG_get_eval_flags_for_id(Depsgraph *graph, ID *id) diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc index ea5afaab3f7..b7b62bd59f9 100644 --- a/source/blender/depsgraph/intern/depsgraph_tag.cc +++ b/source/blender/depsgraph/intern/depsgraph_tag.cc @@ -44,6 +44,7 @@ extern "C" { #include "BLI_task.h" +#include "BKE_idcode.h" #include "BKE_library.h" #include "BKE_main.h" #include "BKE_node.h" @@ -259,10 +260,8 @@ void DEG_id_type_tag(Main *bmain, short idtype) DEG_id_type_tag(bmain, ID_WO); DEG_id_type_tag(bmain, ID_SCE); } - /* We tag based on first ID type character to avoid - * looping over all ID's in case there are no tags. - */ - bmain->id_tag_update[((unsigned char *)&idtype)[0]] = 1; + + bmain->id_tag_update[BKE_idcode_to_index(idtype)] = 1; } /* Recursively push updates out to all nodes dependent on this, @@ -373,10 +372,7 @@ void DEG_ids_check_recalc(Main *bmain, Scene *scene, bool time) ListBase *lb = lbarray[a]; ID *id = (ID *)lb->first; - /* We tag based on first ID type character to avoid - * looping over all ID's in case there are no tags. - */ - if (id && bmain->id_tag_update[(unsigned char)id->name[0]]) { + if (id && bmain->id_tag_update[BKE_idcode_to_index(GS(id->name))]) { updated = true; break; } @@ -401,10 +397,7 @@ void DEG_ids_clear_recalc(Main *bmain) ListBase *lb = lbarray[a]; ID *id = (ID *)lb->first; - /* We tag based on first ID type character to avoid - * looping over all ID's in case there are no tags. - */ - if (id && bmain->id_tag_update[(unsigned char)id->name[0]]) { + if (id && bmain->id_tag_update[BKE_idcode_to_index(GS(id->name))]) { for (; id; id = (ID *)id->next) { id->tag &= ~(LIB_TAG_ID_RECALC | LIB_TAG_ID_RECALC_DATA); diff --git a/source/blender/depsgraph/intern/depsgraph_types.h b/source/blender/depsgraph/intern/depsgraph_types.h index a0157190b9e..1e20bbdd142 100644 --- a/source/blender/depsgraph/intern/depsgraph_types.h +++ b/source/blender/depsgraph/intern/depsgraph_types.h @@ -133,6 +133,8 @@ typedef enum eDepsNode_Type { DEPSNODE_TYPE_EVAL_PARTICLES = 23, /* Material Shading Component */ DEPSNODE_TYPE_SHADING = 24, + /* Cache Component */ + DEPSNODE_TYPE_CACHE = 25, } eDepsNode_Type; /* Identifiers for common operations (as an enum). */ @@ -347,6 +349,9 @@ typedef enum eDepsRelation_Type { /* relationship is used to trigger editor/screen updates */ DEPSREL_TYPE_UPDATE_UI, + + /* cache dependency */ + DEPSREL_TYPE_CACHE, } eDepsRelation_Type; } // namespace DEG diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc index 3024d625846..c3fd202d832 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval.cc @@ -72,13 +72,13 @@ namespace DEG { static void schedule_children(TaskPool *pool, Depsgraph *graph, OperationDepsNode *node, - const int layers, + const unsigned int layers, const int thread_id); struct DepsgraphEvalState { EvaluationContext *eval_ctx; Depsgraph *graph; - int layers; + unsigned int layers; }; static void deg_task_run_func(TaskPool *pool, @@ -140,7 +140,7 @@ static void deg_task_run_func(TaskPool *pool, OperationDepsNode *child = (OperationDepsNode *)rel->to; BLI_assert(child->type == DEPSNODE_TYPE_OPERATION); if (!child->scheduled) { - int id_layers = child->owner->owner->layers; + unsigned int id_layers = child->owner->owner->layers; if (!((child->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0 && (id_layers & state->layers) != 0)) { @@ -197,14 +197,14 @@ static void deg_task_run_func(TaskPool *pool, typedef struct CalculatePengindData { Depsgraph *graph; - int layers; + unsigned int layers; } CalculatePengindData; static void calculate_pending_func(void *data_v, int i) { CalculatePengindData *data = (CalculatePengindData *)data_v; Depsgraph *graph = data->graph; - int layers = data->layers; + unsigned int layers = data->layers; OperationDepsNode *node = graph->operations[i]; IDDepsNode *id_node = node->owner->owner; @@ -231,7 +231,7 @@ static void calculate_pending_func(void *data_v, int i) } } -static void calculate_pending_parents(Depsgraph *graph, int layers) +static void calculate_pending_parents(Depsgraph *graph, unsigned int layers) { const int num_operations = graph->operations.size(); const bool do_threads = num_operations > 256; @@ -276,11 +276,11 @@ static void calculate_eval_priority(OperationDepsNode *node) * dec_parents: Decrement pending parents count, true when child nodes are * scheduled after a task has been completed. */ -static void schedule_node(TaskPool *pool, Depsgraph *graph, int layers, +static void schedule_node(TaskPool *pool, Depsgraph *graph, unsigned int layers, OperationDepsNode *node, bool dec_parents, const int thread_id) { - int id_layers = node->owner->owner->layers; + unsigned int id_layers = node->owner->owner->layers; if ((node->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0 && (id_layers & layers) != 0) @@ -314,7 +314,7 @@ static void schedule_node(TaskPool *pool, Depsgraph *graph, int layers, static void schedule_graph(TaskPool *pool, Depsgraph *graph, - const int layers) + const unsigned int layers) { foreach (OperationDepsNode *node, graph->operations) { schedule_node(pool, graph, layers, node, false, 0); @@ -324,7 +324,7 @@ static void schedule_graph(TaskPool *pool, static void schedule_children(TaskPool *pool, Depsgraph *graph, OperationDepsNode *node, - const int layers, + const unsigned int layers, const int thread_id) { foreach (DepsRelation *rel, node->outlinks) { @@ -352,7 +352,7 @@ static void schedule_children(TaskPool *pool, */ void deg_evaluate_on_refresh(EvaluationContext *eval_ctx, Depsgraph *graph, - const int layers) + const unsigned int layers) { /* Generate base evaluation context, upon which all the others are derived. */ // TODO: this needs both main and scene access... diff --git a/source/blender/depsgraph/intern/eval/deg_eval.h b/source/blender/depsgraph/intern/eval/deg_eval.h index 92f87b03803..49c0379939e 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval.h +++ b/source/blender/depsgraph/intern/eval/deg_eval.h @@ -47,6 +47,6 @@ struct Depsgraph; */ void deg_evaluate_on_refresh(EvaluationContext *eval_ctx, Depsgraph *graph, - const int layers); + const unsigned int layers); } // namespace DEG diff --git a/source/blender/depsgraph/intern/nodes/deg_node.cc b/source/blender/depsgraph/intern/nodes/deg_node.cc index db807d22b89..eb408f293de 100644 --- a/source/blender/depsgraph/intern/nodes/deg_node.cc +++ b/source/blender/depsgraph/intern/nodes/deg_node.cc @@ -182,7 +182,7 @@ void IDDepsNode::init(const ID *id, const string &UNUSED(subdata)) this->eval_flags = 0; /* For object we initialize layers to layer from base. */ - if (GS(id) == ID_OB) { + if (GS(id->name) == ID_OB) { this->layers = 0; } diff --git a/source/blender/depsgraph/intern/nodes/deg_node.h b/source/blender/depsgraph/intern/nodes/deg_node.h index 416996052c9..b2262c4bd12 100644 --- a/source/blender/depsgraph/intern/nodes/deg_node.h +++ b/source/blender/depsgraph/intern/nodes/deg_node.h @@ -176,7 +176,7 @@ struct IDDepsNode : public DepsNode { GHash *components; /* Layers of this node with accumulated layers of it's output relations. */ - int layers; + unsigned int layers; /* Additional flags needed for scene evaluation. * TODO(sergey): Only needed for until really granular updates diff --git a/source/blender/depsgraph/intern/nodes/deg_node_component.cc b/source/blender/depsgraph/intern/nodes/deg_node_component.cc index 6ac45c99798..01f33b6368b 100644 --- a/source/blender/depsgraph/intern/nodes/deg_node_component.cc +++ b/source/blender/depsgraph/intern/nodes/deg_node_component.cc @@ -120,7 +120,7 @@ string ComponentDepsNode::identifier() const sprintf(typebuf, "(%d)", type); char layers[16]; - sprintf(layers, "%d", this->layers); + sprintf(layers, "%u", this->layers); return string(typebuf) + name + " : " + idname + " (Layers: " + layers + ")"; } @@ -366,6 +366,11 @@ static DepsNodeFactoryImpl<ParticlesComponentDepsNode> DNTI_EVAL_PARTICLES; DEG_DEPSNODE_DEFINE(ShadingComponentDepsNode, DEPSNODE_TYPE_SHADING, "Shading Component"); static DepsNodeFactoryImpl<ShadingComponentDepsNode> DNTI_SHADING; +/* Cache Component Defines ============================ */ + +DEG_DEPSNODE_DEFINE(CacheComponentDepsNode, DEPSNODE_TYPE_CACHE, "Cache Component"); +static DepsNodeFactoryImpl<CacheComponentDepsNode> DNTI_CACHE; + /* Node Types Register =================================== */ @@ -383,6 +388,8 @@ void deg_register_component_depsnodes() deg_register_node_typeinfo(&DNTI_EVAL_PARTICLES); deg_register_node_typeinfo(&DNTI_SHADING); + + deg_register_node_typeinfo(&DNTI_CACHE); } } // namespace DEG diff --git a/source/blender/depsgraph/intern/nodes/deg_node_component.h b/source/blender/depsgraph/intern/nodes/deg_node_component.h index 6f62d91cd79..7dec8eaaa90 100644 --- a/source/blender/depsgraph/intern/nodes/deg_node_component.h +++ b/source/blender/depsgraph/intern/nodes/deg_node_component.h @@ -159,7 +159,7 @@ struct ComponentDepsNode : public DepsNode { // XXX: a poll() callback to check if component's first node can be started? /* Temporary bitmask, used during graph construction. */ - int layers; + unsigned int layers; }; /* ---------------------------------------- */ @@ -209,6 +209,10 @@ struct ShadingComponentDepsNode : public ComponentDepsNode { DEG_DEPSNODE_DECLARE; }; +struct CacheComponentDepsNode : public ComponentDepsNode { + DEG_DEPSNODE_DECLARE; +}; + void deg_register_component_depsnodes(); |