Code cleanup for multires_dm_create_from_derived().

Changed name to multires_make_derived_from_derived() and parameter
order to be more similar to subsurf_make_derived_from_derived().

Added MultiresFlags enum with flag values to replace the local_mmd and
useRenderParams parameters.
This commit is contained in:
2012-05-10 20:32:09 +00:00
parent 6dbfbabcd6
commit 3794ad5e14
4 changed files with 27 additions and 13 deletions

View File

@@ -59,8 +59,15 @@ void multires_modifier_update_hidden(struct DerivedMesh *dm);
void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob); void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob);
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, typedef enum {
int local_mmd, struct DerivedMesh*, struct Object *, int); MULTIRES_USE_LOCAL_MMD = 1,
MULTIRES_USE_RENDER_PARAMS = 2,
} MultiresFlags;
struct DerivedMesh *multires_make_derived_from_derived(struct DerivedMesh *dm,
struct MultiresModifierData *mmd,
struct Object *ob,
MultiresFlags flags);
struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene, struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene,
struct ModifierData *lastmd); struct ModifierData *lastmd);

View File

@@ -678,7 +678,7 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
mmd.totlvl = totlvl; mmd.totlvl = totlvl;
mmd.simple = simple; mmd.simple = simple;
return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0); return multires_make_derived_from_derived(dm, &mmd, ob, MULTIRES_USE_LOCAL_MMD);
} }
static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv) static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv)
@@ -1326,15 +1326,16 @@ void multires_stitch_grids(Object *ob)
} }
} }
DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
int local_mmd, DerivedMesh *dm, MultiresModifierData *mmd,
Object *ob, int useRenderParams) Object *ob,
MultiresFlags flags)
{ {
Mesh *me = ob->data; Mesh *me = ob->data;
DerivedMesh *result; DerivedMesh *result;
CCGDerivedMesh *ccgdm = NULL; CCGDerivedMesh *ccgdm = NULL;
DMGridData **gridData, **subGridData; DMGridData **gridData, **subGridData;
int lvl = multires_get_level(ob, mmd, useRenderParams); int lvl = multires_get_level(ob, mmd, (flags & MULTIRES_USE_RENDER_PARAMS));
int i, gridSize, numGrids; int i, gridSize, numGrids;
if (lvl == 0) if (lvl == 0)
@@ -1344,12 +1345,12 @@ DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd,
mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges, mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges,
mmd->flags & eMultiresModifierFlag_PlainUv); mmd->flags & eMultiresModifierFlag_PlainUv);
if (!local_mmd) { if (!(flags & MULTIRES_USE_LOCAL_MMD)) {
ccgdm = (CCGDerivedMesh *)result; ccgdm = (CCGDerivedMesh *)result;
ccgdm->multires.ob = ob; ccgdm->multires.ob = ob;
ccgdm->multires.mmd = mmd; ccgdm->multires.mmd = mmd;
ccgdm->multires.local_mmd = local_mmd; ccgdm->multires.local_mmd = 0;
ccgdm->multires.lvl = lvl; ccgdm->multires.lvl = lvl;
ccgdm->multires.totlvl = mmd->totlvl; ccgdm->multires.totlvl = mmd->totlvl;
ccgdm->multires.modified_flags = 0; ccgdm->multires.modified_flags = 0;
@@ -1993,7 +1994,7 @@ void multires_load_old(Object *ob, Mesh *me)
mmd->lvl = mmd->totlvl; mmd->lvl = mmd->totlvl;
orig = CDDM_from_mesh(me, NULL); orig = CDDM_from_mesh(me, NULL);
dm = multires_dm_create_from_derived(mmd, 0, orig, ob, 0); dm = multires_make_derived_from_derived(orig, mmd, ob, 0);
multires_load_old_dm(dm, me, mmd->totlvl + 1); multires_load_old_dm(dm, me, mmd->totlvl + 1);

View File

@@ -1020,7 +1020,8 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l
tmp_mmd.lvl = *lvl; tmp_mmd.lvl = *lvl;
tmp_mmd.sculptlvl = *lvl; tmp_mmd.sculptlvl = *lvl;
dm = multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob,
MULTIRES_USE_LOCAL_MMD);
cddm->release(cddm); cddm->release(cddm);
} }
@@ -1040,7 +1041,8 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l
tmp_mmd.lvl = mmd->totlvl; tmp_mmd.lvl = mmd->totlvl;
tmp_mmd.sculptlvl = mmd->totlvl; tmp_mmd.sculptlvl = mmd->totlvl;
dm = multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob,
MULTIRES_USE_LOCAL_MMD);
cddm->release(cddm); cddm->release(cddm);
return dm; return dm;

View File

@@ -77,6 +77,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
DerivedMesh *result; DerivedMesh *result;
Mesh *me = (Mesh *)ob->data; Mesh *me = (Mesh *)ob->data;
const int useRenderParams = flag & MOD_APPLY_RENDER; const int useRenderParams = flag & MOD_APPLY_RENDER;
MultiresFlags flags = 0;
if (mmd->totlvl) { if (mmd->totlvl) {
if (!CustomData_get_layer(&me->ldata, CD_MDISPS)) { if (!CustomData_get_layer(&me->ldata, CD_MDISPS)) {
@@ -85,7 +86,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
} }
} }
result = multires_dm_create_from_derived(mmd, 0, dm, ob, useRenderParams); if (useRenderParams)
flags |= MULTIRES_USE_RENDER_PARAMS;
result = multires_make_derived_from_derived(dm, mmd, ob, flags);
if (result == dm) if (result == dm)
return dm; return dm;