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.
This commit is contained in:
2010-11-08 14:39:36 +00:00
parent fe53cf2cb4
commit f9487fba39

View File

@@ -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;
}