[1f8720cf050] blender2.8: Modifiers: ported Lattice modifier DerivedMesh → Mesh

Sybren A. Stüvel noreply at git.blender.org
Wed May 2 13:44:54 CEST 2018


Commit: 1f8720cf05035f9c6fa0bc54376203b5395fd34e
Author: Sybren A. Stüvel
Date:   Wed May 2 13:42:04 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB1f8720cf05035f9c6fa0bc54376203b5395fd34e

Modifiers: ported Lattice modifier DerivedMesh → Mesh

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

M	source/blender/blenkernel/BKE_lattice.h
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/modifiers/intern/MOD_lattice.c

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

diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index 37f838a543c..6e9f83cf8a9 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -71,7 +71,7 @@ void curve_deform_vector(struct Object *cuOb, struct Object *target,
                          float orco[3], float vec[3], float mat[3][3], int no_rot_axis);
 
 void lattice_deform_verts(struct Object *laOb, struct Object *target,
-                          struct DerivedMesh *dm, float (*vertexCos)[3],
+                          struct Mesh *mesh, float (*vertexCos)[3],
                           int numVerts, const char *vgroup, float influence);
 void armature_deform_verts(struct Object *armOb, struct Object *target,
                            const struct Mesh *mesh, float (*vertexCos)[3],
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 7ec7da74e55..6039826909b 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -849,7 +849,7 @@ void curve_deform_vector(Object *cuOb, Object *target,
 
 }
 
-void lattice_deform_verts(Object *laOb, Object *target, DerivedMesh *dm,
+void lattice_deform_verts(Object *laOb, Object *target, Mesh *mesh,
                           float (*vertexCos)[3], int numVerts, const char *vgroup, float fac)
 {
 	LatticeDeformData *lattice_deform_data;
@@ -867,8 +867,8 @@ void lattice_deform_verts(Object *laOb, Object *target, DerivedMesh *dm,
 	 */
 	if (target && target->type == OB_MESH) {
 		/* if there's derived data without deformverts, don't use vgroups */
-		if (dm) {
-			use_vgroups = (dm->getVertDataArray(dm, CD_MDEFORMVERT) != NULL);
+		if (mesh) {
+			use_vgroups = (mesh->dvert != NULL);
 		}
 		else {
 			Mesh *me = target->data;
@@ -884,11 +884,12 @@ void lattice_deform_verts(Object *laOb, Object *target, DerivedMesh *dm,
 		const int defgrp_index = defgroup_name_index(target, vgroup);
 		float weight;
 
-		if (defgrp_index >= 0 && (me->dvert || dm)) {
+		if (defgrp_index >= 0 && (me->dvert || mesh)) {
 			MDeformVert *dvert = me->dvert;
 			
 			for (a = 0; a < numVerts; a++, dvert++) {
-				if (dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+				/* TODO(sybren): take out of the loop and move to above assignment of dvert */
+				if (mesh) dvert = mesh->dvert + a;
 
 				weight = defvert_find_weight(dvert, defgrp_index);
 
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index ac1107395b0..9688b80113b 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -39,11 +39,14 @@
 
 #include "BLI_utildefines.h"
 
-#include "BKE_cdderivedmesh.h"
+#include "BKE_editmesh.h"
 #include "BKE_lattice.h"
 #include "BKE_library_query.h"
+#include "BKE_mesh.h"
 #include "BKE_modifier.h"
 
+#include "MEM_guardedalloc.h"
+
 #include "MOD_util.h"
 
 static void initData(ModifierData *md)
@@ -100,7 +103,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
 }
 
 static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
-                        DerivedMesh *derivedData,
+                        struct Mesh *mesh,
                         float (*vertexCos)[3],
                         int numVerts)
 {
@@ -108,22 +111,28 @@ static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
 
 
 	modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
-	
-	lattice_deform_verts(lmd->object, ctx->object, derivedData,
+
+	lattice_deform_verts(lmd->object, ctx->object, mesh,
 	                     vertexCos, numVerts, lmd->name, lmd->strength);
 }
 
 static void deformVertsEM(
         ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
-        DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+        struct Mesh *mesh, float (*vertexCos)[3], int numVerts)
 {
-	DerivedMesh *dm = derivedData;
+	struct Mesh *mesh_src = mesh;
 
-	if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
+	if (!mesh) {
+		struct BMeshToMeshParams params = {0};
+		mesh_src = BKE_bmesh_to_mesh(em->bm, &params);
+	}
 
-	deformVerts(md, ctx, dm, vertexCos, numVerts);
+	deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
 
-	if (!derivedData) dm->release(dm);
+	if (!mesh) {
+		BKE_mesh_free(mesh_src);
+		MEM_freeN(mesh_src);
+	}
 }
 
 
@@ -137,16 +146,16 @@ ModifierTypeInfo modifierType_Lattice = {
 	                        eModifierTypeFlag_SupportsEditmode,
 	/* copyData */          copyData,
 
-	/* deformVerts_DM */    deformVerts,
+	/* deformVerts_DM */    NULL,
 	/* deformMatrices_DM */ NULL,
-	/* deformVertsEM_DM */  deformVertsEM,
+	/* deformVertsEM_DM */  NULL,
 	/* deformMatricesEM_DM*/NULL,
 	/* applyModifier_DM */  NULL,
 	/* applyModifierEM_DM */NULL,
 
-	/* deformVerts */       NULL,
+	/* deformVerts */       deformVerts,
 	/* deformMatrices */    NULL,
-	/* deformVertsEM */     NULL,
+	/* deformVertsEM */     deformVertsEM,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     NULL,
 	/* applyModifierEM */   NULL,



More information about the Bf-blender-cvs mailing list