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:39:36 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2010-11-08 17:39:36 +0300
commitf9487fba3994c1a09803f7a80cb69fe28b914a90 (patch)
tree8a99f336e9fdf2f0ef67b3318c7f5089a9c1214e /source/blender/blenkernel/intern/multires.c
parentfe53cf2cb4c36322cd9d7d1075049f2dd9a4b777 (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.c23
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;
}