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:
authorBastien Montagne <montagne29@wanadoo.fr>2011-12-08 19:50:28 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2011-12-08 19:50:28 +0400
commit46626e4f5f3d7e56b83d51829491cb5fe9ed98a6 (patch)
tree10921fdf0cf3b0819cfccdd0f418a9ffae65a66f /source
parentedcc68b3d0acb45d4c6125d5e53bdd3f0e3dc403 (diff)
Fix [#29543] Hook modifier: falloff + vgroup influence broken
A valid derivedmesh is needed for modifier_get_vgroup to work, and it wasn’t take care of when not in edit mode... Checked quickly the other deform modifiers, they all seem to handle this correctly.
Diffstat (limited to 'source')
-rw-r--r--source/blender/modifiers/intern/MOD_hook.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c
index 30e801c9b42..9e48c5d29e2 100644
--- a/source/blender/modifiers/intern/MOD_hook.c
+++ b/source/blender/modifiers/intern/MOD_hook.c
@@ -143,14 +143,9 @@ static float hook_falloff(float *co_1, float *co_2, const float falloff_squared,
return fac;
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *dm,
- float (*vertexCos)[3],
- int numVerts,
- int UNUSED(useRenderParams),
- int UNUSED(isFinalCalc))
+static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm,
+ float (*vertexCos)[3], int numVerts)
{
- HookModifierData *hmd = (HookModifierData*) md;
bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget);
float vec[3], mat[4][4], dmat[4][4];
int i, *index_pt;
@@ -251,17 +246,29 @@ static void deformVerts(ModifierData *md, Object *ob,
}
}
-static void deformVertsEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ float (*vertexCos)[3], int numVerts,
+ int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
- DerivedMesh *dm = derivedData;
+ HookModifierData *hmd = (HookModifierData*) md;
+ DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
- if(!derivedData) dm = CDDM_from_editmesh(editData, ob->data);
+ deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
+
+ if(derivedData != dm)
+ dm->release(dm);
+}
+
+static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editData,
+ DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+ HookModifierData *hmd = (HookModifierData*) md;
+ DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
- deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
+ deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
- if(!derivedData) dm->release(dm);
+ if(derivedData != dm)
+ dm->release(dm);
}