[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59419] trunk/blender/source/blender: fix leak in BM_face_split() with multires if the split failed.

Campbell Barton ideasman42 at gmail.com
Fri Aug 23 15:00:43 CEST 2013


Revision: 59419
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59419
Author:   campbellbarton
Date:     2013-08-23 13:00:43 +0000 (Fri, 23 Aug 2013)
Log Message:
-----------
fix leak in BM_face_split() with multires if the split failed.
also remove redundant normal copy.

only triangulate the mesh if its needed when enabling dyntopo.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-23 12:19:35 UTC (rev 59418)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-23 13:00:43 UTC (rev 59419)
@@ -794,6 +794,7 @@
 	BMHeader *ele_dst = ele_dst_v;
 
 	BLI_assert(ele_src->htype == ele_dst->htype);
+	BLI_assert(ele_src != ele_dst);
 
 	if ((hflag_mask & BM_ELEM_SELECT) == 0) {
 		/* First we copy select */

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2013-08-23 12:19:35 UTC (rev 59418)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2013-08-23 13:00:43 UTC (rev 59419)
@@ -356,10 +356,9 @@
 	
 	if (f_new) {
 		BM_elem_attrs_copy(bm, bm, f, f_new);
-		copy_v3_v3(f_new->no, f->no);
 
 		/* handle multires update */
-		if (has_mdisp && (f_new != f)) {
+		if (has_mdisp) {
 			BMLoop *l_iter;
 			BMLoop *l_first;
 
@@ -373,8 +372,6 @@
 				BM_loop_interp_multires(bm, l_iter, f_tmp);
 			} while ((l_iter = l_iter->next) != l_first);
 
-			BM_face_kill(bm, f_tmp);
-
 #if 0
 			/* BM_face_multires_bounds_smooth doesn't flip displacement correct */
 			BM_face_multires_bounds_smooth(bm, f);
@@ -383,6 +380,10 @@
 		}
 	}
 
+	if (has_mdisp) {
+		BM_face_kill(bm, f_tmp);
+	}
+
 	return f_new;
 }
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2013-08-23 12:19:35 UTC (rev 59418)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2013-08-23 13:00:43 UTC (rev 59419)
@@ -4568,7 +4568,9 @@
 
 static void sculpt_dynamic_topology_triangulate(BMesh *bm)
 {
-	BM_mesh_triangulate(bm, false, false, NULL, NULL);
+	if (bm->totloop != bm->totface * 3) {
+		BM_mesh_triangulate(bm, false, false, NULL, NULL);
+	}
 }
 
 void sculpt_pbvh_clear(Object *ob)
@@ -4807,8 +4809,8 @@
 
 	/* Symmetrize and re-triangulate */
 	BMO_op_callf(ss->bm, BMO_FLAG_DEFAULTS,
-	             "symmetrize input=%avef direction=%i",
-	             sd->symmetrize_direction);
+	             "symmetrize input=%avef direction=%i  dist=%f",
+	             sd->symmetrize_direction, 0.00001f);
 	sculpt_dynamic_topology_triangulate(ss->bm);
 
 	/* Finish undo */




More information about the Bf-blender-cvs mailing list