[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42228] branches/bmesh/blender/source/ blender/bmesh/intern/bmesh_operators.c: validate the index values when an operator finishes since the arrays are looped over anyway .
Campbell Barton
ideasman42 at gmail.com
Mon Nov 28 19:43:34 CET 2011
Revision: 42228
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42228
Author: campbellbarton
Date: 2011-11-28 18:43:34 +0000 (Mon, 28 Nov 2011)
Log Message:
-----------
validate the index values when an operator finishes since the arrays are looped over anyway.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c 2011-11-28 18:32:29 UTC (rev 42227)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c 2011-11-28 18:43:34 UTC (rev 42228)
@@ -820,6 +820,7 @@
BMIter iter;
BLI_mempool *oldpool = bm->toolflagpool; /*old flag pool*/
+ BLI_mempool *newpool;
void *oldflags;
/* store memcpy size for reuse */
@@ -828,24 +829,24 @@
bm->totflags++;
/*allocate new flag pool*/
- bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, FALSE, FALSE);
+ bm->toolflagpool= newpool= BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, FALSE, FALSE);
/*now go through and memcpy all the flags. Loops don't get a flag layer at this time...*/
- for(ele = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++){
+ for (ele = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
oldflags = ele->flags;
- ele->flags = BLI_mempool_calloc(bm->toolflagpool);
+ ele->flags = BLI_mempool_calloc(newpool);
memcpy(ele->flags, oldflags, old_totflags_size);
BM_SetIndex(ele, i); /* set_inline */
}
- for(ele = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++){
+ for (ele = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
oldflags = ele->flags;
- ele->flags = BLI_mempool_calloc(bm->toolflagpool);
+ ele->flags = BLI_mempool_calloc(newpool);
memcpy(ele->flags, oldflags, old_totflags_size);
BM_SetIndex(ele, i); /* set_inline */
}
- for(ele = BMIter_New(&iter, bm, BM_FACES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++){
+ for (ele = BMIter_New(&iter, bm, BM_FACES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
oldflags = ele->flags;
- ele->flags = BLI_mempool_calloc(bm->toolflagpool);
+ ele->flags = BLI_mempool_calloc(newpool);
memcpy(ele->flags, oldflags, old_totflags_size);
BM_SetIndex(ele, i); /* set_inline */
}
@@ -857,38 +858,46 @@
static void free_flag_layer(BMesh *bm)
{
- BMVert *v;
- BMEdge *e;
- BMFace *f;
+ BMHeader *ele;
+ /* set the index values since we are looping over all data anyway,
+ * may save time later on */
+ int i;
- BMIter verts;
- BMIter edges;
- BMIter faces;
+ BMIter iter;
BLI_mempool *oldpool = bm->toolflagpool;
+ BLI_mempool *newpool;
void *oldflags;
+ /* store memcpy size for reuse */
+ const size_t new_totflags_size= ((bm->totflags-1) * sizeof(BMFlagLayer));
+
/*de-increment the totflags first...*/
bm->totflags--;
/*allocate new flag pool*/
- bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, TRUE, FALSE);
+ bm->toolflagpool= newpool= BLI_mempool_create(new_totflags_size, 512, 512, TRUE, FALSE);
/*now go through and memcpy all the flags*/
- for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BMIter_Step(&verts)){
- oldflags = v->head.flags;
- v->head.flags = BLI_mempool_calloc(bm->toolflagpool);
- memcpy(v->head.flags, oldflags, sizeof(BMFlagLayer)*bm->totflags); /*correct?*/
+ for (ele = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ oldflags = ele->flags;
+ ele->flags = BLI_mempool_calloc(newpool);
+ memcpy(ele->flags, oldflags, new_totflags_size);
+ BM_SetIndex(ele, i); /* set_inline */
}
- for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BMIter_Step(&edges)){
- oldflags = e->head.flags;
- e->head.flags = BLI_mempool_calloc(bm->toolflagpool);
- memcpy(e->head.flags, oldflags, sizeof(BMFlagLayer)*bm->totflags);
+ for (ele = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ oldflags = ele->flags;
+ ele->flags = BLI_mempool_calloc(newpool);
+ memcpy(ele->flags, oldflags, new_totflags_size);
+ BM_SetIndex(ele, i); /* set_inline */
}
- for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)){
- oldflags = f->head.flags;
- f->head.flags = BLI_mempool_calloc(bm->toolflagpool);
- memcpy(f->head.flags, oldflags, sizeof(BMFlagLayer)*bm->totflags);
+ for (ele = BMIter_New(&iter, bm, BM_FACES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ oldflags = ele->flags;
+ ele->flags = BLI_mempool_calloc(newpool);
+ memcpy(ele->flags, oldflags, new_totflags_size);
+ BM_SetIndex(ele, i); /* set_inline */
}
+ bm->elem_index_dirty &= ~(BM_VERT|BM_EDGE|BM_FACE);
+
BLI_mempool_destroy(oldpool);
}
More information about the Bf-blender-cvs
mailing list