[Bf-blender-cvs] [c7c76bd2a31] temp-modifier-rm-cddm: Introdicing EditMeshData

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


Commit: c7c76bd2a31c2d77eb29e5e981b6b67f1a0e5e8d
Author: Sybren A. Stüvel
Date:   Thu Apr 19 11:32:57 2018 +0200
Branches: temp-modifier-rm-cddm
https://developer.blender.org/rBc7c76bd2a31c2d77eb29e5e981b6b67f1a0e5e8d

Introdicing EditMeshData

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

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/editderivedmesh.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/modifier.c
M	source/blender/makesdna/DNA_mesh_types.h

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

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 7d06c6d0e2d..a9def663940 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2508,6 +2508,7 @@ static void editbmesh_calc_modifiers(
 	else {
 		/* this is just a copy of the editmesh, no need to calc normals */
 		*r_final = getEditDerivedBMesh(em, ob, dataMask, deformedVerts);
+
 		deformedVerts = NULL;
 
 		/* In this case, we should never have weight-modifying modifiers in stack... */
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 4281443220d..07f9ddf8bc7 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -56,6 +56,7 @@
 
 #include "DNA_scene_types.h"
 #include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -71,14 +72,7 @@ typedef struct EditDerivedBMesh {
 
 	BMEditMesh *em;
 
-	/** when set, \a vertexNos, polyNos are lazy initialized */
-	const float (*vertexCos)[3];
-
-	/** lazy initialize (when \a vertexCos is set) */
-	float const (*vertexNos)[3];
-	float const (*polyNos)[3];
-	/** also lazy init but dont depend on \a vertexCos */
-	const float (*polyCos)[3];
+	EditMeshData emd;
 } EditDerivedBMesh;
 
 /* -------------------------------------------------------------------- */
@@ -88,7 +82,7 @@ static void emDM_ensurePolyNormals(EditDerivedBMesh *bmdm);
 
 static void emDM_ensureVertNormals(EditDerivedBMesh *bmdm)
 {
-	if (bmdm->vertexCos && (bmdm->vertexNos == NULL)) {
+	if (bmdm->emd.vertexCos && (bmdm->emd.vertexNos == NULL)) {
 
 		BMesh *bm = bmdm->em->bm;
 		const float (*vertexCos)[3], (*polyNos)[3];
@@ -99,19 +93,19 @@ static void emDM_ensureVertNormals(EditDerivedBMesh *bmdm)
 
 		BM_mesh_elem_index_ensure(bm, BM_FACE);
 
-		polyNos = bmdm->polyNos;
-		vertexCos = bmdm->vertexCos;
+		polyNos = bmdm->emd.polyNos;
+		vertexCos = bmdm->emd.vertexCos;
 		vertexNos = MEM_callocN(sizeof(*vertexNos) * bm->totvert, __func__);
 
 		BM_verts_calc_normal_vcos(bm, polyNos, vertexCos, vertexNos);
 
-		bmdm->vertexNos = (const float (*)[3])vertexNos;
+		bmdm->emd.vertexNos = (const float (*)[3])vertexNos;
 	}
 }
 
 static void emDM_ensurePolyNormals(EditDerivedBMesh *bmdm)
 {
-	if (bmdm->vertexCos && (bmdm->polyNos == NULL)) {
+	if (bmdm->emd.vertexCos && (bmdm->emd.polyNos == NULL)) {
 		BMesh *bm = bmdm->em->bm;
 		const float (*vertexCos)[3];
 		float (*polyNos)[3];
@@ -124,7 +118,7 @@ static void emDM_ensurePolyNormals(EditDerivedBMesh *bmdm)
 
 		polyNos = MEM_mallocN(sizeof(*polyNos) * bm->totface, __func__);
 
-		vertexCos = bmdm->vertexCos;
+		vertexCos = bmdm->emd.vertexCos;
 
 		BM_ITER_MESH_INDEX (efa, &fiter, bm, BM_FACES_OF_MESH, i) {
 			BM_elem_index_set(efa, i); /* set_inline */
@@ -132,13 +126,13 @@ static void emDM_ensurePolyNormals(EditDerivedBMesh *bmdm)
 		}
 		bm->elem_index_dirty &= ~BM_FACE;
 
-		bmdm->polyNos = (const float (*)[3])polyNos;
+		bmdm->emd.polyNos = (const float (*)[3])polyNos;
 	}
 }
 
 static void emDM_ensurePolyCenters(EditDerivedBMesh *bmdm)
 {
-	if (bmdm->polyCos == NULL) {
+	if (bmdm->emd.polyCos == NULL) {
 		BMesh *bm = bmdm->em->bm;
 		float (*polyCos)[3];
 
@@ -148,9 +142,9 @@ static void emDM_ensurePolyCenters(EditDerivedBMesh *bmdm)
 
 		polyCos = MEM_mallocN(sizeof(*polyCos) * bm->totface, __func__);
 
-		if (bmdm->vertexCos) {
+		if (bmdm->emd.vertexCos) {
 			const float (*vertexCos)[3];
-			vertexCos = bmdm->vertexCos;
+			vertexCos = bmdm->emd.vertexCos;
 
 			BM_mesh_elem_index_ensure(bm, BM_VERT);
 
@@ -164,7 +158,7 @@ static void emDM_ensurePolyCenters(EditDerivedBMesh *bmdm)
 			}
 		}
 
-		bmdm->polyCos = (const float (*)[3])polyCos;
+		bmdm->emd.polyCos = (const float (*)[3])polyCos;
 	}
 }
 
@@ -200,9 +194,9 @@ static void emDM_calcLoopNormalsSpaceArray(
 	emDM_ensurePolyNormals(bmdm);
 	dm->dirty &= ~DM_DIRTY_NORMALS;
 
-	vertexCos = bmdm->vertexCos;
-	vertexNos = bmdm->vertexNos;
-	polyNos = bmdm->polyNos;
+	vertexCos = bmdm->emd.vertexCos;
+	vertexNos = bmdm->emd.vertexNos;
+	polyNos = bmdm->emd.polyNos;
 
 	loopNos = dm->getLoopDataArray(dm, CD_NORMAL);
 	if (!loopNos) {
@@ -254,7 +248,7 @@ static void emDM_calc_loop_tangents(
 		return;
 	}
 
-	const float (*poly_normals)[3] = bmdm->polyNos;
+	const float (*poly_normals)[3] = bmdm->emd.polyNos;
 	const float (*loop_normals)[3] = CustomData_get_layer(&dm->loopData, CD_NORMAL);
 	const float (*vert_orco)[3] = dm->getVertDataArray(dm, CD_ORCO);  /* can be NULL */
 	BKE_editmesh_loop_tangent_calc(
@@ -318,13 +312,13 @@ static void emDM_foreachMappedVert(
 	BMIter iter;
 	int i;
 
-	if (bmdm->vertexCos) {
-		const float (*vertexCos)[3] = bmdm->vertexCos;
+	if (bmdm->emd.vertexCos) {
+		const float (*vertexCos)[3] = bmdm->emd.vertexCos;
 		const float (*vertexNos)[3];
 
 		if (flag & DM_FOREACH_USE_NORMAL) {
 			emDM_ensureVertNormals(bmdm);
-			vertexNos = bmdm->vertexNos;
+			vertexNos = bmdm->emd.vertexNos;
 		}
 		else {
 			vertexNos = NULL;
@@ -353,14 +347,14 @@ static void emDM_foreachMappedEdge(
 	BMIter iter;
 	int i;
 
-	if (bmdm->vertexCos) {
+	if (bmdm->emd.vertexCos) {
 
 		BM_mesh_elem_index_ensure(bm, BM_VERT);
 
 		BM_ITER_MESH_INDEX (eed, &iter, bm, BM_EDGES_OF_MESH, i) {
 			func(userData, i,
-			     bmdm->vertexCos[BM_elem_index_get(eed->v1)],
-			     bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
+			     bmdm->emd.vertexCos[BM_elem_index_get(eed->v1)],
+			     bmdm->emd.vertexCos[BM_elem_index_get(eed->v2)]);
 		}
 	}
 	else {
@@ -381,15 +375,15 @@ static void emDM_drawMappedEdges(
 	BMIter iter;
 	int i;
 
-	if (bmdm->vertexCos) {
+	if (bmdm->emd.vertexCos) {
 
 		BM_mesh_elem_index_ensure(bm, BM_VERT);
 
 		glBegin(GL_LINES);
 		BM_ITER_MESH_INDEX (eed, &iter, bm, BM_EDGES_OF_MESH, i) {
 			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
-				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
-				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
+				glVertex3fv(bmdm->emd.vertexCos[BM_elem_index_get(eed->v1)]);
+				glVertex3fv(bmdm->emd.vertexCos[BM_elem_index_get(eed->v2)]);
 			}
 		}
 		glEnd();
@@ -425,7 +419,7 @@ static void emDM_drawMappedEdgesInterp(
 	BMIter iter;
 	int i;
 
-	if (bmdm->vertexCos) {
+	if (bmdm->emd.vertexCos) {
 
 		BM_mesh_elem_index_ensure(bm, BM_VERT);
 
@@ -433,9 +427,9 @@ static void emDM_drawMappedEdgesInterp(
 		BM_ITER_MESH_INDEX (eed, &iter, bm, BM_EDGES_OF_MESH, i) {
 			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
 				setDrawInterpOptions(userData, i, 0.0);
-				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
+				glVertex3fv(bmdm->emd.vertexCos[BM_elem_index_get(eed->v1)]);
 				setDrawInterpOptions(userData, i, 1.0);
-				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
+				glVertex3fv(bmdm->emd.vertexCos[BM_elem_index_get(eed->v2)]);
 			}
 		}
 		glEnd();
@@ -469,7 +463,7 @@ static void emDM_foreachMappedLoop(
 	BMFace *efa;
 	BMIter iter;
 
-	const float (*vertexCos)[3] = bmdm->vertexCos;
+	const float (*vertexCos)[3] = bmdm->emd.vertexCos;
 	int f_idx;
 
 	BM_mesh_elem_index_ensure(bm, BM_VERT);
@@ -502,11 +496,11 @@ static void emDM_foreachMappedFaceCenter(
 	int i;
 
 	emDM_ensurePolyCenters(bmdm);
-	polyCos = bmdm->polyCos;  /* always set */
+	polyCos = bmdm->emd.polyCos;  /* always set */
 
 	if (flag & DM_FOREACH_USE_NORMAL) {
 		emDM_ensurePolyNormals(bmdm);
-		polyNos = bmdm->polyNos;  /* maybe NULL */
+		polyNos = bmdm->emd.polyNos;  /* maybe NULL */
 	}
 	else {
 		polyNos = NULL;
@@ -570,11 +564,11 @@ static void emDM_drawMappedFaces(
 		setMaterial = NULL;
 	}
 
-	if (bmdm->vertexCos) {
+	if (bmdm->emd.vertexCos) {
 		short prev_mat_nr = -1;
 
 		/* add direct access */
-		const float (*vertexCos)[3] = bmdm->vertexCos;
+		const float (*vertexCos)[3] = bmdm->emd.vertexCos;
 		const float (*vertexNos)[3];
 		const float (*polyNos)[3];
 
@@ -585,8 +579,8 @@ static void emDM_drawMappedFaces(
 		else {
 			emDM_ensureVertNormals(bmdm);
 			emDM_ensurePolyNormals(bmdm);
-			vertexNos = bmdm->vertexNos;
-			polyNos = bmdm->polyNos;
+			vertexNos = bmdm->emd.vertexNos;
+			polyNos = bmdm->emd.polyNos;
 		}
 
 		BM_mesh_elem_index_ensure(bm, lnors ? BM_VERT | BM_FACE | BM_LOOP : BM_VERT | BM_FACE);
@@ -887,7 +881,7 @@ static void emDM_drawMappedFacesGLSL(
 	BMesh *bm = em->bm;
 	struct BMLoop *(*looptris)[3] = em->looptris;
 	/* add direct access */
-	const float (*vertexCos)[3] = bmdm->vertexCos;
+	const float (*vertexCos)[3] = bmdm->emd.vertexCos;
 	const float (*vertexNos)[3];
 	const float (*polyNos)[3];
 	const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
@@ -906,8 +900,8 @@ static void emDM_drawMappedFacesGLSL(
 
 	emDM_ensureVertNormals(bmdm);
 	emDM_ensurePolyNormals(bmdm);
-	vertexNos = bmdm->vertexNos;
-	polyNos = bmdm->polyNos;
+	vertexNos = bmdm->emd.vertexNos;
+	polyNos = bmdm->emd.polyNos;
 
 	BM_mesh_elem_index_ensure(bm, (BM_VERT | BM_FACE) | (lnors ? BM_LOOP : 0));
 
@@ -1002,7 +996,7 @@ static void emDM_drawMappedFacesMat(
 	BMEditMesh *em = bmdm->em;
 	BMesh *bm = em->bm;
 	struct BMLoop *(*looptris)[3] = em->looptris;
-	const float (*vertexCos)[3] = bmdm->vertexCos;
+	const float (*vertexCos)[3] = bmdm->emd.vertexCos;
 	const float (*vertexNos)[3];
 	const float (*polyNos)[3];
 	const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
@@ -1016,8 +1010,8 @@ static void emDM_drawMappedFacesMat(
 	emDM_ensureVertNormals(bmdm);
 	emDM_ensurePolyNormals(bmdm);
 
-	vertexNos = bmdm->vertexNos;
-	polyNos = bmdm->polyNos;
+	vertexNos = bmdm->emd.vertexNos;
+	polyNos = bmdm->emd.polyNos;
 
 	BM_mesh_elem_index_ensure(bm, (BM_VERT | BM_FACE) | (lnors ? BM_LOOP : 0));
 
@@ -1100,9 +1094,9 @@ static void emDM_getMinMax(DerivedMesh *dm, float r_min[3], float r_max[3])
 	int i;
 
 	if (bm->totvert) {
-		if (bmdm->vertexCos) {
+		if (bmdm->emd.vertexCos) {
 			BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
-				minmax_v3v3_v3(r_min, r_max, bmdm->vertexCos[i]);
+				minmax_v3v3_v3(r_min, r_max, bmdm->emd.vertexCos[i]);
 			}
 		}
 		else {
@@ -1182,8 +1176,8 @@ stati

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list