From 547d31c8da1fcb938e91887909c5e2f3b3d180d5 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Wed, 24 Oct 2018 12:31:24 +0300 Subject: Depsgraph: minor renaming and refactor of API for adding evaluation flags. --- source/blender/depsgraph/DEG_depsgraph_build.h | 12 ++++----- .../depsgraph/intern/builder/deg_builder_nodes.cc | 10 ------- .../intern/builder/deg_builder_relations.cc | 20 ++++++++++++++ .../intern/builder/deg_builder_relations.h | 1 + source/blender/depsgraph/intern/depsgraph_build.cc | 31 ++++++++-------------- source/blender/modifiers/intern/MOD_array.c | 3 +-- source/blender/modifiers/intern/MOD_curve.c | 3 +-- source/blender/modifiers/intern/MOD_datatransfer.c | 2 +- source/blender/modifiers/intern/MOD_shrinkwrap.c | 4 +-- 9 files changed, 43 insertions(+), 43 deletions(-) (limited to 'source') diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h index 4975f18f4ce..53138fc7c40 100644 --- a/source/blender/depsgraph/DEG_depsgraph_build.h +++ b/source/blender/depsgraph/DEG_depsgraph_build.h @@ -141,11 +141,11 @@ void DEG_add_object_relation(struct DepsNodeHandle *node, struct Object *object, eDepsObjectComponentType component, const char *description); -void DEG_add_object_customdata_relation(struct DepsNodeHandle *node, - struct Object *object, - eDepsObjectComponentType component, - uint64_t customdata_mask, - const char *description); +void DEG_add_object_relation_with_customdata(struct DepsNodeHandle *node, + struct Object *object, + eDepsObjectComponentType component, + uint64_t customdata_mask, + const char *description); void DEG_add_bone_relation(struct DepsNodeHandle *handle, struct Object *object, const char *bone_name, @@ -156,9 +156,9 @@ void DEG_add_object_cache_relation(struct DepsNodeHandle *handle, eDepsObjectComponentType component, const char *description); +void DEG_add_special_eval_flag(struct DepsNodeHandle *handle, struct ID *id, short flag); struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *handle); -void DEG_add_special_eval_flag(struct Depsgraph *graph, struct ID *id, short flag); /* ************************************************ */ diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index ff3009a6ce5..30301cdf29a 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -667,7 +667,6 @@ void DepsgraphNodeBuilder::build_object_data( if (object->data == NULL) { return; } - IDDepsNode *id_node = graph_->find_id_node(&object->id); /* type-specific data. */ switch (object->type) { case OB_MESH: @@ -678,15 +677,6 @@ void DepsgraphNodeBuilder::build_object_data( case OB_LATTICE: case OB_GPENCIL: build_object_data_geometry(object, is_object_visible); - /* TODO(sergey): Only for until we support granular - * update of curves. - */ - if (object->type == OB_FONT) { - Curve *curve = (Curve *)object->data; - if (curve->textoncurve) { - id_node->eval_flags |= DAG_EVAL_NEED_CURVE_PATH; - } - } break; case OB_ARMATURE: if (ID_IS_LINKED(object) && object->proxy_from != NULL) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index c40df4cb74e..e0c98b40186 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -286,6 +286,17 @@ void DepsgraphRelationBuilder::add_customdata_mask(const ComponentKey &key, uint } } +void DepsgraphRelationBuilder::add_special_eval_flag(ID *id, short flag) +{ + DEG::IDDepsNode *id_node = graph_->find_id_node(id); + if (id_node == NULL) { + BLI_assert(!"ID should always be valid"); + } + else { + id_node->eval_flags |= flag; + } +} + DepsRelation *DepsgraphRelationBuilder::add_time_relation( TimeSourceDepsNode *timesrc, DepsNode *node_to, @@ -670,6 +681,15 @@ void DepsgraphRelationBuilder::build_object_data(Object *object) case OB_GPENCIL: { build_object_data_geometry(object); + /* TODO(sergey): Only for until we support granular + * update of curves. + */ + if (object->type == OB_FONT) { + Curve *curve = (Curve *)object->data; + if (curve->textoncurve) { + add_special_eval_flag(&curve->textoncurve->id, DAG_EVAL_NEED_CURVE_PATH); + } + } break; } case OB_ARMATURE: diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index d3c7b0ebfaf..32330f5680d 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -201,6 +201,7 @@ struct DepsgraphRelationBuilder bool check_unique = false); void add_customdata_mask(const ComponentKey &key, uint64_t mask); + void add_special_eval_flag(ID *object, short flag); void build_id(ID *id); void build_layer_collections(ListBase *lb); diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index 957ca1a4275..e38cebbf525 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -131,11 +131,11 @@ void DEG_add_object_relation(DepsNodeHandle *handle, description); } -void DEG_add_object_customdata_relation(DepsNodeHandle *handle, - Object *object, - eDepsObjectComponentType component, - uint64_t customdata_mask, - const char *description) +void DEG_add_object_relation_with_customdata(DepsNodeHandle *handle, + Object *object, + eDepsObjectComponentType component, + uint64_t customdata_mask, + const char *description) { DEG::eDepsNode_Type type = deg_build_object_component_type(component); DEG::ComponentKey comp_key(&object->id, type); @@ -178,26 +178,17 @@ void DEG_add_bone_relation(DepsNodeHandle *handle, description); } -struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *handle) +void DEG_add_special_eval_flag(struct DepsNodeHandle *handle, ID *id, short flag) { DEG::DepsNodeHandle *deg_handle = get_handle(handle); - DEG::DepsgraphRelationBuilder *relation_builder = deg_handle->builder; - return reinterpret_cast(relation_builder->getGraph()); + deg_handle->builder->add_special_eval_flag(id, flag); } -void DEG_add_special_eval_flag(Depsgraph *graph, ID *id, short flag) +struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *handle) { - DEG::Depsgraph *deg_graph = reinterpret_cast(graph); - if (graph == NULL) { - BLI_assert(!"Graph should always be valid"); - return; - } - DEG::IDDepsNode *id_node = deg_graph->find_id_node(id); - if (id_node == NULL) { - BLI_assert(!"ID should always be valid"); - return; - } - id_node->eval_flags |= flag; + DEG::DepsNodeHandle *deg_handle = get_handle(handle); + DEG::DepsgraphRelationBuilder *relation_builder = deg_handle->builder; + return reinterpret_cast(relation_builder->getGraph()); } /* ******************** */ diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 2b8c1dd8c28..9cd642e1a3b 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -101,9 +101,8 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_object_relation(ctx->node, amd->end_cap, DEG_OB_COMP_GEOMETRY, "Array Modifier End Cap"); } if (amd->curve_ob) { - struct Depsgraph *depsgraph = DEG_get_graph_from_handle(ctx->node); DEG_add_object_relation(ctx->node, amd->curve_ob, DEG_OB_COMP_GEOMETRY, "Array Modifier Curve"); - DEG_add_special_eval_flag(depsgraph, &amd->curve_ob->id, DAG_EVAL_NEED_CURVE_PATH); + DEG_add_special_eval_flag(ctx->node, &amd->curve_ob->id, DAG_EVAL_NEED_CURVE_PATH); } if (amd->offset_ob != NULL) { DEG_add_object_relation(ctx->node, amd->offset_ob, DEG_OB_COMP_TRANSFORM, "Array Modifier Offset"); diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index b74b63e2478..02ddd3a180e 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -97,9 +97,8 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte /* TODO(sergey): Currently path is evaluated as a part of modifier stack, * might be changed in the future. */ - struct Depsgraph *depsgraph = DEG_get_graph_from_handle(ctx->node); DEG_add_object_relation(ctx->node, cmd->object, DEG_OB_COMP_GEOMETRY, "Curve Modifier"); - DEG_add_special_eval_flag(depsgraph, &cmd->object->id, DAG_EVAL_NEED_CURVE_PATH); + DEG_add_special_eval_flag(ctx->node, &cmd->object->id, DAG_EVAL_NEED_CURVE_PATH); } DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Curve Modifier"); diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c index 6c99b5d95b3..b8146d3fe41 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.c +++ b/source/blender/modifiers/intern/MOD_datatransfer.c @@ -131,7 +131,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if (dtmd->ob_source != NULL) { CustomDataMask mask = BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types); - DEG_add_object_customdata_relation(ctx->node, dtmd->ob_source, DEG_OB_COMP_GEOMETRY, mask, "DataTransfer Modifier"); + DEG_add_object_relation_with_customdata(ctx->node, dtmd->ob_source, DEG_OB_COMP_GEOMETRY, mask, "DataTransfer Modifier"); } } diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c index 4ba33461bbd..b5861399467 100644 --- a/source/blender/modifiers/intern/MOD_shrinkwrap.c +++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c @@ -149,11 +149,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if (smd->target != NULL) { DEG_add_object_relation(ctx->node, smd->target, DEG_OB_COMP_TRANSFORM, "Shrinkwrap Modifier"); - DEG_add_object_customdata_relation(ctx->node, smd->target, DEG_OB_COMP_GEOMETRY, mask, "Shrinkwrap Modifier"); + DEG_add_object_relation_with_customdata(ctx->node, smd->target, DEG_OB_COMP_GEOMETRY, mask, "Shrinkwrap Modifier"); } if (smd->auxTarget != NULL) { DEG_add_object_relation(ctx->node, smd->auxTarget, DEG_OB_COMP_TRANSFORM, "Shrinkwrap Modifier"); - DEG_add_object_customdata_relation(ctx->node, smd->auxTarget, DEG_OB_COMP_GEOMETRY, mask, "Shrinkwrap Modifier"); + DEG_add_object_relation_with_customdata(ctx->node, smd->auxTarget, DEG_OB_COMP_GEOMETRY, mask, "Shrinkwrap Modifier"); } DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Shrinkwrap Modifier"); } -- cgit v1.2.3