diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-03-10 16:26:32 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-03-10 16:26:32 +0400 |
commit | 2932ab8761efa43533baebc009a2b6ef05c8dc13 (patch) | |
tree | 9b46dc0539f267cc0c7584a7519b7ab3b15819d8 /source/blender/blenkernel/intern/multires.c | |
parent | 20d8d366abe07f00ec20623dcbde69022962ed67 (diff) |
Fix an infinite loop in get_levels_from_disps().
This is called when adding a multiries modifier. BMesh MDisps have
only one loop's displacements rather than a full face's, so don't
multiply by number of corners here.
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 6581c442356..06de3cbe5a6 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -269,15 +269,14 @@ static int get_levels_from_disps(Object *ob) mdisp = CustomData_get_layer(&me->ldata, CD_MDISPS); for (i = 0; i < me->totpoly; ++i) { - int S = me->mpoly[i].totloop; - md = mdisp + me->mpoly[i].loopstart; + for (j=0; j<me->mpoly[i].totloop; j++, md++) { if (md->totdisp == 0) continue; while (1) { int side = (1 << (totlvl-1)) + 1; - int lvl_totdisp = side*side*S; + int lvl_totdisp = side*side; if (md->totdisp == lvl_totdisp) break; else if (md->totdisp < lvl_totdisp) |