[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32946] trunk/blender/source/blender/ blenkernel/intern/multires.c: Fix crash when creating new faces in edit mode
Sergey Sharybin
g.ulairi at gmail.com
Mon Nov 8 15:00:24 CET 2010
Revision: 32946
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32946
Author: nazgul
Date: 2010-11-08 15:00:23 +0100 (Mon, 08 Nov 2010)
Log Message:
-----------
Fix crash when creating new faces in edit mode
- Do not check corners count if totdisp is set to 0
- Allocate memory for such mdisps to prevent the whole disp layer erasing
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/multires.c
Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c 2010-11-08 13:01:32 UTC (rev 32945)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c 2010-11-08 14:00:23 UTC (rev 32946)
@@ -1614,17 +1614,31 @@
{
Mesh *me= (Mesh*)ob->data;
MDisps *mdisp= NULL;
- int i;
+ int i, totlvl;
CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS);
if(!mdisp) return;
+ totlvl= get_levels_from_disps(ob);
+
for(i = 0; i < me->totface; i++, mdisp++) {
- int corners= multires_mdisp_corners(mdisp);
+ int corners= 0;
int nvert= me->mface[i].v4 ? 4 : 3;
+ /* allocate memory for mdisp, the whole disp layer would be erased otherwise */
+ if(!mdisp->totdisp) {
+ int side = multires_side_tot[totlvl];
+
+ mdisp->totdisp= nvert*side*side;
+ mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
+
+ continue;
+ }
+
+ corners= multires_mdisp_corners(mdisp);
+
if(corners!=nvert) {
mdisp->totdisp= (mdisp->totdisp/corners)*nvert;
More information about the Bf-blender-cvs
mailing list