diff options
author | Joseph Eagar <joeedh@gmail.com> | 2009-09-03 09:52:05 +0400 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2009-09-03 09:52:05 +0400 |
commit | 9bb0b42b9bcd0bdf71104a326777bafde50dacc9 (patch) | |
tree | 087feea399ba2d6b01f402870d8cdab80e475166 /source/blender | |
parent | c753b259dbe89f786e031a3a600193cb6185577d (diff) |
made editmesh<->bmesh conversion work again, hopefully (bleh). also made BLI_edgehash use mempools for allocating the bucket entries, for speed.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenlib/intern/edgehash.c | 13 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_to_editmesh.c | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c index 8976059d153..3624c6c20d4 100644 --- a/source/blender/blenlib/intern/edgehash.c +++ b/source/blender/blenlib/intern/edgehash.c @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" #include "BLI_edgehash.h" +#include "BLI_mempool.h" /***/ @@ -56,6 +57,7 @@ struct Entry { struct EdgeHash { Entry **buckets; + BLI_mempool *epool; int nbuckets, nentries, cursize; }; @@ -68,13 +70,14 @@ EdgeHash *BLI_edgehash_new(void) { eh->nbuckets= hashsizes[eh->cursize]; eh->buckets= MEM_callocN(eh->nbuckets*sizeof(*eh->buckets), "eh buckets 2"); - + eh->epool = BLI_mempool_create(sizeof(Entry), 512, 512); + return eh; } void BLI_edgehash_insert(EdgeHash *eh, int v0, int v1, void *val) { unsigned int hash; - Entry *e= MEM_callocN(sizeof(*e), "edgehash e"); + Entry *e= BLI_mempool_alloc(eh->epool); if (v1<v0) { v0 ^= v1; @@ -154,7 +157,7 @@ void BLI_edgehash_clear(EdgeHash *eh, EdgeHashFreeFP valfreefp) { Entry *n= e->next; if (valfreefp) valfreefp(e->val); - MEM_freeN(e); + BLI_mempool_free(eh->epool, e); e= n; } @@ -166,7 +169,9 @@ void BLI_edgehash_clear(EdgeHash *eh, EdgeHashFreeFP valfreefp) { void BLI_edgehash_free(EdgeHash *eh, EdgeHashFreeFP valfreefp) { BLI_edgehash_clear(eh, valfreefp); - + + BLI_mempool_destroy(eh->epool); + MEM_freeN(eh->buckets); MEM_freeN(eh); } diff --git a/source/blender/bmesh/intern/bmesh_to_editmesh.c b/source/blender/bmesh/intern/bmesh_to_editmesh.c index a082184affc..5a95025d95a 100644 --- a/source/blender/bmesh/intern/bmesh_to_editmesh.c +++ b/source/blender/bmesh/intern/bmesh_to_editmesh.c @@ -265,7 +265,7 @@ void bmesh_make_fgons_exec(BMesh *bmesh, BMOperator *op) BMO_SetFlag(bmesh, face, FACE_NGON); if (trifan) { while (face->len > 4) { - BM_Split_Face(bmesh, face, + face = BM_Split_Face(bmesh, face, face->loopbase->v, ((BMLoop*)face->loopbase->head.next->next)->v, &nl, NULL); |