From f179ac9fc163b1f94efe7079357a31beb9fcd544 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 10 Dec 2018 17:37:30 +0100 Subject: Fix T58932: Impossible to influence the particle system --- .../depsgraph/intern/builder/deg_builder_relations.cc | 6 ++++++ .../blender/depsgraph/intern/eval/deg_eval_flush.cc | 19 +++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'source/blender/depsgraph') diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 1d5ff8cd3e5..81b9b32c696 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1847,6 +1847,12 @@ void DepsgraphRelationBuilder::build_particle_settings(ParticleSettings *part) "Particle Texture", DEPSREL_FLAG_FLUSH_USER_EDIT_ONLY); } + if (check_id_has_anim_component(&part->id)) { + ComponentKey animation_key(&part->id, DEG_NODE_TYPE_ANIMATION); + add_relation(animation_key, + particle_settings_eval_key, + "Particle Settings Animation"); + } } void DepsgraphRelationBuilder::build_particle_system_visualization_object( diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc index fef3282cfcc..5373c142ba6 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc @@ -164,17 +164,16 @@ BLI_INLINE void flush_handle_component_node(IDDepsNode *id_node, return; } comp_node->custom_flags = COMPONENT_STATE_DONE; - /* Tag all required operations in component for update. */ - foreach (OperationDepsNode *op, comp_node->operations) { - /* We don't want to flush tags in "upstream" direction for - * certain types of operations. - * - * TODO(sergey): Need a more generic solution for this. - */ - if (op->opcode == DEG_OPCODE_PARTICLE_SETTINGS_EVAL) { - continue; + /* Tag all required operations in component for update, unless this is a + * special component where we don't want all operations to be tagged. + * + * TODO(sergey): Make this a more generic solution. */ + if (comp_node->type != DEG_NODE_TYPE_PARTICLE_SETTINGS && + comp_node->type != DEG_NODE_TYPE_PARTICLE_SYSTEM) + { + foreach (OperationDepsNode *op, comp_node->operations) { + op->flag |= DEPSOP_FLAG_NEEDS_UPDATE; } - op->flag |= DEPSOP_FLAG_NEEDS_UPDATE; } /* when some target changes bone, we might need to re-run the * whole IK solver, otherwise result might be unpredictable. -- cgit v1.2.3