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:
authorCampbell Barton <ideasman42@gmail.com>2012-03-02 02:17:04 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-02 02:17:04 +0400
commit921a7556fbc4c66267137b767ce93c85d9b4cbd8 (patch)
tree7d816ba9696338c219d18ac4d6f7e3b1f536ebf6 /source/blender/bmesh/intern/bmesh_interp.c
parent2942eab57c9677e87d0830fe5e5da35abb869417 (diff)
bmesh - changes to mempool allocations
* double default edge allocation size (double the number of verts/faces). * CustomData_bmesh_init_pool was using allocsize & chunksize as the same variable. Now use type specific chunk size. * bmesh copy and editmode conversion now allocate the BMesh mempool size needed for the entire vert/edge/loop/face arrays since its known already.
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_interp.c')
-rw-r--r--source/blender/bmesh/intern/bmesh_interp.c44
1 files changed, 27 insertions, 17 deletions
diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c
index 669426b73a6..d2af98a5e9f 100644
--- a/source/blender/bmesh/intern/bmesh_interp.c
+++ b/source/blender/bmesh/intern/bmesh_interp.c
@@ -720,11 +720,11 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data)
BLI_mempool *oldpool = olddata->pool;
void *block;
- CustomData_bmesh_init_pool(data, data == &bm->ldata ? 2048 : 512);
-
if (data == &bm->vdata) {
BMVert *eve;
-
+
+ CustomData_bmesh_init_pool(data, bm->totvert, BM_VERT);
+
BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
block = NULL;
CustomData_bmesh_set_default(data, &block);
@@ -736,6 +736,8 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data)
else if (data == &bm->edata) {
BMEdge *eed;
+ CustomData_bmesh_init_pool(data, bm->totedge, BM_EDGE);
+
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
block = NULL;
CustomData_bmesh_set_default(data, &block);
@@ -744,31 +746,39 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data)
eed->head.data = block;
}
}
- else if (data == &bm->pdata || data == &bm->ldata) {
+ else if (data == &bm->ldata) {
BMIter liter;
BMFace *efa;
BMLoop *l;
+ CustomData_bmesh_init_pool(data, bm->totloop, BM_LOOP);
BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
- if (data == &bm->pdata) {
+ BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
block = NULL;
CustomData_bmesh_set_default(data, &block);
- CustomData_bmesh_copy_data(olddata, data, efa->head.data, &block);
- CustomData_bmesh_free_block(olddata, &efa->head.data);
- efa->head.data = block;
+ CustomData_bmesh_copy_data(olddata, data, l->head.data, &block);
+ CustomData_bmesh_free_block(olddata, &l->head.data);
+ l->head.data = block;
}
+ }
+ }
+ else if (data == &bm->pdata) {
+ BMFace *efa;
- if (data == &bm->ldata) {
- BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, efa) {
- block = NULL;
- CustomData_bmesh_set_default(data, &block);
- CustomData_bmesh_copy_data(olddata, data, l->head.data, &block);
- CustomData_bmesh_free_block(olddata, &l->head.data);
- l->head.data = block;
- }
- }
+ CustomData_bmesh_init_pool(data, bm->totface, BM_FACE);
+
+ BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL) {
+ block = NULL;
+ CustomData_bmesh_set_default(data, &block);
+ CustomData_bmesh_copy_data(olddata, data, efa->head.data, &block);
+ CustomData_bmesh_free_block(olddata, &efa->head.data);
+ efa->head.data = block;
}
}
+ else {
+ /* should never reach this! */
+ BLI_assert(0);
+ }
if (oldpool) {
/* this should never happen but can when dissolve fails - [#28960] */