Fix several missing cases of copy func for modifiers.

Any time a modifier data has non-ID pointer, it should have own copy
function (and also take care of proper init/reset in its init callback).
This commit is contained in:
2019-01-28 21:48:09 +01:00
parent 147e22ef70
commit 5537117366
3 changed files with 27 additions and 2 deletions

View File

@@ -66,6 +66,15 @@ static void initData(ModifierData *md)
mmd->quality = 3;
}
static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag)
{
MultiresModifierData *mmd_dst = (MultiresModifierData *)md_dst;
modifier_copyData_generic(md_src, md_dst, flag);
mmd_dst->subdiv = NULL;
}
static void freeData(ModifierData *md)
{
MultiresModifierData *mmd = (MultiresModifierData *) md;
@@ -193,7 +202,7 @@ ModifierTypeInfo modifierType_Multires = {
eModifierTypeFlag_SupportsMapping |
eModifierTypeFlag_RequiresOriginalData,
/* copyData */ modifier_copyData_generic,
/* copyData */ copyData,
/* deformVerts_DM */ NULL,
/* deformMatrices_DM */ NULL,

View File

@@ -75,6 +75,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
modifier_copyData_generic(md, target, flag);
tsmd->emCache = tsmd->mCache = NULL;
tsmd->subdiv = NULL;
}
static void freeData(ModifierData *md)

View File

@@ -59,6 +59,21 @@ static void initData(ModifierData *md)
SurfaceModifierData *surmd = (SurfaceModifierData *) md;
surmd->bvhtree = NULL;
surmd->mesh = NULL;
surmd->x = NULL;
surmd->v = NULL;
}
static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag)
{
SurfaceModifierData *surmd_dst = (SurfaceModifierData *)md_dst;
modifier_copyData_generic(md_src, md_dst, flag);
surmd_dst->bvhtree = NULL;
surmd_dst->mesh = NULL;
surmd_dst->x = NULL;
surmd_dst->v = NULL;
}
static void freeData(ModifierData *md)
@@ -194,7 +209,7 @@ ModifierTypeInfo modifierType_Surface = {
eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_NoUserAdd,
/* copyData */ NULL,
/* copyData */ copyData,
/* deformVerts_DM */ NULL,
/* deformMatrices_DM */ NULL,