Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2010-11-08 17:00:23 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2010-11-08 17:00:23 +0300
commit8647dbc0a60576aeb69b9431c02a1273290ee32d (patch)
treeb9b45959ee75487fdca03c7996b3f6487a4a3fc0 /source/blender/blenkernel
parentf15187cfcdfcc4f1210ce2b9ff7caba804411867 (diff)
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
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/multires.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index f4e9dcf742b..5dfae6599aa 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -1614,17 +1614,31 @@ void multires_topology_changed(Object *ob)
{
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;