[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12977] trunk/blender/source/blender/ blenkernel/intern: Fixed bug #7981, Crash with multires

Nicholas Bishop nicholasbishop at gmail.com
Sun Dec 23 04:03:55 CET 2007


Revision: 12977
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12977
Author:   nicholasbishop
Date:     2007-12-23 04:03:54 +0100 (Sun, 23 Dec 2007)

Log Message:
-----------
Fixed bug #7981, Crash with multires

Caused by incorrect handling of multires with orco mapping

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

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-12-22 21:11:27 UTC (rev 12976)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-12-23 03:03:54 UTC (rev 12977)
@@ -2598,7 +2598,8 @@
 }
 
 /* Propagate the changes to render level - fails if mesh topology changed */
-void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_copy, const int orig_lvl)
+void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_copy,
+			   const int orig_lvl, CustomDataMask dataMask)
 {
 	if(me->mr) {
 		if((*dm)->getNumVerts(*dm) == me->totvert &&
@@ -2619,6 +2620,9 @@
 			(*dm)= CDDM_copy(old);
 			old->release(old);
 
+			if(dataMask & CD_MASK_ORCO)
+				add_orco_dm(ob, *dm, NULL);
+
 			/* Restore the original verts */
 			me->mr->newlvl= BLI_countlist(&me->mr->levels);
 			multires_set_level(ob, me, 1);
@@ -2646,7 +2650,7 @@
 	
 	vert_copy= multires_render_pin(ob, me, &orig_lvl);
 	mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask);
-	multires_render_final(ob, me, &final, vert_copy, orig_lvl);
+	multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
 	return final;
 }
@@ -2681,7 +2685,7 @@
 
 	vert_copy= multires_render_pin(ob, me, &orig_lvl);
 	mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask);
-	multires_render_final(ob, me, &final, vert_copy, orig_lvl);
+	multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
 	return final;
 }

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2007-12-22 21:11:27 UTC (rev 12976)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2007-12-23 03:03:54 UTC (rev 12977)
@@ -489,22 +489,13 @@
 		vcos= mesh_getRefKeyCos(me, &totvert);
 	}
 	else {
-		MultiresLevel *lvl = NULL;
-		MVert *mvert = NULL;
-		
-		if(me->mr) {
-			lvl = multires_level_n(me->mr, me->mr->pinlvl);
-			vcos = MEM_callocN(sizeof(*vcos)*lvl->totvert, "orco mr mesh");
-			mvert = me->mr->verts;
-			totvert = lvl->totvert;
-		}
-		else {
-			Mesh *tme = me->texcomesh?me->texcomesh:me;
-			vcos = MEM_callocN(sizeof(*vcos)*me->totvert, "orco mesh");
-			mvert = tme->mvert;
-			totvert = MIN2(tme->totvert, me->totvert);
-		}
+		MVert *mvert = NULL;		
+		Mesh *tme = me->texcomesh?me->texcomesh:me;
 
+		vcos = MEM_callocN(sizeof(*vcos)*me->totvert, "orco mesh");
+		mvert = tme->mvert;
+		totvert = MIN2(tme->totvert, me->totvert);
+
 		for(a=0; a<totvert; a++, mvert++) {
 			vcos[a][0]= mvert->co[0];
 			vcos[a][1]= mvert->co[1];





More information about the Bf-blender-cvs mailing list