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.
This commit is contained in:
@@ -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;
|
||||
|
||||
BLO_write_struct(writer, CorrectiveSmoothModifierData, csmd);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (csmd->bind_coords) {
|
||||
BLO_write_float3_array(writer, csmd->bind_coords_num, (float *)csmd->bind_coords);
|
||||
BLO_write_struct_at_address(writer, CorrectiveSmoothModifierData, md, &csmd);
|
||||
|
||||
if (csmd.bind_coords != NULL) {
|
||||
BLO_write_float3_array(writer, csmd.bind_coords_num, (float *)csmd.bind_coords);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user