From 60b9d413dbf1afc24b428dbe3bfea4bc0ec164c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 4 Jul 2018 12:45:30 +0200 Subject: Pass copy flag to modifier copyData function This will allow modifiers to decide whether to copy or share caches between ModifierData copies. --- source/blender/blenkernel/BKE_modifier.h | 6 ++++-- source/blender/blenkernel/intern/modifier.c | 4 ++-- source/blender/modifiers/intern/MOD_armature.c | 4 ++-- source/blender/modifiers/intern/MOD_cloth.c | 2 +- source/blender/modifiers/intern/MOD_correctivesmooth.c | 4 ++-- source/blender/modifiers/intern/MOD_dynamicpaint.c | 2 +- source/blender/modifiers/intern/MOD_explode.c | 4 ++-- source/blender/modifiers/intern/MOD_fluidsim.c | 2 +- source/blender/modifiers/intern/MOD_hook.c | 4 ++-- source/blender/modifiers/intern/MOD_laplaciandeform.c | 4 ++-- source/blender/modifiers/intern/MOD_meshdeform.c | 4 ++-- source/blender/modifiers/intern/MOD_meshsequencecache.c | 4 ++-- source/blender/modifiers/intern/MOD_ocean.c | 2 +- source/blender/modifiers/intern/MOD_particlesystem.c | 4 ++-- source/blender/modifiers/intern/MOD_smoke.c | 2 +- source/blender/modifiers/intern/MOD_subsurf.c | 4 ++-- source/blender/modifiers/intern/MOD_surfacedeform.c | 4 ++-- source/blender/modifiers/intern/MOD_warp.c | 4 ++-- source/blender/modifiers/intern/MOD_weightvgedit.c | 4 ++-- 19 files changed, 35 insertions(+), 33 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index c9f724a9bc4..987bb59cba3 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -162,8 +162,10 @@ typedef struct ModifierTypeInfo { /* Copy instance data for this modifier type. Should copy all user * level settings to the target modifier. + * + * \param flag Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more). */ - void (*copyData)(const struct ModifierData *md, struct ModifierData *target); + void (*copyData)(const struct ModifierData *md, struct ModifierData *target, const int flag); /********************* Deform modifier functions *********************/ /* DEPRECATED */ @@ -387,7 +389,7 @@ void modifier_free(struct ModifierData *md); bool modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md); -void modifier_copyData_generic(const struct ModifierData *md, struct ModifierData *target); +void modifier_copyData_generic(const struct ModifierData *md, struct ModifierData *target, const int flag); void modifier_copyData(struct ModifierData *md, struct ModifierData *target); void modifier_copyData_ex(struct ModifierData *md, struct ModifierData *target, const int flag); bool modifier_dependsOnTime(struct ModifierData *md); diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 4c2a58e7126..b877a08b6cf 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -293,7 +293,7 @@ void modifiers_foreachTexLink(Object *ob, TexWalkFunc walk, void *userData) /* callback's can use this * to avoid copying every member. */ -void modifier_copyData_generic(const ModifierData *md_src, ModifierData *md_dst) +void modifier_copyData_generic(const ModifierData *md_src, ModifierData *md_dst, const int UNUSED(flag)) { const ModifierTypeInfo *mti = modifierType_getInfo(md_src->type); @@ -326,7 +326,7 @@ void modifier_copyData_ex(ModifierData *md, ModifierData *target, const int flag target->flag = md->flag; if (mti->copyData) { - mti->copyData(md, target); + mti->copyData(md, target, flag); } if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) { diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index 09ba865cce3..a069b261067 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -64,14 +64,14 @@ static void initData(ModifierData *md) amd->deformflag = ARM_DEF_VGROUP; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { #if 0 const ArmatureModifierData *amd = (const ArmatureModifierData *) md; #endif ArmatureModifierData *tamd = (ArmatureModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); tamd->prevCos = NULL; } diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c index 58979fa201b..34f571f5e30 100644 --- a/source/blender/modifiers/intern/MOD_cloth.c +++ b/source/blender/modifiers/intern/MOD_cloth.c @@ -155,7 +155,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) { const ClothModifierData *clmd = (const ClothModifierData *) md; ClothModifierData *tclmd = (ClothModifierData *) target; diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index 879b07de6d9..d59360896e8 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -80,12 +80,12 @@ static void initData(ModifierData *md) } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const CorrectiveSmoothModifierData *csmd = (const CorrectiveSmoothModifierData *)md; CorrectiveSmoothModifierData *tcsmd = (CorrectiveSmoothModifierData *)target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); if (csmd->bind_coords) { tcsmd->bind_coords = MEM_dupallocN(csmd->bind_coords); diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index 9131bc0659f..61219096b43 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -57,7 +57,7 @@ static void initData(ModifierData *md) pmd->type = MOD_DYNAMICPAINT_TYPE_CANVAS; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) { const DynamicPaintModifierData *pmd = (const DynamicPaintModifierData *)md; DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target; diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index 948aaf0751e..04bfe96bc59 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -70,14 +70,14 @@ static void freeData(ModifierData *md) MEM_SAFE_FREE(emd->facepa); } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { #if 0 const ExplodeModifierData *emd = (const ExplodeModifierData *) md; #endif ExplodeModifierData *temd = (ExplodeModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); temd->facepa = NULL; } diff --git a/source/blender/modifiers/intern/MOD_fluidsim.c b/source/blender/modifiers/intern/MOD_fluidsim.c index ffa74be0b33..272cc5c17f4 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim.c +++ b/source/blender/modifiers/intern/MOD_fluidsim.c @@ -65,7 +65,7 @@ static void freeData(ModifierData *md) fluidsim_free(fluidmd); } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) { const FluidsimModifierData *fluidmd = (const FluidsimModifierData *) md; FluidsimModifierData *tfluidmd = (FluidsimModifierData *) target; diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index a5013bb38c6..4b34bdd2c16 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -63,12 +63,12 @@ static void initData(ModifierData *md) hmd->flag = 0; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const HookModifierData *hmd = (const HookModifierData *) md; HookModifierData *thmd = (HookModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); thmd->curfalloff = curvemapping_copy(hmd->curfalloff); diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c index e5b96c633f7..0224d412ba6 100644 --- a/source/blender/modifiers/intern/MOD_laplaciandeform.c +++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c @@ -704,12 +704,12 @@ static void initData(ModifierData *md) lmd->flag = 0; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const LaplacianDeformModifierData *lmd = (const LaplacianDeformModifierData *)md; LaplacianDeformModifierData *tlmd = (LaplacianDeformModifierData *)target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); tlmd->vertexco = MEM_dupallocN(lmd->vertexco); tlmd->cache_system = NULL; diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index af37b30b7aa..05e1568f780 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -81,12 +81,12 @@ static void freeData(ModifierData *md) if (mmd->bindcos) MEM_freeN(mmd->bindcos); /* deprecated */ } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const MeshDeformModifierData *mmd = (const MeshDeformModifierData *) md; MeshDeformModifierData *tmmd = (MeshDeformModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); if (mmd->bindinfluences) tmmd->bindinfluences = MEM_dupallocN(mmd->bindinfluences); if (mmd->bindoffsets) tmmd->bindoffsets = MEM_dupallocN(mmd->bindoffsets); diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c b/source/blender/modifiers/intern/MOD_meshsequencecache.c index a6c9f865e4c..fd8676d6653 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.c +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c @@ -55,14 +55,14 @@ static void initData(ModifierData *md) mcmd->read_flag = MOD_MESHSEQ_READ_ALL; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { #if 0 const MeshSeqCacheModifierData *mcmd = (const MeshSeqCacheModifierData *)md; #endif MeshSeqCacheModifierData *tmcmd = (MeshSeqCacheModifierData *)target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); tmcmd->reader = NULL; } diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index 702e557ccb1..58454782b2e 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -163,7 +163,7 @@ static void freeData(ModifierData *md) #endif /* WITH_OCEANSIM */ } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) { #ifdef WITH_OCEANSIM #if 0 diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index 1821a0fced0..6f9a44cd9e6 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -79,14 +79,14 @@ static void freeData(ModifierData *md) psmd->psys->flag |= PSYS_DELETE; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { #if 0 const ParticleSystemModifierData *psmd = (const ParticleSystemModifierData *) md; #endif ParticleSystemModifierData *tpsmd = (ParticleSystemModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); tpsmd->mesh_final = NULL; tpsmd->mesh_original = NULL; diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c index e81c760ed67..9a27f31adaa 100644 --- a/source/blender/modifiers/intern/MOD_smoke.c +++ b/source/blender/modifiers/intern/MOD_smoke.c @@ -71,7 +71,7 @@ static void initData(ModifierData *md) smd->time = -1; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) { const SmokeModifierData *smd = (const SmokeModifierData *)md; SmokeModifierData *tsmd = (SmokeModifierData *)target; diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c index 3de04e878ac..5a5b596eaab 100644 --- a/source/blender/modifiers/intern/MOD_subsurf.c +++ b/source/blender/modifiers/intern/MOD_subsurf.c @@ -65,14 +65,14 @@ static void initData(ModifierData *md) smd->flags |= eSubsurfModifierFlag_SubsurfUv; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { #if 0 const SubsurfModifierData *smd = (const SubsurfModifierData *) md; #endif SubsurfModifierData *tsmd = (SubsurfModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); tsmd->emCache = tsmd->mCache = NULL; } diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c index a3ab2d74602..0c58d47d53f 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.c +++ b/source/blender/modifiers/intern/MOD_surfacedeform.c @@ -136,12 +136,12 @@ static void freeData(ModifierData *md) } } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const SurfaceDeformModifierData *smd = (const SurfaceDeformModifierData *)md; SurfaceDeformModifierData *tsmd = (SurfaceDeformModifierData *)target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); if (smd->verts) { tsmd->verts = MEM_dupallocN(smd->verts); diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 54f8ce8c515..69bf44d8b68 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -65,12 +65,12 @@ static void initData(ModifierData *md) wmd->flag = 0; } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const WarpModifierData *wmd = (const WarpModifierData *) md; WarpModifierData *twmd = (WarpModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); twmd->curfalloff = curvemapping_copy(wmd->curfalloff); } diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c index a26cb73d823..a2f9319ad51 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.c @@ -81,12 +81,12 @@ static void freeData(ModifierData *md) curvemapping_free(wmd->cmap_curve); } -static void copyData(const ModifierData *md, ModifierData *target) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const WeightVGEditModifierData *wmd = (const WeightVGEditModifierData *) md; WeightVGEditModifierData *twmd = (WeightVGEditModifierData *) target; - modifier_copyData_generic(md, target); + modifier_copyData_generic(md, target, flag); twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve); } -- cgit v1.2.3