Pass copy flag to modifier copyData function
This will allow modifiers to decide whether to copy or share caches between ModifierData copies.
This commit is contained in:
parent
88b297da99
commit
60b9d413db
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user