Fix T58679: Missing modifiers update on changes to texture

This commit is contained in:
Sergey Sharybin 2018-12-05 17:35:13 +01:00
parent d355a2b7d8
commit 6e00415a85
Notes: blender-bot 2023-02-14 05:51:15 +01:00
Referenced by issue #58679, Changes to a procedural texture don't reflect in displacement modifier immediately
5 changed files with 29 additions and 0 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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 {

View File

@ -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(

View File

@ -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)