diff options
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, |