[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