[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44161] branches/bmesh/blender/source/ blender: more knit-picky memory saving
Campbell Barton
ideasman42 at gmail.com
Thu Feb 16 17:44:13 CET 2012
Revision: 44161
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44161
Author: campbellbarton
Date: 2012-02-16 16:44:10 +0000 (Thu, 16 Feb 2012)
Log Message:
-----------
more knit-picky memory saving
don't store a flag array, (or pointer to a flag array) per BMLoop.
saves 4 pointers per quad - obviously, so this can add up a bit.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c
branches/bmesh/blender/source/blender/bmesh/operators/bmo_create.c
branches/bmesh/blender/source/blender/bmesh/operators/bmo_dupe.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_class.h 2012-02-16 16:38:05 UTC (rev 44160)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_class.h 2012-02-16 16:44:10 UTC (rev 44161)
@@ -50,7 +50,6 @@
*/
typedef struct BMHeader {
void *data; /* customdata layers */
- struct BMFlagLayer *flags;
int index; /* notes:
* - Use BM_elem_index_get/SetIndex macros for index
* - Unitialized to -1 so we can easily tell its not set.
@@ -68,6 +67,8 @@
typedef struct BMVert {
BMHeader head;
+ struct BMFlagLayer *oflags; /* keep after header, an array of flags, mostly used by the operator stack */
+
float co[3];
float no[3];
struct BMEdge *e;
@@ -80,6 +81,8 @@
typedef struct BMEdge {
BMHeader head;
+ struct BMFlagLayer *oflags; /* keep after header, an array of flags, mostly used by the operator stack */
+
struct BMVert *v1, *v2;
struct BMLoop *l;
@@ -89,6 +92,8 @@
typedef struct BMLoop {
BMHeader head;
+ /* notice no flags layer */
+
struct BMVert *v;
struct BMEdge *e;
struct BMFace *f;
@@ -100,6 +105,12 @@
struct BMLoop *next, *prev;
} BMLoop;
+/* can cast BMFace/BMEdge/BMVert, but NOT BMLoop, since these dont have a flag layer */
+typedef struct BMElemF {
+ BMHeader head;
+ struct BMFlagLayer *oflags; /* keep after header, an array of flags, mostly used by the operator stack */
+} BMElemF;
+
#ifdef USE_BMESH_HOLES
/* eventually, this structure will be used for supporting holes in faces */
typedef struct BMLoopList {
@@ -110,6 +121,8 @@
typedef struct BMFace {
BMHeader head;
+ struct BMFlagLayer *oflags; /* an array of flags, mostly used by the operator stack */
+
int len; /*includes all boundary loops*/
#ifdef USE_BMESH_HOLES
int totbounds; /*total boundaries, is one plus the number of holes in the face*/
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h 2012-02-16 16:38:05 UTC (rev 44160)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h 2012-02-16 16:44:10 UTC (rev 44161)
@@ -178,10 +178,10 @@
* ghash or a mapping slot to do it. */
/* flags 15 and 16 (1<<14 and 1<<15) are reserved for bmesh api use */
-#define BMO_elem_flag_test(bm, element, oflag) (((BMHeader*)(element))->flags[bm->stackdepth-1].f & (oflag))
-#define BMO_elem_flag_enable(bm, element, oflag) (((BMHeader*)(element))->flags[bm->stackdepth-1].f |= (oflag))
-#define BMO_elem_flag_disable(bm, element, oflag) (((BMHeader*)(element))->flags[bm->stackdepth-1].f &= ~(oflag))
-#define BMO_elem_flag_toggle(bm, element, oflag) (((BMHeader*)(element))->flags[bm->stackdepth-1].f ^= (oflag))
+#define BMO_elem_flag_test(bm, element, oflag) ((element)->oflags[bm->stackdepth-1].f & (oflag))
+#define BMO_elem_flag_enable(bm, element, oflag) ((element)->oflags[bm->stackdepth-1].f |= (oflag))
+#define BMO_elem_flag_disable(bm, element, oflag) ((element)->oflags[bm->stackdepth-1].f &= ~(oflag))
+#define BMO_elem_flag_toggle(bm, element, oflag) ((element)->oflags[bm->stackdepth-1].f ^= (oflag))
/* profiling showed a significant amount of time spent in BMO_elem_flag_test */
#if 0
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2012-02-16 16:38:05 UTC (rev 44160)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2012-02-16 16:44:10 UTC (rev 44161)
@@ -408,20 +408,20 @@
{
BMVert *v;
BMEdge *e;
- BMLoop *f;
+ BMFace *f;
BMIter verts;
BMIter edges;
BMIter faces;
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BM_iter_step(&verts)) {
- if (BMO_elem_flag_test(bm, (BMHeader *)v, oflag)) {
+ if (BMO_elem_flag_test(bm, v, oflag)) {
/* Visit edge */
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_VERT, v); e; e = BM_iter_step(&edges))
- BMO_elem_flag_enable(bm, (BMHeader *)e, oflag);
+ BMO_elem_flag_enable(bm, e, oflag);
/* Visit face */
for (f = BM_iter_new(&faces, bm, BM_FACES_OF_VERT, v); f; f = BM_iter_step(&faces))
- BMO_elem_flag_enable(bm, (BMHeader *)f, oflag);
+ BMO_elem_flag_enable(bm, f, oflag);
}
}
@@ -439,9 +439,9 @@
BMIter faces;
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) {
- if (BMO_elem_flag_test(bm, (BMHeader *)e, oflag)) {
+ if (BMO_elem_flag_test(bm, e, oflag)) {
for (f = BM_iter_new(&faces, bm, BM_FACES_OF_EDGE, e); f; f = BM_iter_step(&faces)) {
- BMO_elem_flag_enable(bm, (BMHeader *)f, oflag);
+ BMO_elem_flag_enable(bm, f, oflag);
}
}
}
@@ -474,16 +474,16 @@
{
/* flush down to vert */
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) {
- if (BMO_elem_flag_test(bm, (BMHeader *)e, oflag)) {
- BMO_elem_flag_enable(bm, (BMHeader *)(e->v1), oflag);
- BMO_elem_flag_enable(bm, (BMHeader *)(e->v2), oflag);
+ if (BMO_elem_flag_test(bm, e, oflag)) {
+ BMO_elem_flag_enable(bm, e->v1, oflag);
+ BMO_elem_flag_enable(bm, e->v2, oflag);
}
}
bmo_remove_tagged_context_edges(bm, oflag);
/* remove loose vertice */
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BM_iter_step(&verts)) {
- if (BMO_elem_flag_test(bm, (BMHeader *)v, oflag) && (!(v->e)))
- BMO_elem_flag_enable(bm, (BMHeader *)v, DEL_WIREVERT);
+ if (BMO_elem_flag_test(bm, v, oflag) && (!(v->e)))
+ BMO_elem_flag_enable(bm, v, DEL_WIREVERT);
}
BMO_remove_tagged_verts(bm, DEL_WIREVERT);
@@ -513,29 +513,29 @@
{
/* go through and mark all edges and all verts of all faces for delet */
for (f = BM_iter_new(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BM_iter_step(&faces)) {
- if (BMO_elem_flag_test(bm, (BMHeader *)f, oflag)) {
+ if (BMO_elem_flag_test(bm, f, oflag)) {
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&edges))
- BMO_elem_flag_enable(bm, (BMHeader *)e, oflag);
+ BMO_elem_flag_enable(bm, e, oflag);
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&verts))
- BMO_elem_flag_enable(bm, (BMHeader *)v, oflag);
+ BMO_elem_flag_enable(bm, v, oflag);
}
}
/* now go through and mark all remaining faces all edges for keeping */
for (f = BM_iter_new(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BM_iter_step(&faces)) {
- if (!BMO_elem_flag_test(bm, (BMHeader *)f, oflag)) {
+ if (!BMO_elem_flag_test(bm, f, oflag)) {
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&edges)) {
- BMO_elem_flag_disable(bm, (BMHeader *)e, oflag);
+ BMO_elem_flag_disable(bm, e, oflag);
}
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&verts)) {
- BMO_elem_flag_disable(bm, (BMHeader *)v, oflag);
+ BMO_elem_flag_disable(bm, v, oflag);
}
}
}
/* also mark all the vertices of remaining edges for keeping */
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges)) {
- if (!BMO_elem_flag_test(bm, (BMHeader *)e, oflag)) {
- BMO_elem_flag_disable(bm, (BMHeader *)e->v1, oflag);
- BMO_elem_flag_disable(bm, (BMHeader *)e->v2, oflag);
+ if (!BMO_elem_flag_test(bm, e, oflag)) {
+ BMO_elem_flag_disable(bm, e->v1, oflag);
+ BMO_elem_flag_disable(bm, e->v2, oflag);
}
}
/* now delete marked face */
@@ -551,11 +551,11 @@
{
/* does this option even belong in here? */
for (f = BM_iter_new(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BM_iter_step(&faces))
- BMO_elem_flag_enable(bm, (BMHeader *)f, oflag);
+ BMO_elem_flag_enable(bm, f, oflag);
for (e = BM_iter_new(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BM_iter_step(&edges))
- BMO_elem_flag_enable(bm, (BMHeader *)e, oflag);
+ BMO_elem_flag_enable(bm, e, oflag);
for (v = BM_iter_new(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BM_iter_step(&verts))
- BMO_elem_flag_enable(bm, (BMHeader *)v, oflag);
+ BMO_elem_flag_enable(bm, v, oflag);
BMO_remove_tagged_faces(bm, oflag);
BMO_remove_tagged_edges(bm, oflag);
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2012-02-16 16:38:05 UTC (rev 44160)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2012-02-16 16:44:10 UTC (rev 44161)
@@ -70,7 +70,7 @@
if (co) copy_v3_v3(v->co, co);
/* allocate flag */
- v->head.flags = BLI_mempool_calloc(bm->toolflagpool);
+ v->oflags = BLI_mempool_calloc(bm->toolflagpool);
CustomData_bmesh_set_default(&bm->vdata, &v->head.data);
@@ -129,7 +129,7 @@
e->head.htype = BM_EDGE;
/* allocate flag */
- e->head.flags = BLI_mempool_calloc(bm->toolflagpool);
+ e->oflags = BLI_mempool_calloc(bm->toolflagpool);
e->v1 = (BMVert *) v1;
e->v2 = (BMVert *) v2;
@@ -307,7 +307,7 @@
}
/* allocate flag */
- f->head.flags = BLI_mempool_calloc(bm->toolflagpool);
+ f->oflags = BLI_mempool_calloc(bm->toolflagpool);
CustomData_bmesh_set_default(&bm->pdata, &f->head.data);
@@ -464,7 +464,7 @@
if (v->head.data)
CustomData_bmesh_free_block(&bm->vdata, &v->head.data);
- BLI_mempool_free(bm->toolflagpool, v->head.flags);
+ BLI_mempool_free(bm->toolflagpool, v->oflags);
BLI_mempool_free(bm->vpool, v);
}
@@ -478,7 +478,7 @@
if (e->head.data)
CustomData_bmesh_free_block(&bm->edata, &e->head.data);
- BLI_mempool_free(bm->toolflagpool, e->head.flags);
+ BLI_mempool_free(bm->toolflagpool, e->oflags);
BLI_mempool_free(bm->epool, e);
}
@@ -495,7 +495,7 @@
if (f->head.data)
CustomData_bmesh_free_block(&bm->pdata, &f->head.data);
- BLI_mempool_free(bm->toolflagpool, f->head.flags);
+ BLI_mempool_free(bm->toolflagpool, f->oflags);
BLI_mempool_free(bm->fpool, f);
}
@@ -505,8 +505,6 @@
if (l->head.data)
CustomData_bmesh_free_block(&bm->ldata, &l->head.data);
- if (l->head.flags)
- BLI_mempool_free(bm->toolflagpool, l->head.flags);
BLI_mempool_free(bm->lpool, l);
}
@@ -766,7 +764,7 @@
int i;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list