diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-05 19:35:13 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-05 19:35:48 +0300 |
commit | 6e00415a85a995f3d976530ea3ba748971292212 (patch) | |
tree | 70a3ceaf36beb3a8734eebc8d549805480478194 /source/blender | |
parent | d355a2b7d86aeee82e53e7ce25b5bc21f83ac77e (diff) |
Fix T58679: Missing modifiers update on changes to texture
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/depsgraph/DEG_depsgraph_build.h | 6 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_build.cc | 14 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_displace.c | 3 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_warp.c | 3 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_wave.c | 3 |
5 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h index 14468b33822..a81dd4c8852 100644 --- a/source/blender/depsgraph/DEG_depsgraph_build.h +++ b/source/blender/depsgraph/DEG_depsgraph_build.h @@ -43,6 +43,7 @@ struct Depsgraph; struct CacheFile; struct EffectorWeights; struct Collection; +struct ID; struct Main; struct ModifierData; struct Object; @@ -148,6 +149,11 @@ void DEG_add_object_cache_relation(struct DepsNodeHandle *handle, struct CacheFile *cache_file, eDepsObjectComponentType component, const char *description); +/* Adds relation from DEG_OPCODE_GENERIC_DATABLOCK_UPDATE of a given ID. + * Is used for such entities as textures and images. */ +void DEG_add_generic_id_relation(struct DepsNodeHandle *node_handle, + struct ID *id, + const char *description); /* Adds relations from the given component of a given object to the given node * handle AND the component to the point cache component of the node's ID. diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index 408c6abb0c9..5ff504bc8c6 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -185,6 +185,20 @@ void DEG_add_object_pointcache_relation(struct DepsNodeHandle *node_handle, } } +void DEG_add_generic_id_relation(struct DepsNodeHandle *node_handle, + struct ID *id, + const char *description) +{ + DEG::OperationKey operation_key( + id, + DEG::DEG_NODE_TYPE_GENERIC_DATABLOCK, + DEG::DEG_OPCODE_GENERIC_DATABLOCK_UPDATE); + DEG::DepsNodeHandle *deg_node_handle = get_node_handle(node_handle); + deg_node_handle->builder->add_node_handle_relation(operation_key, + deg_node_handle, + description); +} + void DEG_add_special_eval_flag(struct DepsNodeHandle *node_handle, ID *id, uint32_t flag) diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index a477191357e..1da1897bfce 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -157,6 +157,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte { DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Displace Modifier"); } + if (dmd->texture != NULL) { + DEG_add_generic_id_relation(ctx->node, &dmd->texture->id, "Displace Modifier"); + } } typedef struct DisplaceUserdata { diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index aea530e7b6e..3befe0a94d7 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -150,6 +150,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if ((wmd->texmapping == MOD_DISP_MAP_OBJECT) && wmd->map_object != NULL) { DEG_add_object_relation(ctx->node, wmd->map_object, DEG_OB_COMP_TRANSFORM, "Warp Modifier map"); } + if (wmd->texture != NULL) { + DEG_add_generic_id_relation(ctx->node, &wmd->texture->id, "Warp Modifier"); + } } static void warpModifier_do( diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index a517f753791..f6192d645e9 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -126,6 +126,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if (wmd->objectcenter != NULL || wmd->map_object != NULL) { DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Wave Modifier"); } + if (wmd->texture != NULL) { + DEG_add_generic_id_relation(ctx->node, &wmd->texture->id, "Wave Modifier"); + } } static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) |