[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60195] branches/ soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c : code rewrite: transfer by topology: Bugfixes for memory allocation and handling memory leaks
Walid Shouman
eng.walidshouman at gmail.com
Tue Sep 17 13:37:09 CEST 2013
Revision: 60195
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60195
Author: walid
Date: 2013-09-17 11:37:09 +0000 (Tue, 17 Sep 2013)
Log Message:
-----------
code rewrite: transfer by topology: Bugfixes for memory allocation and handling memory leaks
Modified Paths:
--------------
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
Modified: branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-09-17 11:01:52 UTC (rev 60194)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c 2013-09-17 11:37:09 UTC (rev 60195)
@@ -263,6 +263,7 @@
BMElem *ele_dst = array_dst[i];
if (layer_type == CD_MDEFORMVERT) {
+ //all vertex groups will be copied as they are found in a single CD_layer
ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, layer_type);
CustomData_bmesh_set(cd_dst, ele_dst->head.data, layer_type, ptr);
}
@@ -307,6 +308,7 @@
ele_dst = array_dst[i];
if (layer_type == CD_MDEFORMVERT) {
+ //all vertex groups will be copied as they are found in a single CD_layer
ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, layer_type);
CustomData_bmesh_set(cd_dst, ele_dst->head.data, layer_type, ptr);
@@ -469,6 +471,10 @@
BM_mesh_cd_transfer_mapped(cd_src, array_src, array_src_len, cd_dst, array_dst, array_dst_len, layer_type, replace_info,
index_mapping);
+
+ MEM_freeN(array_dst);
+ MEM_freeN(array_src);
+ MEM_freeN(index_mapping);
}
void *BM_mesh_mapping(BMesh *bm_src, BMesh *bm_dst, const char htype)
@@ -491,9 +497,8 @@
switch (htype) {
case BM_VERT:
- index_mapping = MEM_mallocN(bm_dst->totvert, "index_mapping bmesh_data_transfer.c");
-/// BM_ITER_MESH_INDEX (v_dst, &iter, bm_dst, BM_VERTS_OF_MESH, a) {
- for (v_dst = BM_iter_new(&iter, bm_dst, BM_VERTS_OF_MESH, NULL), a = 0; v_dst; v_dst = BM_iter_step(&iter), (a)++) {
+ index_mapping = MEM_mallocN(bm_dst->totvert * sizeof(*index_mapping), "index_mapping bmesh_data_transfer.c");
+ BM_ITER_MESH_INDEX (v_dst, &iter, bm_dst, BM_VERTS_OF_MESH, a) {
v_src = BKE_bmbvh_find_vert_closest(bmtree_src, v_dst->co, FLT_MAX);
if (v_src != NULL) {
@@ -507,7 +512,7 @@
break;
case BM_LOOP:
- index_mapping = MEM_mallocN(bm_dst->totloop, "index_mapping bmesh_data_transfer.c");
+ index_mapping = MEM_mallocN(bm_dst->totloop * sizeof(*index_mapping), "index_mapping bmesh_data_transfer.c");
BM_ITER_MESH_INDEX (f_dst, &fiter, bm_dst, BM_FACES_OF_MESH, a) {
@@ -530,15 +535,16 @@
break;
default:
- ///raises an error!
-// BKE_bmbvh_free(bmtree_src);
+ BKE_bmbvh_free(bmtree_src);
+ MEM_freeN(em_src);
return false;
//break;
}
-///raises an error!
-// BKE_bmbvh_free(bmtree_src);
+ BKE_bmbvh_free(bmtree_src);
+ MEM_freeN(em_src);
+
return index_mapping;
}
More information about the Bf-blender-cvs
mailing list