diff options
author | Ben Batt <benbatt@gmail.com> | 2008-08-05 18:42:04 +0400 |
---|---|---|
committer | Ben Batt <benbatt@gmail.com> | 2008-08-05 18:42:04 +0400 |
commit | b277de28958e8113e2b0ec2f595546fa54b81f3b (patch) | |
tree | 1dbce65bec47896763ef2c002f588b2dc9f6a157 /source | |
parent | cd1d46c61d937f63684216f284777f75038f5ed3 (diff) |
Fix for [#17421] Issue with Displace modifier not updating with
animated textures
I have added a dependsOnTime function for the Displace modifier which checks
if the displacement texture has IPOs, is a plugin, or uses an animated image.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_texture.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/texture.c | 28 |
3 files changed, 44 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h index fade0f8cbaa..c162a04e055 100644 --- a/source/blender/blenkernel/BKE_texture.h +++ b/source/blender/blenkernel/BKE_texture.h @@ -73,6 +73,7 @@ void BKE_free_envmap(struct EnvMap *env); struct EnvMap *BKE_add_envmap(void); struct EnvMap *BKE_copy_envmap(struct EnvMap *env); +int BKE_texture_dependsOnTime(const struct Tex *texture); #endif diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 503654717ae..2cb64896d87 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -2999,6 +2999,20 @@ CustomDataMask displaceModifier_requiredDataMask(ModifierData *md) return dataMask; } +static int displaceModifier_dependsOnTime(ModifierData *md) +{ + DisplaceModifierData *dmd = (DisplaceModifierData *)md; + + if(dmd->texture) + { + return BKE_texture_dependsOnTime(dmd->texture); + } + else + { + return 0; + } +} + static void displaceModifier_foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData) { @@ -7354,6 +7368,7 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) mti->initData = displaceModifier_initData; mti->copyData = displaceModifier_copyData; mti->requiredDataMask = displaceModifier_requiredDataMask; + mti->dependsOnTime = displaceModifier_dependsOnTime; mti->foreachObjectLink = displaceModifier_foreachObjectLink; mti->foreachIDLink = displaceModifier_foreachIDLink; mti->updateDepgraph = displaceModifier_updateDepgraph; diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index ad139220785..44342c02676 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -845,3 +845,31 @@ void BKE_free_envmap(EnvMap *env) } /* ------------------------------------------------------------------------- */ +int BKE_texture_dependsOnTime(const struct Tex *texture) +{ + if(texture->plugin) + { + // assume all plugins depend on time + return 1; + } + else if(texture->ima) + { + if(texture->ima->source == IMA_SRC_SEQUENCE || + texture->ima->source == IMA_SRC_MOVIE || + texture->ima->source == IMA_SRC_GENERATED) + { + return 1; + } + } + else if(texture->ipo) + { + // assume any ipo means the texture is animated + return 1; + } + else + { + return 0; + } +} + +/* ------------------------------------------------------------------------- */ |