Allocate/free meshes with generic library functions.

This avoids the need to use Mesh-specific functions, and makes allocation
and freeing easy oneliners.
This commit is contained in:
2018-05-03 15:42:55 +02:00
parent 4880e2e75a
commit d8a03c77d7
7 changed files with 29 additions and 47 deletions

View File

@@ -47,6 +47,7 @@
#include "BLI_utildefines_stack.h"
#include "BKE_animsys.h"
#include "BKE_idcode.h"
#include "BKE_main.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
@@ -621,8 +622,7 @@ static Mesh *mesh_from_template_ex(
{
const bool do_tessface = ((me_src->totface != 0) && (me_src->totpoly == 0)); /* only do tessface if we have no polys */
Mesh *me_dst = MEM_callocN(sizeof(struct Mesh), "Mesh");
BKE_mesh_init(me_dst);
Mesh *me_dst = BKE_id_new_nomain(ID_ME, NULL);
me_dst->mat = MEM_dupallocN(me_src->mat);
me_dst->mselect = MEM_dupallocN(me_dst->mselect);
@@ -703,8 +703,7 @@ BMesh *BKE_mesh_to_bmesh(
Mesh *BKE_bmesh_to_mesh(BMesh *bm, const struct BMeshToMeshParams *params)
{
Mesh *mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
Mesh *mesh = BKE_id_new_nomain(ID_ME, NULL);
BM_mesh_bm_to_me(bm, mesh, params);
return mesh;
}

View File

@@ -39,6 +39,7 @@
#include "BLI_ghash.h"
#include "BKE_customdata.h"
#include "BKE_library.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -677,8 +678,7 @@ Mesh *BKE_mesh_merge_verts(Mesh *mesh, const int *vtargetmap, const int tot_vtar
if (poly_map_mem != NULL)
MEM_freeN(poly_map_mem);
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
return result;
}

View File

@@ -60,6 +60,7 @@
#include "BKE_appdir.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_idcode.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -1001,16 +1002,14 @@ void modifier_deformVerts_DM_deprecated(struct ModifierData *md, const ModifierE
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
mti->deformVerts(md, ctx, mesh, vertexCos, numVerts);
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
}
}
@@ -1029,16 +1028,14 @@ void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, const Modifi
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
mti->deformMatrices(md, ctx, mesh, vertexCos, defMats, numVerts);
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
}
}
@@ -1056,16 +1053,14 @@ void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, const Modifie
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
mti->deformVertsEM(md, ctx, editData, mesh, vertexCos, numVerts);
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
}
}
@@ -1083,16 +1078,14 @@ void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, const Modi
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
mti->deformMatricesEM(md, ctx, editData, mesh, vertexCos, defMats, numVerts);
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
}
}
@@ -1109,8 +1102,7 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
@@ -1120,12 +1112,10 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md
DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE);
if(new_mesh != mesh) {
BKE_mesh_free(new_mesh);
MEM_freeN(new_mesh);
BKE_id_free(NULL, new_mesh);
}
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
return ndm;
@@ -1145,8 +1135,7 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *
/* TODO(sybren): deduplicate all the copies of this code in this file. */
Mesh *mesh = NULL;
if (dm != NULL) {
mesh = BKE_libblock_alloc_notest(ID_ME);
BKE_mesh_init(mesh);
mesh = BKE_id_new_nomain(ID_ME, NULL);
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
@@ -1156,12 +1145,10 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *
DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE);
if(new_mesh != mesh) {
BKE_mesh_free(new_mesh);
MEM_freeN(new_mesh);
BKE_id_free(NULL, new_mesh);
}
if (mesh != NULL) {
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
}
return ndm;

View File

@@ -152,8 +152,7 @@ static void deformVertsEM(
}
if (!mesh) {
BKE_mesh_free(mesh_src);
MEM_freeN(mesh_src);
BKE_id_free(NULL, mesh_src);
}
}
@@ -173,8 +172,7 @@ static void deformMatricesEM(
amd->deformflag, NULL, amd->defgrp_name);
if (!mesh) {
BKE_mesh_free(mesh_src);
MEM_freeN(mesh_src);
BKE_id_free(NULL, mesh_src);
}
}

View File

@@ -41,6 +41,7 @@
#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"
@@ -129,8 +130,7 @@ static void deformVertsEM(
deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
if (!mesh) {
BKE_mesh_free(mesh_src);
MEM_freeN(mesh_src);
BKE_id_free(NULL, mesh_src);
}
}

View File

@@ -39,6 +39,7 @@
#include "BLI_math.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
@@ -313,8 +314,7 @@ static Mesh *mirrorModifier__doMirror(MirrorModifierData *mmd,
result = doMirrorOnAxis(mmd, ob, result, 1);
if (tmp != mesh) {
/* free intermediate results */
BKE_mesh_free(tmp);
MEM_freeN(tmp);
BKE_id_free(NULL, tmp);
}
}
if (mmd->flag & MOD_MIR_AXIS_Z) {
@@ -322,8 +322,7 @@ static Mesh *mirrorModifier__doMirror(MirrorModifierData *mmd,
result = doMirrorOnAxis(mmd, ob, result, 2);
if (tmp != mesh) {
/* free intermediate results */
BKE_mesh_free(tmp);
MEM_freeN(tmp);
BKE_id_free(NULL, tmp);
}
}

View File

@@ -72,6 +72,7 @@
#include "BLI_bitmap.h"
#include "BKE_deform.h"
#include "BKE_library.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_modifier.h"
@@ -1885,9 +1886,7 @@ static Mesh *final_skin(SkinModifierData *smd, Mesh *mesh)
mesh = subdivide_base(mesh);
result = base_skin(mesh, smd);
BKE_mesh_free(mesh);
MEM_freeN(mesh);
BKE_id_free(NULL, mesh);
return result;
}