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
path: root/source
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-05-11 00:31:55 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-05-11 00:31:55 +0400
commit6dbfbabcd62164391a838a7ac4cf23a57f96e306 (patch)
tree1f4f2166161aff81c64bdb149d7bcf72887665b4 /source
parent072a882d035936c7eeca6abeb8781a330ebd07d5 (diff)
Code cleanup for parameters of subsurf_make_derived_from_derived.
This is the first commit of the sculpt masking merge. Documentation: http://wiki.blender.org/index.php/User:Nicholasbishop/PaintMasks Thanks to Brecht for reviewing! Replaced four boolean parameters with a single flag and a new enum, SubsurfFlags.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h11
-rw-r--r--source/blender/blenkernel/intern/multires.c5
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c2
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c17
-rw-r--r--source/blender/editors/object/object_bake.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c2
-rw-r--r--source/blender/modifiers/intern/MOD_subsurf.c16
7 files changed, 36 insertions, 19 deletions
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index 8179c688580..400056c527c 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -56,11 +56,18 @@ struct DMGridAdjacency;
/**************************** External *****************************/
+typedef enum {
+ SUBSURF_USE_RENDER_PARAMS = 1,
+ SUBSURF_IS_FINAL_CALC = 2,
+ SUBSURF_FOR_EDIT_MODE = 4,
+ SUBSURF_IN_EDIT_MODE = 8
+} SubsurfFlags;
+
struct DerivedMesh *subsurf_make_derived_from_derived(
struct DerivedMesh *dm,
struct SubsurfModifierData *smd,
- int useRenderParams, float (*vertCos)[3],
- int isFinalCalc, int forEditMode, int inEditMode);
+ float (*vertCos)[3],
+ SubsurfFlags flags);
void subsurf_calculate_limit_positions(struct Mesh *me, float (*positions_r)[3]);
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 026134609b7..886278eb809 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -684,6 +684,7 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv)
{
SubsurfModifierData smd = {{NULL}};
+ SubsurfFlags flags = 0;
smd.levels = smd.renderLevels = lvl;
if (!plain_uv)
@@ -693,7 +694,9 @@ static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl
if (optimal)
smd.flags |= eSubsurfModifierFlag_ControlEdges;
- return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0, (ob->mode & OB_MODE_EDIT));
+ if (ob->mode & OB_MODE_EDIT)
+ flags |= SUBSURF_IN_EDIT_MODE;
+ return subsurf_make_derived_from_derived(dm, &smd, NULL, flags);
}
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index fdda1c6ec0a..67c60d61b66 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -523,7 +523,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM
ssmd.subdivType = ME_CC_SUBSURF; //catmull clark
ssmd.levels = smd->subsurfLevels; //levels
- ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0, (ob->mode & OB_MODE_EDIT));
+ ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, NULL, (ob->mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0);
if (ss_mesh) {
calc.vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index e81cab6b912..becdf585259 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -3367,8 +3367,8 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
struct DerivedMesh *subsurf_make_derived_from_derived(
struct DerivedMesh *dm,
struct SubsurfModifierData *smd,
- int useRenderParams, float (*vertCos)[3],
- int isFinalCalc, int forEditMode, int inEditMode)
+ float (*vertCos)[3],
+ SubsurfFlags flags)
{
int useSimple = smd->subdivType == ME_SIMPLE_SUBSURF;
CCGFlags useAging = smd->flags & eSubsurfModifierFlag_DebugIncr ? CCG_USE_AGING : 0;
@@ -3376,7 +3376,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges);
CCGDerivedMesh *result;
- if (forEditMode) {
+ if (flags & SUBSURF_FOR_EDIT_MODE) {
int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels) : smd->levels;
smd->emCache = _getSubSurf(smd->emCache, levels, useAging | CCG_CALC_NORMALS);
@@ -3386,7 +3386,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
drawInteriorEdges,
useSubsurfUv, dm);
}
- else if (useRenderParams) {
+ else if (flags & SUBSURF_USE_RENDER_PARAMS) {
/* Do not use cache in render mode. */
CCGSubSurf *ss;
int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->renderLevels) : smd->renderLevels;
@@ -3419,14 +3419,13 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
* Addendum: we can't really ensure that this is never called in edit
* mode, so now we have a parameter to verify it. - brecht
*/
- if (!inEditMode && smd->emCache) {
+ if (!(flags & SUBSURF_IN_EDIT_MODE) && smd->emCache) {
ccgSubSurf_free(smd->emCache);
smd->emCache = NULL;
}
- if (useIncremental && isFinalCalc) {
+ if (useIncremental && (flags & SUBSURF_IS_FINAL_CALC)) {
smd->mCache = ss = _getSubSurf(smd->mCache, levels, useAging | CCG_CALC_NORMALS);
-
ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple);
result = getCCGDerivedMesh(smd->mCache,
@@ -3434,7 +3433,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
useSubsurfUv, dm);
}
else {
- if (smd->mCache && isFinalCalc) {
+ if (smd->mCache && (flags & SUBSURF_IS_FINAL_CALC)) {
ccgSubSurf_free(smd->mCache);
smd->mCache = NULL;
}
@@ -3444,7 +3443,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
result = getCCGDerivedMesh(ss, drawInteriorEdges, useSubsurfUv, dm);
- if (isFinalCalc)
+ if (flags & SUBSURF_IS_FINAL_CALC)
smd->mCache = ss;
else
result->freeSS = 1;
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 593a5b6f1fe..1aaf42ae785 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -619,7 +619,7 @@ static void *init_heights_data(MultiresBakeRender *bkr, Image *ima)
if (bkr->simple)
smd.subdivType = ME_SIMPLE_SUBSURF;
- height_data->ssdm = subsurf_make_derived_from_derived(bkr->lores_dm, &smd, 0, NULL, 0, 0, 0);
+ height_data->ssdm = subsurf_make_derived_from_derived(bkr->lores_dm, &smd, NULL, 0);
}
height_data->origindex = lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index a856f5f34c3..159e2fc3fe6 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -402,7 +402,7 @@ static ParamHandle *construct_param_handle_subsurfed(Scene *scene, BMEditMesh *e
initialDerived = CDDM_from_BMEditMesh(em, NULL, 0, 0);
derivedMesh = subsurf_make_derived_from_derived(initialDerived, &smd,
- 0, NULL, 0, 0, 1);
+ NULL, SUBSURF_IN_EDIT_MODE);
initialDerived->release(initialDerived);
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c
index 16824139d60..683dbc38ee5 100644
--- a/source/blender/modifiers/intern/MOD_subsurf.c
+++ b/source/blender/modifiers/intern/MOD_subsurf.c
@@ -94,12 +94,19 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
ModifierApplyFlag flag)
{
SubsurfModifierData *smd = (SubsurfModifierData *) md;
+ SubsurfFlags subsurf_flags = 0;
DerivedMesh *result;
const int useRenderParams = flag & MOD_APPLY_RENDER;
const int isFinalCalc = flag & MOD_APPLY_USECACHE;
- result = subsurf_make_derived_from_derived(derivedData, smd, useRenderParams, NULL,
- isFinalCalc, 0, (ob->flag & OB_MODE_EDIT));
+ if(useRenderParams)
+ subsurf_flags |= SUBSURF_USE_RENDER_PARAMS;
+ if(isFinalCalc)
+ subsurf_flags |= SUBSURF_IS_FINAL_CALC;
+ if(ob->flag & OB_MODE_EDIT)
+ subsurf_flags |= SUBSURF_IN_EDIT_MODE;
+
+ result = subsurf_make_derived_from_derived(derivedData, smd, NULL, subsurf_flags);
if (useRenderParams || !isFinalCalc) {
DerivedMesh *cddm = CDDM_copy(result);
@@ -117,8 +124,9 @@ static DerivedMesh *applyModifierEM(ModifierData *md, Object *UNUSED(ob),
SubsurfModifierData *smd = (SubsurfModifierData *) md;
DerivedMesh *result;
- result = subsurf_make_derived_from_derived(derivedData, smd, 0,
- NULL, 0, 1, 1);
+ result = subsurf_make_derived_from_derived(derivedData, smd,
+ NULL, (SUBSURF_FOR_EDIT_MODE |
+ SUBSURF_IN_EDIT_MODE));
return result;
}