[6e56d949136] temp-modifier-rm-cddm: Modifiers: simple deform modifier object mode, DerivedMesh → Mesh

Sybren A. Stüvel noreply at git.blender.org
Thu Apr 19 17:23:52 CEST 2018


Commit: 6e56d9491362e6c0650d30495d73be1576786dfd
Author: Sybren A. Stüvel
Date:   Thu Apr 19 11:03:58 2018 +0200
Branches: temp-modifier-rm-cddm
https://developer.blender.org/rB6e56d9491362e6c0650d30495d73be1576786dfd

Modifiers: simple deform modifier object mode, DerivedMesh → Mesh

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

M	source/blender/modifiers/intern/MOD_simpledeform.c
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/modifiers/intern/MOD_util.h

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

diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index e6fbf6fd1b2..959b4608554 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -39,6 +39,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_cdderivedmesh.h"
+#include "BKE_mesh.h"
 #include "BKE_library_query.h"
 #include "BKE_modifier.h"
 #include "BKE_deform.h"
@@ -180,7 +181,7 @@ static void simpleDeform_bend(const float factor, const int axis, const float dc
 
 
 /* simple deform modifier */
-static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct DerivedMesh *dm,
+static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct Mesh *mesh,
                                     float (*vertexCos)[3], int numVerts)
 {
 	const float base_limit[2] = {0.0f, 0.0f};
@@ -281,7 +282,7 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object
 		}
 	}
 
-	modifier_get_vgroup(ob, dm, smd->vgroup_name, &dvert, &vgroup);
+	modifier_get_vgroup_mesh(ob, mesh, smd->vgroup_name, &dvert, &vgroup);
 	const bool invert_vgroup = (smd->flag & MOD_SIMPLEDEFORM_FLAG_INVERT_VGROUP) != 0;
 	const uint *axis_map = axis_map_table[(smd->mode != MOD_SIMPLEDEFORM_MODE_BEND) ? deform_axis : 2];
 
@@ -384,43 +385,37 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
 }
 
 static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
-                        Object *ob, DerivedMesh *derivedData,
+                        Object *ob, struct Mesh *mesh,
                         float (*vertexCos)[3],
                         int numVerts,
                         ModifierApplyFlag UNUSED(flag))
 {
-	DerivedMesh *dm = derivedData;
-	CustomDataMask dataMask = requiredDataMask(ob, md);
-
-	/* we implement requiredDataMask but thats not really useful since
-	 * mesh_calc_modifiers pass a NULL derivedData */
-	if (dataMask)
-		dm = get_dm(ob, NULL, dm, NULL, false, false);
-
-	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
-
-	if (dm != derivedData)
-		dm->release(dm);
+	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, mesh, vertexCos, numVerts);
 }
 
 static void deformVertsEM(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
                           Object *ob, struct BMEditMesh *editData,
-                          DerivedMesh *derivedData,
+                          struct Mesh *mesh,
                           float (*vertexCos)[3],
                           int numVerts)
 {
-	DerivedMesh *dm = derivedData;
-	CustomDataMask dataMask = requiredDataMask(ob, md);
+//	in caller: BLI_assert(mesh->edit_coords == NULL) to avoid double stuff
+//	DerivedMesh *dm = derivedData;
+//	CustomDataMask dataMask = requiredDataMask(ob, md);
 
 	/* we implement requiredDataMask but thats not really useful since
 	 * mesh_calc_modifiers pass a NULL derivedData */
-	if (dataMask)
-		dm = get_dm(ob, editData, dm, NULL, false, false);
+//	if (dataMask)
+//		dm = get_dm(ob, editData, dm, NULL, false, false);
+
+//	CDDM_from_editbmesh(em, false, false);
+
+
 
-	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
+	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, mesh, vertexCos, numVerts);
 
-	if (dm != derivedData)
-		dm->release(dm);
+//	if (dm != derivedData)
+//		dm->release(dm);
 }
 
 
@@ -438,16 +433,16 @@ ModifierTypeInfo modifierType_SimpleDeform = {
 
 	/* 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,
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 5b19bcf4817..79992e4868f 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -34,9 +34,11 @@
 
 #include "DNA_image_types.h"
 #include "DNA_meshdata_types.h"
+#include "DNA_mesh_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_scene_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_math_vector.h"
@@ -229,6 +231,20 @@ void modifier_get_vgroup(Object *ob, DerivedMesh *dm, const char *name, MDeformV
 	}
 }
 
+/* TODO(sybren): replace the above function with this one, once we got rid of DerivedMesh for modifiers. */
+void modifier_get_vgroup_mesh(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
+{
+	*defgrp_index = defgroup_name_index(ob, name);
+	*dvert = NULL;
+
+	if (*defgrp_index != -1) {
+		if (ob->type == OB_LATTICE)
+			*dvert = BKE_lattice_deform_verts_get(ob);
+		else if (mesh)
+			*dvert = mesh->dvert;
+	}
+}
+
 
 /* only called by BKE_modifier.h/modifier.c */
 void modifier_type_init(ModifierTypeInfo *types[])
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 095d7c278df..b032770c4ca 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -51,5 +51,7 @@ struct DerivedMesh *get_dm(struct Object *ob, struct BMEditMesh *em, struct Deri
 struct DerivedMesh *get_dm_for_modifier(struct Object *ob, ModifierApplyFlag flag);
 void modifier_get_vgroup(struct Object *ob, struct DerivedMesh *dm,
                          const char *name, struct MDeformVert **dvert, int *defgrp_index);
+void modifier_get_vgroup_mesh(struct Object *ob, struct Mesh *mesh,
+                              const char *name, MDeformVert **dvert, int *defgrp_index);
 
 #endif /* __MOD_UTIL_H__ */



More information about the Bf-blender-cvs mailing list