Fix T58679: Missing modifiers update on changes to texture
This commit is contained in:
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
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue