LibOverride: Do not write Laplacian Deform modifier binding data.

Skip writing binding data and similar for override modifiers already
present in reference linked data, as this can use a lot of space, and
is fully useless data typically since we already skip writing Mesh
geometry data itself.

Ref. T97967.
This commit is contained in:
Bastien Montagne 2022-05-16 16:55:11 +02:00
parent e9d7c05754
commit 5973950b2a
1 changed files with 17 additions and 4 deletions

View File

@ -843,13 +843,26 @@ static void panelRegister(ARegionType *region_type)
modifier_panel_register(region_type, eModifierType_LaplacianDeform, panel_draw);
}
static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md)
static void blendWrite(BlendWriter *writer, const ID *id_owner, const ModifierData *md)
{
LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)md;
LaplacianDeformModifierData lmd = *(const LaplacianDeformModifierData *)md;
BLO_write_struct(writer, LaplacianDeformModifierData, lmd);
if (ID_IS_OVERRIDE_LIBRARY(id_owner)) {
BLI_assert(!ID_IS_LINKED(id_owner));
const bool is_local = (md->flag & eModifierFlag_OverrideLibrary_Local) != 0;
if (!is_local) {
/* Modifier comming from linked data cannot be bound from an override, so we can remove all
* binding data, can save a sgnificant amout of memory. */
lmd.verts_num = 0;
lmd.vertexco = NULL;
}
}
BLO_write_float3_array(writer, lmd->verts_num, lmd->vertexco);
BLO_write_struct_at_address(writer, LaplacianDeformModifierData, md, &lmd);
if (lmd.vertexco != NULL) {
BLO_write_float3_array(writer, lmd.verts_num, lmd.vertexco);
}
}
static void blendRead(BlendDataReader *reader, ModifierData *md)