Commit: e0a41fd0ced5182bb212caf356357b75adf38336
Author: Christian Hubert
Date:   Fri May 11 10:55:26 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBe0a41fd0ced5182bb212caf356357b75adf38336

Modifiers: ported Decimate DerivedMesh → Mesh

Two things to indicate (which als apply before the DM → M port):

- Face count in the UI is not updated and stays at 0
- When planar mode is used, the result is inverted (mirrored along X)
  compared to 2.79

Reviewers: sybren

Differential Revision: https://developer.blender.org/D3303

===================================================================

M       source/blender/modifiers/intern/MOD_decimate.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_decimate.c 
b/source/blender/modifiers/intern/MOD_decimate.c
index 3a7ccc44f74..b004da7df6a 100644
--- a/source/blender/modifiers/intern/MOD_decimate.c
+++ b/source/blender/modifiers/intern/MOD_decimate.c
@@ -33,15 +33,17 @@
  */
 
 #include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
 
 #include "MEM_guardedalloc.h"
 
-#include "BKE_modifier.h"
 #include "BKE_deform.h"
-#include "BKE_cdderivedmesh.h"
+#include "BKE_mesh.h"
+#include "BKE_library.h"
 
 #include "bmesh.h"
 #include "bmesh_tools.h"
@@ -77,11 +79,11 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), 
ModifierData *md)
        return dataMask;
 }
 
-static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext 
*ctx,
-                                  DerivedMesh *derivedData)
+static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
+                           Mesh *meshData)
 {
        DecimateModifierData *dmd = (DecimateModifierData *) md;
-       DerivedMesh *dm = derivedData, *result = NULL;
+       Mesh *mesh = meshData, *result = NULL;
        BMesh *bm;
        bool calc_face_normal;
        float *vweights = NULL;
@@ -91,34 +93,34 @@ static DerivedMesh *applyModifier(ModifierData *md, const 
ModifierEvalContext *c
 #endif
 
        /* set up front so we dont show invalid info in the UI */
-       dmd->face_count = dm->getNumPolys(dm);
+       dmd->face_count = mesh->totpoly;
 
        switch (dmd->mode) {
                case MOD_DECIM_MODE_COLLAPSE:
                        if (dmd->percent == 1.0f) {
-                               return dm;
+                               return mesh;
                        }
                        calc_face_normal = true;
                        break;
                case MOD_DECIM_MODE_UNSUBDIV:
                        if (dmd->iter == 0) {
-                               return dm;
+                               return mesh;
                        }
                        calc_face_normal = false;
                        break;
                case MOD_DECIM_MODE_DISSOLVE:
                        if (dmd->angle == 0.0f) {
-                               return dm;
+                               return mesh;
                        }
                        calc_face_normal = true;
                        break;
                default:
-                       return dm;
+                       return mesh;
        }
 
        if (dmd->face_count <= 3) {
                modifier_setError(md, "Modifier requires more than 3 input 
faces");
-               return dm;
+               return mesh;
        }
 
        if (dmd->mode == MOD_DECIM_MODE_COLLAPSE) {
@@ -126,10 +128,10 @@ static DerivedMesh *applyModifier(ModifierData *md, const 
ModifierEvalContext *c
                        MDeformVert *dvert;
                        int defgrp_index;
 
-                       modifier_get_vgroup(ctx->object, dm, dmd->defgrp_name, 
&dvert, &defgrp_index);
+                       modifier_get_vgroup_mesh(ctx->object, mesh, 
dmd->defgrp_name, &dvert, &defgrp_index);
 
                        if (dvert) {
-                               const unsigned int vert_tot = 
dm->getNumVerts(dm);
+                               const unsigned int vert_tot = mesh->totvert;
                                unsigned int i;
 
                                vweights = MEM_malloc_arrayN(vert_tot, 
sizeof(float), __func__);
@@ -148,7 +150,10 @@ static DerivedMesh *applyModifier(ModifierData *md, const 
ModifierEvalContext *c
                }
        }
 
-       bm = DM_to_bmesh(dm, calc_face_normal);
+       bm = BKE_mesh_to_bmesh_ex(
+                mesh,
+                &((struct BMeshCreateParams){0}),
+                &((struct BMeshFromMeshParams){.calc_face_normal = 
calc_face_normal,}));
 
        switch (dmd->mode) {
                case MOD_DECIM_MODE_COLLAPSE:
@@ -180,7 +185,7 @@ static DerivedMesh *applyModifier(ModifierData *md, const 
ModifierEvalContext *c
 
        /* update for display only */
        dmd->face_count = bm->totface;
-       result = CDDM_from_bmesh(bm, false);
+       result = BKE_bmesh_to_mesh_nomain(bm, &((struct BMeshToMeshParams){0}));
        BLI_assert(bm->vtoolflagpool == NULL &&
                   bm->etoolflagpool == NULL &&
                   bm->ftoolflagpool == NULL);  /* make sure we never alloc'd 
these */
@@ -194,7 +199,7 @@ static DerivedMesh *applyModifier(ModifierData *md, const 
ModifierEvalContext *c
        TIMEIT_END(decim);
 #endif
 
-       result->dirty = DM_DIRTY_NORMALS;
+       result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
 
        return result;
 }
@@ -213,14 +218,14 @@ ModifierTypeInfo modifierType_Decimate = {
        /* deformMatrices_DM */ NULL,
        /* deformVertsEM_DM */  NULL,
        /* deformMatricesEM_DM*/NULL,
-       /* applyModifier_DM */  applyModifier,
+       /* applyModifier_DM */  NULL,
        /* applyModifierEM_DM */NULL,
 
        /* deformVerts */       NULL,
        /* deformMatrices */    NULL,
        /* deformVertsEM */     NULL,
        /* deformMatricesEM */  NULL,
-       /* applyModifier */     NULL,
+       /* applyModifier */     applyModifier,
        /* applyModifierEM */   NULL,
 
        /* initData */          initData,

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to