[Bf-blender-cvs] [1b910082a0e] blender2.8: Edit Mesh: replace DerivedMesh w/ Mesh

Campbell Barton noreply at git.blender.org
Tue Oct 9 08:51:11 CEST 2018


Commit: 1b910082a0effdeb06653203b1d773094a2068e5
Author: Campbell Barton
Date:   Tue Oct 9 16:52:46 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB1b910082a0effdeb06653203b1d773094a2068e5

Edit Mesh: replace DerivedMesh w/ Mesh

DerivedMesh is now removed from edit-mesh modifier evaluation.

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

M	source/blender/blenkernel/BKE_DerivedMesh.h
M	source/blender/blenkernel/BKE_cdderivedmesh.h
M	source/blender/blenkernel/BKE_editmesh.h
M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/crazyspace.c
M	source/blender/blenkernel/intern/editderivedmesh.c
M	source/blender/blenkernel/intern/editmesh.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_dupli.c
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/editors/util/ed_transverts.c
M	source/blender/modifiers/intern/MOD_meshdeform.c

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

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 3db032da1b1..db918bb0fbd 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -514,7 +514,7 @@ void DM_interp_poly_data(
  * In use now by vertex/weight paint and particles */
 DMCoNo *mesh_get_mapped_verts_nors(struct Scene *scene, struct Object *ob);
 #endif
-void mesh_get_mapped_verts_coords(DerivedMesh *dm, float (*r_cos)[3], const int totcos);
+void mesh_get_mapped_verts_coords(struct Mesh *me_eval, float (*r_cos)[3], const int totcos);
 
 /* */
 
@@ -537,15 +537,13 @@ DerivedMesh *mesh_create_derived_no_deform_render(
         struct Object *ob, float (*vertCos)[3],
         CustomDataMask dataMask);
 
-DerivedMesh *editbmesh_get_derived_cage(
+struct Mesh *editbmesh_get_eval_cage(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *,
         struct BMEditMesh *em, CustomDataMask dataMask);
-DerivedMesh *editbmesh_get_derived_cage_and_final(
+struct Mesh *editbmesh_get_eval_cage_and_final(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *,
         struct BMEditMesh *em, CustomDataMask dataMask,
-        DerivedMesh **r_final);
-
-DerivedMesh *object_get_derived_final(struct Object *ob, const bool for_render);
+        struct Mesh **r_final);
 
 float (*editbmesh_get_vertex_cos(struct BMEditMesh *em, int *r_numVerts))[3];
 bool editbmesh_modifier_is_enabled(struct Scene *scene, struct ModifierData *md, bool has_prev_mesh);
diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index b31a3548a1e..6d96bd6ab7c 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -178,6 +178,4 @@ void CDDM_set_mface(struct DerivedMesh *dm, struct MFace *mface);
 void CDDM_set_mloop(struct DerivedMesh *dm, struct MLoop *mloop);
 void CDDM_set_mpoly(struct DerivedMesh *dm, struct MPoly *mpoly);
 
-void CDDM_to_mesh__fast_borrow(struct DerivedMesh *dm, struct Mesh *me, const struct Mesh *me_reference);
-
 #endif
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h
index 65c2caa4d78..de4efaf37b0 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -64,8 +64,9 @@ typedef struct BMEditMesh {
 	struct BMLoop *(*looptris)[3];
 	int tottri;
 
+	struct Mesh *mesh_eval_final, *mesh_eval_cage;
+
 	/*derivedmesh stuff*/
-	struct DerivedMesh *derivedFinal, *derivedCage;
 	CustomDataMask lastDataMask;
 	unsigned char (*derivedVertColor)[4];
 	int derivedVertColorLen;
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 4fb99008e8c..444dd3c0db3 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -60,6 +60,7 @@
 #include "BKE_material.h"
 #include "BKE_modifier.h"
 #include "BKE_mesh.h"
+#include "BKE_mesh_iterators.h"
 #include "BKE_mesh_mapping.h"
 #include "BKE_mesh_runtime.h"
 #include "BKE_mesh_tangent.h"
@@ -2307,24 +2308,16 @@ static void editbmesh_build_data(
 	        depsgraph, scene, obedit, em, dataMask,
 	        &me_cage, &me_final);
 
-	/* TODO(campbell): remove derived mesh conversion. */
-	em->derivedFinal = CDDM_from_mesh_ex(me_final, CD_DUPLICATE, CD_MASK_MESH);
-	BKE_id_free(NULL, me_final);
-	if (me_cage != me_final) {
-		em->derivedCage = CDDM_from_mesh_ex(me_cage, CD_DUPLICATE, CD_MASK_MESH);
-		BKE_id_free(NULL, me_cage);
-	}
-	else {
-		em->derivedCage = em->derivedFinal;
-	}
+	em->mesh_eval_final = me_final;
+	em->mesh_eval_cage = me_cage;
 
+#if 0
 	DM_set_object_boundbox(obedit, em->derivedFinal);
+#endif
 
 	em->lastDataMask = dataMask;
-	em->derivedFinal->needsFree = 0;
-	em->derivedCage->needsFree = 0;
 
-	BLI_assert(!(em->derivedFinal->dirty & DM_DIRTY_NORMALS));
+	BLI_assert(!(em->mesh_eval_final->runtime.cd_dirty_vert & DM_DIRTY_NORMALS));
 }
 
 static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob, bool *r_need_mapping)
@@ -2559,29 +2552,29 @@ DerivedMesh *mesh_create_derived_no_deform(
 
 /***/
 
-DerivedMesh *editbmesh_get_derived_cage_and_final(
+Mesh *editbmesh_get_eval_cage_and_final(
         struct Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *em,
         CustomDataMask dataMask,
         /* return args */
-        DerivedMesh **r_final)
+        Mesh **r_final)
 {
 	/* if there's no derived mesh or the last data mask used doesn't include
 	 * the data we need, rebuild the derived mesh
 	 */
 	dataMask |= object_get_datamask(depsgraph, obedit, NULL);
 
-	if (!em->derivedCage ||
+	if (!em->mesh_eval_cage ||
 	    (em->lastDataMask & dataMask) != dataMask)
 	{
 		editbmesh_build_data(depsgraph, scene, obedit, em, dataMask);
 	}
 
-	*r_final = em->derivedFinal;
-	if (em->derivedFinal) { BLI_assert(!(em->derivedFinal->dirty & DM_DIRTY_NORMALS)); }
-	return em->derivedCage;
+	*r_final = em->mesh_eval_final;
+	if (em->mesh_eval_final) { BLI_assert(!(em->mesh_eval_final->runtime.cd_dirty_vert & DM_DIRTY_NORMALS)); }
+	return em->mesh_eval_cage;
 }
 
-DerivedMesh *editbmesh_get_derived_cage(
+Mesh *editbmesh_get_eval_cage(
         struct Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *em,
         CustomDataMask dataMask)
 {
@@ -2590,40 +2583,17 @@ DerivedMesh *editbmesh_get_derived_cage(
 	 */
 	dataMask |= object_get_datamask(depsgraph, obedit, NULL);
 
-	if (!em->derivedCage ||
+	if (!em->mesh_eval_cage ||
 	    (em->lastDataMask & dataMask) != dataMask)
 	{
 		editbmesh_build_data(depsgraph, scene, obedit, em, dataMask);
 	}
 
-	return em->derivedCage;
+	return em->mesh_eval_cage;
 }
 
 /***/
 
-/* get derived mesh from an object, using editbmesh if available. */
-DerivedMesh *object_get_derived_final(Object *ob, const bool for_render)
-{
-	if (for_render) {
-		/* TODO(sergey): use proper derived render here in the future. */
-		return ob->derivedFinal;
-	}
-
-	/* only return the editmesh if its from this object because
-	 * we don't a mesh from another object's modifier stack: T43122 */
-	if (ob->type == OB_MESH) {
-		Mesh *me = ob->data;
-		BMEditMesh *em = me->edit_btmesh;
-		if (em && (em->ob == ob)) {
-			DerivedMesh *dm = em->derivedFinal;
-			return dm;
-		}
-	}
-
-	return ob->derivedFinal;
-}
-
-
 /* UNUSED */
 #if 0
 
@@ -2705,20 +2675,20 @@ static void make_vertexcos__mapFunc(
 	}
 }
 
-void mesh_get_mapped_verts_coords(DerivedMesh *dm, float (*r_cos)[3], const int totcos)
+void mesh_get_mapped_verts_coords(Mesh *me_eval, float (*r_cos)[3], const int totcos)
 {
-	if (dm->foreachMappedVert) {
+	if (me_eval->runtime.deformed_only == false) {
 		MappedUserData userData;
 		memset(r_cos, 0, sizeof(*r_cos) * totcos);
 		userData.vertexcos = r_cos;
 		userData.vertex_visit = BLI_BITMAP_NEW(totcos, "vertexcos flags");
-		dm->foreachMappedVert(dm, make_vertexcos__mapFunc, &userData, DM_FOREACH_NOP);
+		BKE_mesh_foreach_mapped_vert(me_eval, make_vertexcos__mapFunc, &userData, MESH_FOREACH_NOP);
 		MEM_freeN(userData.vertex_visit);
 	}
 	else {
-		int i;
-		for (i = 0; i < totcos; i++) {
-			dm->getVertCo(dm, i, r_cos[i]);
+		MVert *mv = me_eval->mvert;
+		for (int i = 0; i < totcos; i++, mv++) {
+			copy_v3_v3(r_cos[i], mv->co);
 		}
 	}
 }
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 83424da3a3d..9043460562d 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -2258,29 +2258,3 @@ void CDDM_set_mpoly(DerivedMesh *dm, MPoly *mpoly)
 
 	cddm->mpoly = mpoly;
 }
-
-/** Hack to fill in an empty (non library mesh struct) with CDDM values. */
-void CDDM_to_mesh__fast_borrow(DerivedMesh *dm, Mesh *me, const Mesh *me_reference)
-{
-	CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-	me->totvert = cddm->dm.numVertData;
-	me->totedge = cddm->dm.numEdgeData;
-	me->totloop = cddm->dm.numLoopData;
-	me->totpoly = cddm->dm.numPolyData;
-
-	me->mvert = cddm->mvert;
-	me->medge = cddm->medge;
-	me->mface = cddm->mface;
-	me->mloop = cddm->mloop;
-	me->mpoly = cddm->mpoly;
-
-	me->vdata = dm->vertData;
-	me->edata = dm->edgeData;
-	me->ldata = dm->loopData;
-	me->pdata = dm->polyData;
-
-	if (me_reference) {
-		me->mat = me_reference->mat;
-		me->totcol = me_reference->totcol;
-	}
-}
diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c
index 55a62e4981f..bfb6fbd897c 100644
--- a/source/blender/blenkernel/intern/crazyspace.c
+++ b/source/blender/blenkernel/intern/crazyspace.c
@@ -104,7 +104,7 @@ float (*BKE_crazyspace_get_mapped_editverts(
            struct Depsgraph *depsgraph, Scene *scene, Object *obedit))[3]
 {
 	Mesh *me = obedit->data;
-	DerivedMesh *dm;
+	Mesh *me_eval;
 	float (*vertexcos)[3];
 	int nverts = me->edit_btmesh->bm->totvert;
 
@@ -117,11 +117,9 @@ float (*BKE_crazyspace_get_mapped_editverts(
 	/* now get the cage */
 	vertexcos = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map");
 
-	dm = editbmesh_get_derived_cage(depsgraph, scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH);
-
-	mesh_get_mapped_verts_coords(dm, vertexcos, nverts);
+	me_eval = editbmesh_get_eval_cage(depsgraph, scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH);
 
-	dm->release(dm);
+	mesh_get_mapped_verts_coords(me_eval, vertexcos, nverts);
 
 	/* set back the flag, no new cage needs to be built, transform does it */
 	modifiers_disable_subsurf_temporary(obedit);
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 5ca8bcfd74d..e6873e66c91 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -51,6 +51,7 @@
 #include "BKE_cdderivedmesh.h"
 #include "BKE_deform.h"
 #include "BKE_mesh.h"
+#include "BKE_mesh_iterators.h"
 #include "BKE_editmesh.h"
 #include "BKE_editmesh_bvh.h"
 #include "BKE_editmesh_cache.h"
@@ -528,12 +529,12 @@ static void cage_mapped_verts_callback(
 
 float (*BKE_editmesh_vertexCos_get(struct Depsgraph *depsgraph, BMEd

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list