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:
authorSybren A. Stüvel <sybren@stuvel.eu>2018-04-25 12:04:40 +0300
committerSybren A. Stüvel <sybren@stuvel.eu>2018-05-01 19:02:17 +0300
commiteb6fc05f25d669eab8f0f8c0d19bb92addd1033d (patch)
treea15cedfe4b85e96b90d07a69c93610b0c55b0a9c /source/blender/modifiers/intern/MOD_armature.c
parent7efc75c7092b085fe3f5ef2dcab3669d466dfadc (diff)
Modifiers: Armature DerivedMesh → Mesh
The mesh parameter of armature_deform_verts() is now const, to indicate that it's safe to pass ob->data to it directly.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_armature.c')
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c80
1 files changed, 49 insertions, 31 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index c448ebdf11f..abbd7ba0fc8 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -42,12 +42,16 @@
#include "BLI_utildefines.h"
#include "BLI_string.h"
-
-#include "BKE_cdderivedmesh.h"
+#include "BKE_editmesh.h"
#include "BKE_lattice.h"
+#include "BKE_library.h"
#include "BKE_library_query.h"
+#include "BKE_mesh.h"
#include "BKE_modifier.h"
+#include "bmesh.h"
+#include "bmesh_tools.h"
+
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
@@ -107,7 +111,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
}
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
- Object *ob, DerivedMesh *derivedData,
+ Object *ob, Mesh *mesh,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -116,7 +120,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
- armature_deform_verts(amd->object, ob, derivedData, vertexCos, NULL,
+ armature_deform_verts(amd->object, ob, mesh, vertexCos, NULL,
numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name);
/* free cache */
@@ -128,16 +132,22 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
static void deformVertsEM(
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *em,
- DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+ Mesh *mesh, float (*vertexCos)[3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
- DerivedMesh *dm = derivedData;
-
- if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
+ Mesh *mesh_src = mesh;
+
+ /* TODO(sybren): possibly lift this code to modifier.c and use it for all modifiers */
+ if (!mesh) {
+ struct BMeshToMeshParams params = {0};
+ mesh_src = BKE_libblock_alloc_notest(ID_ME);
+ BKE_mesh_init(mesh_src);
+ BM_mesh_bm_to_me(em->bm, mesh_src, &params);
+ }
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
- armature_deform_verts(amd->object, ob, dm, vertexCos, NULL,
+ armature_deform_verts(amd->object, ob, mesh_src, vertexCos, NULL,
numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name);
/* free cache */
@@ -146,37 +156,45 @@ static void deformVertsEM(
amd->prevCos = NULL;
}
- if (!derivedData) dm->release(dm);
+ if (!mesh) {
+ BKE_mesh_free(mesh_src);
+ MEM_freeN(mesh_src);
+ }
}
static void deformMatricesEM(
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *em,
- DerivedMesh *derivedData, float (*vertexCos)[3],
+ Mesh *mesh, float (*vertexCos)[3],
float (*defMats)[3][3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
- DerivedMesh *dm = derivedData;
-
- if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
+ Mesh *mesh_src = mesh;
+
+ /* TODO(sybren): possibly lift this code to modifier.c and use it for all modifiers */
+ if (!mesh) {
+ struct BMeshToMeshParams params = {0};
+ mesh_src = BKE_libblock_alloc_notest(ID_ME);
+ BKE_mesh_init(mesh_src);
+ BM_mesh_bm_to_me(em->bm, mesh_src, &params);
+ }
- armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
+ armature_deform_verts(amd->object, ob, mesh_src, vertexCos, defMats, numVerts,
amd->deformflag, NULL, amd->defgrp_name);
- if (!derivedData) dm->release(dm);
+ if (!mesh) {
+ BKE_mesh_free(mesh_src);
+ MEM_freeN(mesh_src);
+ }
}
-static void deformMatrices(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
+static void deformMatrices(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, Mesh *mesh,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
- DerivedMesh *dm = derivedData;
+ Mesh *mesh_src = mesh ? mesh : ob->data;
- if (!derivedData) dm = CDDM_from_mesh((Mesh *)ob->data);
-
- armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
+ armature_deform_verts(amd->object, ob, mesh_src, vertexCos, defMats, numVerts,
amd->deformflag, NULL, amd->defgrp_name);
-
- if (!derivedData) dm->release(dm);
}
ModifierTypeInfo modifierType_Armature = {
@@ -190,17 +208,17 @@ ModifierTypeInfo modifierType_Armature = {
/* copyData */ copyData,
- /* deformVerts_DM */ deformVerts,
- /* deformMatrices_DM */ deformMatrices,
- /* deformVertsEM_DM */ deformVertsEM,
- /* deformMatricesEM_DM*/deformMatricesEM,
+ /* deformVerts_DM */ NULL,
+ /* deformMatrices_DM */ NULL,
+ /* deformVertsEM_DM */ NULL,
+ /* deformMatricesEM_DM*/NULL,
/* applyModifier_DM */ NULL,
/* applyModifierEM_DM */NULL,
- /* deformVerts */ NULL,
- /* deformMatrices */ NULL,
- /* deformVertsEM */ NULL,
- /* deformMatricesEM */ NULL,
+ /* deformVerts */ deformVerts,
+ /* deformMatrices */ deformMatrices,
+ /* deformVertsEM */ deformVertsEM,
+ /* deformMatricesEM */ deformMatricesEM,
/* applyModifier */ NULL,
/* applyModifierEM */ NULL,