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:
@@ -162,8 +162,10 @@ typedef struct ModifierTypeInfo {
|
|||||||
|
|
||||||
/* Copy instance data for this modifier type. Should copy all user
|
/* Copy instance data for this modifier type. Should copy all user
|
||||||
* level settings to the target modifier.
|
* 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 */
|
/********************* Deform modifier functions *********************/ /* DEPRECATED */
|
||||||
@@ -387,7 +389,7 @@ void modifier_free(struct ModifierData *md);
|
|||||||
|
|
||||||
bool modifier_unique_name(struct ListBase *modifiers, 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(struct ModifierData *md, struct ModifierData *target);
|
||||||
void modifier_copyData_ex(struct ModifierData *md, struct ModifierData *target, const int flag);
|
void modifier_copyData_ex(struct ModifierData *md, struct ModifierData *target, const int flag);
|
||||||
bool modifier_dependsOnTime(struct ModifierData *md);
|
bool modifier_dependsOnTime(struct ModifierData *md);
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ void modifiers_foreachTexLink(Object *ob, TexWalkFunc walk, void *userData)
|
|||||||
/* callback's can use this
|
/* callback's can use this
|
||||||
* to avoid copying every member.
|
* 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);
|
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;
|
target->flag = md->flag;
|
||||||
|
|
||||||
if (mti->copyData) {
|
if (mti->copyData) {
|
||||||
mti->copyData(md, target);
|
mti->copyData(md, target, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
|
if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
|
||||||
|
|||||||
@@ -64,14 +64,14 @@ static void initData(ModifierData *md)
|
|||||||
amd->deformflag = ARM_DEF_VGROUP;
|
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
|
#if 0
|
||||||
const ArmatureModifierData *amd = (const ArmatureModifierData *) md;
|
const ArmatureModifierData *amd = (const ArmatureModifierData *) md;
|
||||||
#endif
|
#endif
|
||||||
ArmatureModifierData *tamd = (ArmatureModifierData *) target;
|
ArmatureModifierData *tamd = (ArmatureModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
tamd->prevCos = NULL;
|
tamd->prevCos = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||||||
return dataMask;
|
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;
|
const ClothModifierData *clmd = (const ClothModifierData *) md;
|
||||||
ClothModifierData *tclmd = (ClothModifierData *) target;
|
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;
|
const CorrectiveSmoothModifierData *csmd = (const CorrectiveSmoothModifierData *)md;
|
||||||
CorrectiveSmoothModifierData *tcsmd = (CorrectiveSmoothModifierData *)target;
|
CorrectiveSmoothModifierData *tcsmd = (CorrectiveSmoothModifierData *)target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
if (csmd->bind_coords) {
|
if (csmd->bind_coords) {
|
||||||
tcsmd->bind_coords = MEM_dupallocN(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;
|
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;
|
const DynamicPaintModifierData *pmd = (const DynamicPaintModifierData *)md;
|
||||||
DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target;
|
DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target;
|
||||||
|
|||||||
@@ -70,14 +70,14 @@ static void freeData(ModifierData *md)
|
|||||||
|
|
||||||
MEM_SAFE_FREE(emd->facepa);
|
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
|
#if 0
|
||||||
const ExplodeModifierData *emd = (const ExplodeModifierData *) md;
|
const ExplodeModifierData *emd = (const ExplodeModifierData *) md;
|
||||||
#endif
|
#endif
|
||||||
ExplodeModifierData *temd = (ExplodeModifierData *) target;
|
ExplodeModifierData *temd = (ExplodeModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
temd->facepa = NULL;
|
temd->facepa = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ static void freeData(ModifierData *md)
|
|||||||
fluidsim_free(fluidmd);
|
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;
|
const FluidsimModifierData *fluidmd = (const FluidsimModifierData *) md;
|
||||||
FluidsimModifierData *tfluidmd = (FluidsimModifierData *) target;
|
FluidsimModifierData *tfluidmd = (FluidsimModifierData *) target;
|
||||||
|
|||||||
@@ -63,12 +63,12 @@ static void initData(ModifierData *md)
|
|||||||
hmd->flag = 0;
|
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;
|
const HookModifierData *hmd = (const HookModifierData *) md;
|
||||||
HookModifierData *thmd = (HookModifierData *) target;
|
HookModifierData *thmd = (HookModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
thmd->curfalloff = curvemapping_copy(hmd->curfalloff);
|
thmd->curfalloff = curvemapping_copy(hmd->curfalloff);
|
||||||
|
|
||||||
|
|||||||
@@ -704,12 +704,12 @@ static void initData(ModifierData *md)
|
|||||||
lmd->flag = 0;
|
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;
|
const LaplacianDeformModifierData *lmd = (const LaplacianDeformModifierData *)md;
|
||||||
LaplacianDeformModifierData *tlmd = (LaplacianDeformModifierData *)target;
|
LaplacianDeformModifierData *tlmd = (LaplacianDeformModifierData *)target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
tlmd->vertexco = MEM_dupallocN(lmd->vertexco);
|
tlmd->vertexco = MEM_dupallocN(lmd->vertexco);
|
||||||
tlmd->cache_system = NULL;
|
tlmd->cache_system = NULL;
|
||||||
|
|||||||
@@ -81,12 +81,12 @@ static void freeData(ModifierData *md)
|
|||||||
if (mmd->bindcos) MEM_freeN(mmd->bindcos); /* deprecated */
|
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;
|
const MeshDeformModifierData *mmd = (const MeshDeformModifierData *) md;
|
||||||
MeshDeformModifierData *tmmd = (MeshDeformModifierData *) target;
|
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->bindinfluences) tmmd->bindinfluences = MEM_dupallocN(mmd->bindinfluences);
|
||||||
if (mmd->bindoffsets) tmmd->bindoffsets = MEM_dupallocN(mmd->bindoffsets);
|
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;
|
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
|
#if 0
|
||||||
const MeshSeqCacheModifierData *mcmd = (const MeshSeqCacheModifierData *)md;
|
const MeshSeqCacheModifierData *mcmd = (const MeshSeqCacheModifierData *)md;
|
||||||
#endif
|
#endif
|
||||||
MeshSeqCacheModifierData *tmcmd = (MeshSeqCacheModifierData *)target;
|
MeshSeqCacheModifierData *tmcmd = (MeshSeqCacheModifierData *)target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
tmcmd->reader = NULL;
|
tmcmd->reader = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ static void freeData(ModifierData *md)
|
|||||||
#endif /* WITH_OCEANSIM */
|
#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
|
#ifdef WITH_OCEANSIM
|
||||||
#if 0
|
#if 0
|
||||||
|
|||||||
@@ -79,14 +79,14 @@ static void freeData(ModifierData *md)
|
|||||||
psmd->psys->flag |= PSYS_DELETE;
|
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
|
#if 0
|
||||||
const ParticleSystemModifierData *psmd = (const ParticleSystemModifierData *) md;
|
const ParticleSystemModifierData *psmd = (const ParticleSystemModifierData *) md;
|
||||||
#endif
|
#endif
|
||||||
ParticleSystemModifierData *tpsmd = (ParticleSystemModifierData *) target;
|
ParticleSystemModifierData *tpsmd = (ParticleSystemModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
tpsmd->mesh_final = NULL;
|
tpsmd->mesh_final = NULL;
|
||||||
tpsmd->mesh_original = NULL;
|
tpsmd->mesh_original = NULL;
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ static void initData(ModifierData *md)
|
|||||||
smd->time = -1;
|
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;
|
const SmokeModifierData *smd = (const SmokeModifierData *)md;
|
||||||
SmokeModifierData *tsmd = (SmokeModifierData *)target;
|
SmokeModifierData *tsmd = (SmokeModifierData *)target;
|
||||||
|
|||||||
@@ -65,14 +65,14 @@ static void initData(ModifierData *md)
|
|||||||
smd->flags |= eSubsurfModifierFlag_SubsurfUv;
|
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
|
#if 0
|
||||||
const SubsurfModifierData *smd = (const SubsurfModifierData *) md;
|
const SubsurfModifierData *smd = (const SubsurfModifierData *) md;
|
||||||
#endif
|
#endif
|
||||||
SubsurfModifierData *tsmd = (SubsurfModifierData *) target;
|
SubsurfModifierData *tsmd = (SubsurfModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
tsmd->emCache = tsmd->mCache = NULL;
|
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;
|
const SurfaceDeformModifierData *smd = (const SurfaceDeformModifierData *)md;
|
||||||
SurfaceDeformModifierData *tsmd = (SurfaceDeformModifierData *)target;
|
SurfaceDeformModifierData *tsmd = (SurfaceDeformModifierData *)target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
if (smd->verts) {
|
if (smd->verts) {
|
||||||
tsmd->verts = MEM_dupallocN(smd->verts);
|
tsmd->verts = MEM_dupallocN(smd->verts);
|
||||||
|
|||||||
@@ -65,12 +65,12 @@ static void initData(ModifierData *md)
|
|||||||
wmd->flag = 0;
|
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;
|
const WarpModifierData *wmd = (const WarpModifierData *) md;
|
||||||
WarpModifierData *twmd = (WarpModifierData *) target;
|
WarpModifierData *twmd = (WarpModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
twmd->curfalloff = curvemapping_copy(wmd->curfalloff);
|
twmd->curfalloff = curvemapping_copy(wmd->curfalloff);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,12 +81,12 @@ static void freeData(ModifierData *md)
|
|||||||
curvemapping_free(wmd->cmap_curve);
|
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;
|
const WeightVGEditModifierData *wmd = (const WeightVGEditModifierData *) md;
|
||||||
WeightVGEditModifierData *twmd = (WeightVGEditModifierData *) target;
|
WeightVGEditModifierData *twmd = (WeightVGEditModifierData *) target;
|
||||||
|
|
||||||
modifier_copyData_generic(md, target);
|
modifier_copyData_generic(md, target, flag);
|
||||||
|
|
||||||
twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve);
|
twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user