diff options
author | Jacques Lucke <mail@jlucke.com> | 2018-09-20 13:04:17 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2018-09-20 13:04:17 +0300 |
commit | b5dbe43d3ebfdc238d56bbb71ec17735cebdc951 (patch) | |
tree | 09e09ea4d5d78887e048b214f7ca9a0011641e5d /source/blender/modifiers/intern/MOD_subsurf.c | |
parent | add8e1c018bb5342cdad14a7d143d2b38ffa5bf5 (diff) |
Cleanup: move DerivedMesh wrappers for modifiers further down the hierarchy
The main goal of this patch is to cleanup the interface of every modifier. More specifically the interface of modifiers should be DerivedMesh-free.
Internally some modifiers still use DerivedMesh. However I think it is better when the wrappers are in the modifiers so that higher level functions can use the simplified interface.
This patch removes the applyModifier_DM and applyModifierEM_DM functions. In a previous patch (rB3614d9d) the other functions that used DerivedMesh have been removed.
Reviewers: brecht
Diffstat (limited to 'source/blender/modifiers/intern/MOD_subsurf.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_subsurf.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c index deccec05190..d7c8d0c7bb6 100644 --- a/source/blender/modifiers/intern/MOD_subsurf.c +++ b/source/blender/modifiers/intern/MOD_subsurf.c @@ -99,7 +99,7 @@ static bool isDisabled(const Scene *scene, ModifierData *md, bool useRenderParam return get_render_subsurf_level(&scene->r, levels, useRenderParams != 0) == 0; } -static DerivedMesh *applyModifier( +static DerivedMesh *applyModifier_DM( ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData) { @@ -133,7 +133,9 @@ static DerivedMesh *applyModifier( return result; } -static DerivedMesh *applyModifierEM( +applyModifier_DM_wrapper(applyModifier, applyModifier_DM) + +static DerivedMesh *applyModifierEM_DM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *UNUSED(editData), DerivedMesh *derivedData) @@ -148,6 +150,20 @@ static DerivedMesh *applyModifierEM( return result; } +static Mesh *applyModifierEM( + struct ModifierData *md, const struct ModifierEvalContext *ctx, + struct BMEditMesh *editData, + struct Mesh *mesh) +{ + DerivedMesh *dm = CDDM_from_mesh_ex(mesh, CD_REFERENCE, CD_MASK_EVERYTHING); + DerivedMesh *ndm = applyModifierEM_DM(md, ctx, editData, dm); + if (ndm != dm) { + dm->release(dm); + } + DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true); + return mesh; +} + #ifdef WITH_OPENSUBDIV_MODIFIER static int subdiv_levels_for_modifier_get(const SubsurfModifierData *smd, const ModifierEvalContext *ctx) @@ -275,8 +291,8 @@ ModifierTypeInfo modifierType_Subsurf = { /* deformMatrices_DM */ NULL, /* deformVertsEM_DM */ NULL, /* deformMatricesEM_DM*/NULL, - /* applyModifier_DM */ applyModifier, - /* applyModifierEM_DM */applyModifierEM, + /* applyModifier_DM */ NULL, + /* applyModifierEM_DM */NULL, /* deformVerts */ NULL, /* deformMatrices */ NULL, @@ -285,9 +301,9 @@ ModifierTypeInfo modifierType_Subsurf = { #ifdef WITH_OPENSUBDIV_MODIFIER /* applyModifier */ applyModifier_subdiv, #else - /* applyModifier */ NULL, + /* applyModifier */ applyModifier, #endif - /* applyModifierEM */ NULL, + /* applyModifierEM */ applyModifierEM, /* initData */ initData, /* requiredDataMask */ NULL, |