diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-11-08 17:39:36 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-11-08 17:39:36 +0300 |
commit | f9487fba3994c1a09803f7a80cb69fe28b914a90 (patch) | |
tree | 8a99f336e9fdf2f0ef67b3318c7f5089a9c1214e /source/blender/blenkernel/intern/multires.c | |
parent | fe53cf2cb4c36322cd9d7d1075049f2dd9a4b777 (diff) |
Fixed own mistake from previous commit -- get_levels_from_disps can't be used
when handling topology changes.
Added grid size detection based on totdisp and corners count.
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 5dfae6599aa..3ebbc44766e 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1613,26 +1613,33 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) void multires_topology_changed(Object *ob) { Mesh *me= (Mesh*)ob->data; - MDisps *mdisp= NULL; - int i, totlvl; + MDisps *mdisp= NULL, *cur= NULL; + int i, grid= 0, corners; 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); + cur= mdisp; + for(i = 0; i < me->totface; i++, cur++) { + if(mdisp->totdisp) { + corners= multires_mdisp_corners(mdisp); + grid= mdisp->totdisp / corners; + + break; + } + } for(i = 0; i < me->totface; i++, 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"); + if(grid) { + mdisp->totdisp= nvert*grid; + mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology"); + } continue; } |