From e9d7c05754e709e12b74855d697981ff472939ea Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 16 May 2022 16:53:26 +0200 Subject: LibOverride: Do not write Corrective Smooth 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. --- .../blender/modifiers/intern/MOD_correctivesmooth.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'source/blender/modifiers') diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index e8a07f75b0f..70ab6559b65 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -798,14 +798,25 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_CorrectiveSmooth, 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) { - const CorrectiveSmoothModifierData *csmd = (const CorrectiveSmoothModifierData *)md; + CorrectiveSmoothModifierData csmd = *(const CorrectiveSmoothModifierData *)md; + + 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. */ + csmd.bind_coords_num = 0; + csmd.bind_coords = NULL; + } + } - BLO_write_struct(writer, CorrectiveSmoothModifierData, csmd); + BLO_write_struct_at_address(writer, CorrectiveSmoothModifierData, md, &csmd); - if (csmd->bind_coords) { - BLO_write_float3_array(writer, csmd->bind_coords_num, (float *)csmd->bind_coords); + if (csmd.bind_coords != NULL) { + BLO_write_float3_array(writer, csmd.bind_coords_num, (float *)csmd.bind_coords); } } -- cgit v1.2.3