[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25961] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: fix crash for projection painting with subsurf or multires, while drawing the verts & faces were bening freed.

Campbell Barton ideasman42 at gmail.com
Wed Jan 13 13:16:10 CET 2010


Revision: 25961
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25961
Author:   campbellbarton
Date:     2010-01-13 13:16:10 +0100 (Wed, 13 Jan 2010)

Log Message:
-----------
fix crash for projection painting with subsurf or multires, while drawing the verts & faces were bening freed.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2010-01-13 12:15:04 UTC (rev 25960)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2010-01-13 12:16:10 UTC (rev 25961)
@@ -2840,7 +2840,17 @@
 		}
 	}
 	
-
+	/* when using subsurf or multires, mface arrays are thrown away, we need to keep a copy */
+	if(ps->dm->type != DM_TYPE_CDDM) {
+		ps->dm_mvert= MEM_dupallocN(ps->dm_mvert);
+		ps->dm_mface= MEM_dupallocN(ps->dm_mface);
+		/* looks like these are ok for now.*/
+		/*
+		ps->dm_mtface= MEM_dupallocN(ps->dm_mtface);
+		ps->dm_mtface_clone= MEM_dupallocN(ps->dm_mtface_clone);
+		ps->dm_mtface_stencil= MEM_dupallocN(ps->dm_mtface_stencil);
+		 */
+	}
 	
 	ps->viewDir[0] = 0.0f;
 	ps->viewDir[1] = 0.0f;
@@ -3266,6 +3276,18 @@
 		BLI_memarena_free(ps->arena_mt[a]);
 	}
 	
+	/* copy for subsurf/multires, so throw away */
+	if(ps->dm->type != DM_TYPE_CDDM) {
+		if(ps->dm_mvert) MEM_freeN(ps->dm_mvert);
+		if(ps->dm_mface) MEM_freeN(ps->dm_mface);
+		/* looks like these dont need copying */
+		/*
+		if(ps->dm_mtface) MEM_freeN(ps->dm_mtface);
+		if(ps->dm_mtface_clone) MEM_freeN(ps->dm_mtface_clone);
+		if(ps->dm_mtface_stencil) MEM_freeN(ps->dm_mtface_stencil);
+		*/
+	}
+
 	if(ps->dm_release)
 		ps->dm->release(ps->dm);
 }





More information about the Bf-blender-cvs mailing list