[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57146] trunk/blender/source/blender: remove CD_MASK_NORMAL from CD_MASK_DERIVEDMESH, bmesh merge included this but its not needed.

Campbell Barton ideasman42 at gmail.com
Thu May 30 20:09:19 CEST 2013


Revision: 57146
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57146
Author:   campbellbarton
Date:     2013-05-30 18:09:19 +0000 (Thu, 30 May 2013)
Log Message:
-----------
remove CD_MASK_NORMAL from CD_MASK_DERIVEDMESH, bmesh merge included this but its not needed.

Now add asserts to make sure this layer is only added once the modifier stack has been calculated.
this saves normal layer being calculated whenver vertex normals need updating.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -843,6 +843,8 @@
         ModifierApplyFlag flag)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+	BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+
 	if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
 		DM_ensure_normals(dm);
 	}
@@ -856,6 +858,8 @@
         ModifierApplyFlag flag)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+	BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+
 	if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
 		DM_ensure_normals(dm);
 	}
@@ -869,6 +873,8 @@
         ModifierApplyFlag flag)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+	BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+
 	if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
 		DM_ensure_normals(dm);
 	}
@@ -881,6 +887,8 @@
         float (*vertexCos)[3], int numVerts)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+	BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+
 	if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
 		DM_ensure_normals(dm);
 	}
@@ -1437,6 +1445,9 @@
  */
 static void dm_ensure_display_normals(DerivedMesh *dm)
 {
+	/* this is for final output only, up until now this layer should be missing */
+	BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+
 	if ((dm->type == DM_TYPE_CDDM) &&
 	    ((dm->dirty & DM_DIRTY_NORMALS) || CustomData_has_layer(&dm->faceData, CD_NORMAL) == FALSE))
 	{

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -1712,7 +1712,7 @@
 	dm->getEdgeDataArray = DM_get_edge_data_layer;
 	dm->getTessFaceDataArray = DM_get_tessface_data_layer;
 
-	dm->calcNormals = CDDM_calc_normals_mapping;
+	dm->calcNormals = CDDM_calc_normals;
 	dm->recalcTessellation = CDDM_recalc_tessellation;
 
 	dm->getVertCos = cdDM_getVertCos;
@@ -2264,7 +2264,6 @@
 	cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
 }
 
-
 void CDDM_calc_normals_mapping(DerivedMesh *dm)
 {
 	/* use this to skip calculating normals on original vert's, this may need to be changed */
@@ -2273,6 +2272,7 @@
 	CDDM_calc_normals_mapping_ex(dm, only_face_normals);
 }
 
+#if 0
 /* bmesh note: this matches what we have in trunk */
 void CDDM_calc_normals(DerivedMesh *dm)
 {
@@ -2295,7 +2295,24 @@
 
 	cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
 }
+#else
 
+/* poly normal layer is now only for final display */
+void CDDM_calc_normals(DerivedMesh *dm)
+{
+	CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
+
+	/* we don't want to overwrite any referenced layers */
+	cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
+
+	BKE_mesh_calc_normals_poly(cddm->mvert, dm->numVertData, CDDM_get_loops(dm), CDDM_get_polys(dm),
+	                           dm->numLoopData, dm->numPolyData, NULL);
+
+	cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
+}
+
+#endif
+
 void CDDM_calc_normals_tessface(DerivedMesh *dm)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh *)dm;

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -1185,7 +1185,7 @@
     CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_PREVIEW_MLOOPCOL |
     CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORCO | CD_MASK_TANGENT |
-    CD_MASK_PREVIEW_MCOL | CD_MASK_NORMAL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
+    CD_MASK_PREVIEW_MCOL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
     CD_MASK_ORIGINDEX | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE;
 const CustomDataMask CD_MASK_BMESH =
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |

Modified: trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -1893,8 +1893,7 @@
 			}
 		}
 
-		if (update_normals)
-			CDDM_calc_normals(result);
+		result->dirty |= DM_DIRTY_NORMALS;
 	}
 	/* make a copy of dm to use as brush data */
 	if (pmd->brush) {

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -1998,17 +1998,25 @@
 {
 	float (*pnors)[3] = r_polynors;
 	float (*tnorms)[3];
-	float tpnor[3];  /* temp poly normal */
 	int i;
 	MPoly *mp;
 
 	/* first go through and calculate normals for all the polys */
 	tnorms = MEM_callocN(sizeof(*tnorms) * numVerts, __func__);
 
-	mp = mpolys;
-	for (i = 0; i < numPolys; i++, mp++) {
-		mesh_calc_normals_poly_accum(mp, mloop + mp->loopstart, mverts, pnors ? pnors[i] : tpnor, tnorms);
+	if (pnors) {
+		mp = mpolys;
+		for (i = 0; i < numPolys; i++, mp++) {
+			mesh_calc_normals_poly_accum(mp, mloop + mp->loopstart, mverts, pnors[i], tnorms);
+		}
 	}
+	else {
+		float tpnor[3];  /* temp poly normal */
+		mp = mpolys;
+		for (i = 0; i < numPolys; i++, mp++) {
+			mesh_calc_normals_poly_accum(mp, mloop + mp->loopstart, mverts, tpnor, tnorms);
+		}
+	}
 
 	/* following Mesh convention; we use vertex coordinate itself for normal in this case */
 	for (i = 0; i < numVerts; i++) {

Modified: trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c	2013-05-30 17:36:43 UTC (rev 57145)
+++ trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c	2013-05-30 18:09:19 UTC (rev 57146)
@@ -362,9 +362,9 @@
 
 	/* create a new DerivedMesh */
 	result = CDDM_new(vertex_it->num_elements, 0, face_it->num_elements, 0, 0);
-	CustomData_merge(&dm1->faceData, &result->faceData, CD_MASK_DERIVEDMESH & ~(CD_MASK_NORMAL | CD_MASK_ORIGINDEX),
+	CustomData_merge(&dm1->faceData, &result->faceData, CD_MASK_DERIVEDMESH & ~CD_MASK_ORIGINDEX,
 	                 CD_DEFAULT, face_it->num_elements);
-	CustomData_merge(&dm2->faceData, &result->faceData, CD_MASK_DERIVEDMESH & ~(CD_MASK_NORMAL | CD_MASK_ORIGINDEX),
+	CustomData_merge(&dm2->faceData, &result->faceData, CD_MASK_DERIVEDMESH & ~CD_MASK_ORIGINDEX,
 	                 CD_DEFAULT, face_it->num_elements);
 
 	/* step through the vertex iterators: */




More information about the Bf-blender-cvs mailing list