Cleanup: Use const qualifier in modifier data copy
Fix possible overflow of Modifier UUID The code prior this change was re-generating modifier's session UUID prior to copying this id from the source. This approach has a higher risk of modifiers session UUID to overflow and start colliding with existing modifiers. This change makes it so that modifier copy does not re-generated the session UUID unless it is needed. Differential Revision: https://developer.blender.org/D14125
This commit is contained in:
parent
7e312f89d9
commit
03ff58b67d
|
@ -409,6 +409,8 @@ void BKE_modifier_session_uuid_generate(struct ModifierData *md);
|
||||||
|
|
||||||
bool BKE_modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
|
bool BKE_modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
|
||||||
|
|
||||||
|
struct ModifierData *BKE_modifier_copy_ex(const struct ModifierData *md, int flag);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback's can use this to avoid copying every member.
|
* Callback's can use this to avoid copying every member.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -131,7 +131,7 @@ void BKE_modifier_panel_expand(ModifierData *md)
|
||||||
|
|
||||||
/***/
|
/***/
|
||||||
|
|
||||||
ModifierData *BKE_modifier_new(int type)
|
static ModifierData *modifier_allocate_and_init(int type)
|
||||||
{
|
{
|
||||||
const ModifierTypeInfo *mti = BKE_modifier_get_info(type);
|
const ModifierTypeInfo *mti = BKE_modifier_get_info(type);
|
||||||
ModifierData *md = MEM_callocN(mti->structSize, mti->structName);
|
ModifierData *md = MEM_callocN(mti->structSize, mti->structName);
|
||||||
|
@ -152,6 +152,13 @@ ModifierData *BKE_modifier_new(int type)
|
||||||
mti->initData(md);
|
mti->initData(md);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return md;
|
||||||
|
}
|
||||||
|
|
||||||
|
ModifierData *BKE_modifier_new(int type)
|
||||||
|
{
|
||||||
|
ModifierData *md = modifier_allocate_and_init(type);
|
||||||
|
|
||||||
BKE_modifier_session_uuid_generate(md);
|
BKE_modifier_session_uuid_generate(md);
|
||||||
|
|
||||||
return md;
|
return md;
|
||||||
|
@ -315,6 +322,16 @@ void BKE_modifiers_foreach_tex_link(Object *ob, TexWalkFunc walk, void *userData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModifierData *BKE_modifier_copy_ex(const ModifierData *md, int flag)
|
||||||
|
{
|
||||||
|
ModifierData *md_dst = modifier_allocate_and_init(md->type);
|
||||||
|
|
||||||
|
BLI_strncpy(md_dst->name, md->name, sizeof(md_dst->name));
|
||||||
|
BKE_modifier_copydata_ex(md, md_dst, flag);
|
||||||
|
|
||||||
|
return md_dst;
|
||||||
|
}
|
||||||
|
|
||||||
void BKE_modifier_copydata_generic(const ModifierData *md_src,
|
void BKE_modifier_copydata_generic(const ModifierData *md_src,
|
||||||
ModifierData *md_dst,
|
ModifierData *md_dst,
|
||||||
const int UNUSED(flag))
|
const int UNUSED(flag))
|
||||||
|
|
|
@ -1599,9 +1599,7 @@ bool BKE_object_modifier_stack_copy(Object *ob_dst,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ModifierData *md_dst = BKE_modifier_new(md_src->type);
|
ModifierData *md_dst = BKE_modifier_copy_ex(md_src, flag_subdata);
|
||||||
BLI_strncpy(md_dst->name, md_src->name, sizeof(md_dst->name));
|
|
||||||
BKE_modifier_copydata_ex(md_src, md_dst, flag_subdata);
|
|
||||||
BLI_addtail(&ob_dst->modifiers, md_dst);
|
BLI_addtail(&ob_dst->modifiers, md_dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue