[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44510] trunk/blender/source/blender/ blenkernel/intern/DerivedMesh.c: fix for issue reported in bug [#30381], though it doesn't deal with the crash.

Campbell Barton ideasman42 at gmail.com
Tue Feb 28 11:22:28 CET 2012


Revision: 44510
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44510
Author:   campbellbarton
Date:     2012-02-28 10:22:21 +0000 (Tue, 28 Feb 2012)
Log Message:
-----------
fix for issue reported in bug [#30381], though it doesn't deal with the crash.

calling DM_ensure_tessface() on an DM_TYPE_EDITBMESH does nothing, which is OK but was printing a warning.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-02-28 10:05:03 UTC (rev 44509)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-02-28 10:22:21 UTC (rev 44510)
@@ -1900,23 +1900,37 @@
 
 		CDDM_apply_vert_coords(*final_r, deformedVerts);
 		CDDM_calc_normals(*final_r); /* was CDDM_calc_normals_mapping - campbell */
-	} else if (dm) {
+	}
+	else if (dm) {
 		*final_r = dm;
 		(*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
-	} else if (!deformedVerts && cage_r && *cage_r) {
+	}
+	else if (!deformedVerts && cage_r && *cage_r) {
+		/* cage should already have up to date normals */
 		*final_r = *cage_r;
 		(*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
-	} else {
+	}
+	else {
+		/* this is just a copy of the editmesh, no need to calc normals */
 		*final_r = getEditDerivedBMesh(em, ob, deformedVerts);
 		deformedVerts = NULL;
-		(*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
 	}
 
 	/* --- */
 	/* BMESH_ONLY, ensure tessface's used for drawing,
-	 * but dont recalculate if the last modifier in the stack gives us tessfaces  */
-	DM_ensure_tessface(*final_r);
-	if (cage_r && (*cage_r != *final_r)) DM_ensure_tessface(*cage_r);
+	 * but dont recalculate if the last modifier in the stack gives us tessfaces
+	 * check if the derived meshes are DM_TYPE_EDITBMESH before calling, this isnt essential
+	 * but quiets annoying error messages since tessfaces wont be created. */
+	if ((*final_r)->type != DM_TYPE_EDITBMESH) {
+		DM_ensure_tessface(*final_r);
+	}
+	if (cage_r) {
+		if ((*cage_r)->type != DM_TYPE_EDITBMESH) {
+			if (*cage_r != *final_r) {
+				DM_ensure_tessface(*cage_r);
+			}
+		}
+	}
 	/* --- */
 
 	/* add an orco layer if needed */




More information about the Bf-blender-cvs mailing list