diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-09 04:18:37 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-09 04:18:37 +0400 |
commit | 2d7e3a63e5bbe12189eac54db088d4af7a96eab1 (patch) | |
tree | f83565fa125ecbdebf2b069a0f916ae4ccb15c4b /source/blender/blenkernel/intern | |
parent | a90e7bd0c249e6ee3cdf895c6869fd148d6015fb (diff) |
Multires doesn't update itself outside of sculptmode now, so switching levels is somewhat faster outside of sculptmode.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 10 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 11 |
2 files changed, 10 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 30f0a95374c..00a3b808de6 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1165,7 +1165,7 @@ typedef struct MultiresDM { IndexNode *vert_face_map_mem; Mesh *me; - int block_update; + int flags; void (*update)(DerivedMesh*); } MultiresDM; @@ -1175,7 +1175,7 @@ static void MultiresDM_release(DerivedMesh *dm) MultiresDM *mrdm = (MultiresDM*)dm; /* Before freeing, need to update the displacement map */ - if(dm->needsFree && !mrdm->block_update) + if(dm->needsFree && !(mrdm->flags & MULTIRES_DM_UPDATE_BLOCK)) mrdm->update(dm); if(DM_release(dm)) { @@ -1261,7 +1261,7 @@ DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts mrdm->lvl = ms->lvl; mrdm->totlvl = ms->totlvl; mrdm->subco = MEM_callocN(sizeof(MVert)*numVerts, "multires subdivided verts"); - mrdm->block_update = 0; + mrdm->flags = 0; dm->release = MultiresDM_release; @@ -1325,7 +1325,7 @@ ListBase *MultiresDM_get_vert_face_map(DerivedMesh *dm) return mrdm->vert_face_map; } -void MultiresDM_block_update(DerivedMesh *dm) +int *MultiresDM_get_flags(DerivedMesh *dm) { - ((MultiresDM*)dm)->block_update = 1; + return &((MultiresDM*)dm)->flags; } diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 976b71e252c..8f23c8f60fa 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1176,6 +1176,7 @@ static void multires_subdisp(DerivedMesh *orig, Mesh *me, DerivedMesh *final, in final->needsFree = 1; final->release(final); mrdm->needsFree = 1; + *MultiresDM_get_flags(mrdm) |= MULTIRES_DM_UPDATE_ALWAYS; mrdm->release(mrdm); } @@ -1584,7 +1585,7 @@ static void multiresModifier_update(DerivedMesh *dm) MFace *mface; int i; - //if(!(G.f & G_SCULPTMODE)) return; + if(!(G.f & G_SCULPTMODE) && !(*MultiresDM_get_flags(dm) & MULTIRES_DM_UPDATE_ALWAYS)) return; mdisps = dm->getFaceDataArray(dm, CD_MDISPS); @@ -1612,7 +1613,7 @@ static void multiresModifier_update(DerivedMesh *dm) mmd.totlvl = totlvl; mmd.lvl = lvl; subco_dm = multires_dm_create_from_derived(&mmd, orig, me, 0, 0); - MultiresDM_block_update(subco_dm); + *MultiresDM_get_flags(subco_dm) |= MULTIRES_DM_UPDATE_BLOCK; cur_lvl_orig_verts = CDDM_get_verts(subco_dm); /* Subtract the original vertex cos from the new vertex cos */ @@ -1654,16 +1655,14 @@ struct DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, D SubsurfModifierData smd; MultiresSubsurf ms = {me, mmd->totlvl, mmd->lvl}; DerivedMesh *result; + int i; memset(&smd, 0, sizeof(SubsurfModifierData)); smd.levels = smd.renderLevels = mmd->lvl - 1; result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, useRenderParams, NULL, isFinalCalc, 0); - /* TODO */ - int i; - for(i = 0; i < result->getNumVerts(result); ++i) { + for(i = 0; i < result->getNumVerts(result); ++i) MultiresDM_get_subco(result)[i] = CDDM_get_verts(result)[i]; - } multiresModifier_disp_run(result, MultiresDM_get_subco(result), 0); MultiresDM_set_update(result, multiresModifier_update); |