[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19854] trunk/blender/source/blender: Fix for bug #17457.

Nicholas Bishop nicholasbishop at gmail.com
Tue Apr 21 18:58:26 CEST 2009


Revision: 19854
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19854
Author:   nicholasbishop
Date:     2009-04-21 18:58:25 +0200 (Tue, 21 Apr 2009)

Log Message:
-----------
Fix for bug #17457. This bug relates to files that have missing multires vertex data.

The fix is, if the file was saved on the highest multires level, then mesh contains a copy of the vertices anyway, and we can just copy it back into multires.

Otherwise, multires is removed from the mesh to avoid a crash.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenloader/intern/readfile.c

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2009-04-21 15:38:53 UTC (rev 19853)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2009-04-21 16:58:25 UTC (rev 19854)
@@ -111,7 +111,8 @@
 			lvl= lvl->next;
 		}
 
-		MEM_freeN(mr->verts);
+		if(mr->verts)
+			MEM_freeN(mr->verts);
 
 		BLI_freelistN(&mr->levels);
 

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-04-21 15:38:53 UTC (rev 19853)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-04-21 16:58:25 UTC (rev 19854)
@@ -2876,6 +2876,18 @@
 			lvl->map_mem= NULL;
 		}
 	}
+
+	/* Gracefully handle corrupted mesh */
+	if(mesh->mr && !mesh->mr->verts) {
+		/* If totals match, simply load the current mesh verts into multires */
+		if(mesh->totvert == ((MultiresLevel*)mesh->mr->levels.last)->totvert)
+			mesh->mr->verts = MEM_dupallocN(mesh->mvert);
+		else {
+			/* Otherwise, we can't recover the data, silently remove multires */
+			multires_free(mesh->mr);
+			mesh->mr = NULL;
+		}
+	}
 	
 	if((fd->flags & FD_FLAGS_SWITCH_ENDIAN) && mesh->tface) {
 		TFace *tf= mesh->tface;





More information about the Bf-blender-cvs mailing list