diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-09 07:37:10 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-09 07:38:06 +0300 |
commit | 3c78763482f7bcdd4011af35d3bee6a5fcc4f5db (patch) | |
tree | 703de834ba7b03e1dd9fc2936c51f096211b0ca5 | |
parent | 20fbe6bca808d7c5aaf7a07c6cd66c78cbaa016c (diff) |
Edit Mesh: remove derived-mesh from crazy-space calculation
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 29 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/crazyspace.c | 19 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 19 |
5 files changed, 36 insertions, 37 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index a8e6558c533..5a60fc25241 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -541,8 +541,6 @@ DerivedMesh *mesh_create_derived_no_deform_render( struct Object *ob, float (*vertCos)[3], CustomDataMask dataMask); -DerivedMesh *editbmesh_get_derived_base( - struct Object *ob, struct BMEditMesh *em, CustomDataMask data_mask); DerivedMesh *editbmesh_get_derived_cage( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *, struct BMEditMesh *em, CustomDataMask dataMask); diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index a5f8338f3cc..aaf0a620890 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -67,6 +67,7 @@ struct CustomData; struct Scene; struct MLoopUV; struct ReportList; +struct BMEditMesh; #ifdef __cplusplus extern "C" { @@ -91,6 +92,9 @@ struct BMesh *BKE_mesh_to_bmesh( struct Mesh *BKE_bmesh_to_mesh_nomain(struct BMesh *bm, const struct BMeshToMeshParams *params); +struct Mesh *BKE_mesh_from_editmesh_with_coords_thin_wrap( + struct BMEditMesh *em, CustomDataMask data_mask, float (*vertexCos)[3]); + int poly_find_loop_from_vert( const struct MPoly *poly, const struct MLoop *loopstart, unsigned vert); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 208803a8de9..e5b12b97033 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1914,24 +1914,6 @@ bool editbmesh_modifier_is_enabled(Scene *scene, ModifierData *md, bool has_prev return true; } - -/* TODO(campbell): support mesh with only an edit-mesh which is lazy initialized. */ -static Mesh *mesh_from_editmesh_with_coords( - BMEditMesh *em, CustomDataMask data_mask, float (*vertexCos)[3]) -{ - Mesh *me = BKE_bmesh_to_mesh_nomain( - em->bm, - &(struct BMeshToMeshParams){ - .cd_mask_extra = data_mask, - }); - if (vertexCos) { - /* We will own this array in the future. */ - BKE_mesh_apply_vert_coords(me, vertexCos); - MEM_freeN(vertexCos); - } - return me; -} - static void editbmesh_calc_modifiers( struct Depsgraph *depsgraph, Scene *scene, Object *ob, BMEditMesh *em, CustomDataMask dataMask, @@ -1962,7 +1944,7 @@ static void editbmesh_calc_modifiers( modifiers_clearErrors(ob); if (r_cage && cageIndex == -1) { - *r_cage = mesh_from_editmesh_with_coords(em, dataMask, NULL); + *r_cage = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, dataMask, NULL); } md = modifiers_getVirtualModifierList(ob, &virtualModifierData); @@ -2116,7 +2098,7 @@ static void editbmesh_calc_modifiers( BKE_mesh_runtime_ensure_edit_data(me_orig); me_orig->runtime.edit_data->vertexCos = MEM_dupallocN(deformedVerts); } - *r_cage = mesh_from_editmesh_with_coords( + *r_cage = BKE_mesh_from_editmesh_with_coords_thin_wrap( em, mask, deformedVerts ? MEM_dupallocN(deformedVerts) : NULL); } @@ -2160,7 +2142,7 @@ static void editbmesh_calc_modifiers( MEM_freeN((void *)mesh->runtime.edit_data->vertexCos); mesh->runtime.edit_data->vertexCos = MEM_dupallocN(deformedVerts); } - *r_final = mesh_from_editmesh_with_coords(em, dataMask, deformedVerts); + *r_final = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, dataMask, deformedVerts); deformedVerts = NULL; #if 0 @@ -2616,11 +2598,6 @@ DerivedMesh *editbmesh_get_derived_cage( return em->derivedCage; } -DerivedMesh *editbmesh_get_derived_base(Object *obedit, BMEditMesh *em, CustomDataMask data_mask) -{ - return getEditDerivedBMesh(em, obedit, data_mask, NULL); -} - /***/ /* get derived mesh from an object, using editbmesh if available. */ diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c index 22430a7b1d4..55a62e4981f 100644 --- a/source/blender/blenkernel/intern/crazyspace.c +++ b/source/blender/blenkernel/intern/crazyspace.c @@ -48,6 +48,7 @@ #include "BKE_multires.h" #include "BKE_mesh.h" #include "BKE_editmesh.h" +#include "BKE_library.h" BLI_INLINE void tan_calc_quat_v3( float r_quat[4], @@ -256,7 +257,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh( float (**deformmats)[3][3], float (**deformcos)[3]) { ModifierData *md; - DerivedMesh *dm; + Mesh *me; int i, a, numleft = 0, numVerts = 0; int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1); float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL; @@ -265,7 +266,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh( modifiers_clearErrors(ob); - dm = NULL; + me = NULL; md = modifiers_getVirtualModifierList(ob, &virtualModifierData); /* compute the deformation matrices and coordinates for the first @@ -274,7 +275,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh( for (i = 0; md && i <= cageIndex; i++, md = md->next) { const ModifierTypeInfo *mti = modifierType_getInfo(md->type); - if (!editbmesh_modifier_is_enabled(scene, md, dm != NULL)) + if (!editbmesh_modifier_is_enabled(scene, md, me != NULL)) continue; if (mti->type == eModifierTypeType_OnlyDeform && mti->deformMatricesEM) { @@ -285,26 +286,26 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh( data_mask = datamasks->mask; BLI_linklist_free((LinkNode *)datamasks, NULL); - dm = getEditDerivedBMesh(em, ob, data_mask, NULL); + me = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, data_mask, NULL); deformedVerts = editbmesh_get_vertex_cos(em, &numVerts); defmats = MEM_mallocN(sizeof(*defmats) * numVerts, "defmats"); for (a = 0; a < numVerts; a++) unit_m3(defmats[a]); } - - modifier_deformMatricesEM_DM_deprecated(md, &mectx, em, dm, deformedVerts, defmats, numVerts); + mti->deformMatricesEM(md, &mectx, em, me, deformedVerts, defmats, numVerts); } else break; } for (; md && i <= cageIndex; md = md->next, i++) - if (editbmesh_modifier_is_enabled(scene, md, dm != NULL) && modifier_isCorrectableDeformed(md)) + if (editbmesh_modifier_is_enabled(scene, md, me != NULL) && modifier_isCorrectableDeformed(md)) numleft++; - if (dm) - dm->release(dm); + if (me) { + BKE_id_free(NULL, me); + } *deformmats = defmats; *deformcos = deformedVerts; diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 374365cc58a..e3fc2926cfc 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -756,6 +756,25 @@ Mesh *BKE_bmesh_to_mesh_nomain(BMesh *bm, const struct BMeshToMeshParams *params return mesh; } +/** + * TODO(campbell): support mesh with only an edit-mesh which is lazy initialized. + */ +Mesh *BKE_mesh_from_editmesh_with_coords_thin_wrap( + BMEditMesh *em, CustomDataMask data_mask, float (*vertexCos)[3]) +{ + Mesh *me = BKE_bmesh_to_mesh_nomain( + em->bm, + &(struct BMeshToMeshParams){ + .cd_mask_extra = data_mask, + }); + if (vertexCos) { + /* We will own this array in the future. */ + BKE_mesh_apply_vert_coords(me, vertexCos); + MEM_freeN(vertexCos); + } + return me; +} + void BKE_mesh_make_local(Main *bmain, Mesh *me, const bool lib_local) { BKE_id_make_local_generic(bmain, &me->id, true, lib_local); |