Commit: 6e00415a85a995f3d976530ea3ba748971292212
Author: Sergey Sharybin
Date:   Wed Dec 5 17:35:13 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB6e00415a85a995f3d976530ea3ba748971292212

Fix T58679: Missing modifiers update on changes to texture

===================================================================

M       source/blender/depsgraph/DEG_depsgraph_build.h
M       source/blender/depsgraph/intern/depsgraph_build.cc
M       source/blender/modifiers/intern/MOD_displace.c
M       source/blender/modifiers/intern/MOD_warp.c
M       source/blender/modifiers/intern/MOD_wave.c

===================================================================

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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to