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; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs