From 68d203af0bfbdf132604b5b2541e6f1fe9c49764 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 16 May 2022 16:00:00 +0200 Subject: Refactor modifiers writing code. This changes is needed to give more control to modifiers' writing callback when defined. It will allow to implement better culling of needless data when writing e.g. modifiers from library overrides. Ref. T97967. Reviewed By: brecht, JacquesLucke Differential Revision: https://developer.blender.org/D14939 --- source/blender/modifiers/intern/MOD_bevel.c | 4 +++- source/blender/modifiers/intern/MOD_correctivesmooth.c | 4 +++- source/blender/modifiers/intern/MOD_hook.c | 4 +++- source/blender/modifiers/intern/MOD_laplaciandeform.c | 4 +++- source/blender/modifiers/intern/MOD_meshdeform.c | 4 +++- source/blender/modifiers/intern/MOD_nodes.cc | 5 ++++- source/blender/modifiers/intern/MOD_surfacedeform.c | 4 +++- source/blender/modifiers/intern/MOD_warp.c | 4 +++- source/blender/modifiers/intern/MOD_weightvgedit.c | 4 +++- source/blender/modifiers/intern/MOD_weightvgproximity.c | 4 +++- 10 files changed, 31 insertions(+), 10 deletions(-) (limited to 'source/blender/modifiers') diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index a7364af10a3..0b2ea0e1ade 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -396,10 +396,12 @@ static void panelRegister(ARegionType *region_type) region_type, "shading", "Shading", NULL, shading_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const BevelModifierData *bmd = (const BevelModifierData *)md; + BLO_write_struct(writer, BevelModifierData, bmd); + if (bmd->custom_profile) { BKE_curveprofile_blend_write(writer, bmd->custom_profile); } diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index 52162eaacc5..e8a07f75b0f 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -798,10 +798,12 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_CorrectiveSmooth, panel_draw); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const CorrectiveSmoothModifierData *csmd = (const CorrectiveSmoothModifierData *)md; + BLO_write_struct(writer, CorrectiveSmoothModifierData, csmd); + if (csmd->bind_coords) { BLO_write_float3_array(writer, csmd->bind_coords_num, (float *)csmd->bind_coords); } diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index 1000bbf45d6..3649ece12e1 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -519,10 +519,12 @@ static void panelRegister(ARegionType *region_type) region_type, "falloff", "Falloff", NULL, falloff_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const HookModifierData *hmd = (const HookModifierData *)md; + BLO_write_struct(writer, HookModifierData, hmd); + if (hmd->curfalloff) { BKE_curvemapping_blend_write(writer, hmd->curfalloff); } diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c index 239cb7f5a5a..900c94a87be 100644 --- a/source/blender/modifiers/intern/MOD_laplaciandeform.c +++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c @@ -843,10 +843,12 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_LaplacianDeform, panel_draw); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)md; + BLO_write_struct(writer, LaplacianDeformModifierData, lmd); + BLO_write_float3_array(writer, lmd->verts_num, lmd->vertexco); } diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index c2e9e5ebe7d..84df93b00bf 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -581,11 +581,13 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_MeshDeform, panel_draw); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; int size = mmd->dyngridsize; + BLO_write_struct(writer, MeshDeformModifierData, mmd); + BLO_write_struct_array(writer, MDefInfluence, mmd->influences_num, mmd->bindinfluences); /* NOTE: `bindoffset` is abusing `verts_num + 1` as its size, this becomes an incorrect value in diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index cdf16d813f3..0d8cef3e083 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -1729,9 +1729,12 @@ static void panelRegister(ARegionType *region_type) panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const NodesModifierData *nmd = reinterpret_cast(md); + + BLO_write_struct(writer, NodesModifierData, nmd); + if (nmd->settings.properties != nullptr) { /* Note that the property settings are based on the socket type info * and don't necessarily need to be written, but we can't just free them. */ diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c index 8a0f49efb65..e738e86dc24 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.c +++ b/source/blender/modifiers/intern/MOD_surfacedeform.c @@ -1669,10 +1669,12 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_SurfaceDeform, panel_draw); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const SurfaceDeformModifierData *smd = (const SurfaceDeformModifierData *)md; + BLO_write_struct(writer, SurfaceDeformModifierData, smd); + BLO_write_struct_array(writer, SDefVert, smd->bind_verts_num, smd->verts); if (smd->verts) { diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 79972d1911d..402d7b2c99e 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -489,10 +489,12 @@ static void panelRegister(ARegionType *region_type) region_type, "texture", "Texture", NULL, texture_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const WarpModifierData *wmd = (const WarpModifierData *)md; + BLO_write_struct(writer, WarpModifierData, wmd); + if (wmd->curfalloff) { BKE_curvemapping_blend_write(writer, wmd->curfalloff); } diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c index 2c733542e51..e1b43157adb 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.c @@ -375,10 +375,12 @@ static void panelRegister(ARegionType *region_type) region_type, "influence", "Influence", NULL, influence_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const WeightVGEditModifierData *wmd = (const WeightVGEditModifierData *)md; + BLO_write_struct(writer, WeightVGEditModifierData, wmd); + if (wmd->cmap_curve) { BKE_curvemapping_blend_write(writer, wmd->cmap_curve); } diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 43a90b2a4ac..1bea5b93c97 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -715,10 +715,12 @@ static void panelRegister(ARegionType *region_type) region_type, "influence", "Influence", NULL, influence_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) { const WeightVGProximityModifierData *wmd = (const WeightVGProximityModifierData *)md; + BLO_write_struct(writer, WeightVGProximityModifierData, wmd); + if (wmd->cmap_curve) { BKE_curvemapping_blend_write(writer, wmd->cmap_curve); } -- cgit v1.2.3