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:
authorCampbell Barton <ideasman42@gmail.com>2011-12-20 05:33:14 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-20 05:33:14 +0400
commitefb4eff35312afb372e2a46aa598d12a74ff4a52 (patch)
treeb039276297f2deea8bff39e606c9bf89b0dbc590 /source/blender/modifiers/intern/MOD_weightvgedit.c
parent2457d4f5abd65095ae48be937ed43d026d47124a (diff)
parent71ce197bbb09af00980f6efc4891dc2a7ffda36b (diff)
svn merge ^/trunk/blender -r42722:42742
Diffstat (limited to 'source/blender/modifiers/intern/MOD_weightvgedit.c')
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgedit.c54
1 files changed, 4 insertions, 50 deletions
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index a4c0f0ffa70..95862f5f002 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -177,10 +177,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
- DerivedMesh *dm = derivedData, *ret = NULL;
-#if 0
- Mesh *ob_m = NULL;
-#endif
+ DerivedMesh *dm = derivedData;
MDeformVert *dvert = NULL;
MDeformWeight **dw = NULL;
float *org_w; /* Array original weights. */
@@ -188,7 +185,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int numVerts;
int defgrp_idx;
int i;
- char rel_ret = 0; /* Boolean, whether we have to release ret dm or not, when not using it! */
/* Flags. */
int do_add = (wmd->edit_flags & MOD_WVG_EDIT_ADD2VG) != 0;
int do_rem = (wmd->edit_flags & MOD_WVG_EDIT_REMFVG) != 0;
@@ -207,49 +203,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
if (defgrp_idx < 0)
return dm;
- /* XXX All this to avoid copying dm when not needed... However, it nearly doubles compute
- * time! See scene 5 of the WeighVG test file...
- */
-#if 0
- /* Get actual dverts (ie vertex group data). */
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- /* If no dverts, return unmodified data... */
- if (dvert == NULL)
- return dm;
-
- /* Get org mesh, only to test whether affected cdata layer has already been copied
- * somewhere up in the modifiers stack.
- */
- ob_m = get_mesh(ob);
- if (ob_m == NULL)
- return dm;
-
- /* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
- if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
- /* XXX Seems to create problems with weightpaint mode???
- * I'm missing something here, I guess...
- */
-// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
- ret = CDDM_copy(dm);
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- ret->release(ret);
- return dm;
- }
- rel_ret = 1;
- }
- else
- ret = dm;
-#else
- ret = CDDM_copy(dm, 0);
- rel_ret = 1;
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- if (rel_ret)
- ret->release(ret);
- return dm;
- }
-#endif
+ dvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MDEFORMVERT, numVerts);
/* Get org weights, assuming 0.0 for vertices not in given vgroup. */
org_w = MEM_mallocN(sizeof(float) * numVerts, "WeightVGEdit Modifier, org_w");
@@ -271,7 +225,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
}
/* Do masking. */
- weightvg_do_mask(numVerts, NULL, org_w, new_w, ob, ret, wmd->mask_constant,
+ weightvg_do_mask(numVerts, NULL, org_w, new_w, ob, dm, wmd->mask_constant,
wmd->mask_defgrp_name, wmd->mask_texture, wmd->mask_tex_use_channel,
wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
@@ -285,7 +239,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(dw);
/* Return the vgroup-modified mesh. */
- return ret;
+ return dm;
}
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,