[Bf-blender-cvs] [6e00415a85a] blender2.8: Fix T58679: Missing modifiers update on changes to texture

Sergey Sharybin noreply at git.blender.org
Wed Dec 5 17:36:08 CET 2018


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)



More information about the Bf-blender-cvs mailing list