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:
-rw-r--r--source/blender/blenkernel/intern/BME_tools.c1
-rw-r--r--source/blender/blenkernel/intern/armature.c1
-rw-r--r--source/blender/blenkernel/intern/cloth.c1
-rw-r--r--source/blender/blenkernel/intern/constraint.c1
-rw-r--r--source/blender/blenkernel/intern/customdata.c11
-rw-r--r--source/blender/blenkernel/intern/deform.c1
-rw-r--r--source/blender/blenkernel/intern/editderivedbmesh.c49
-rw-r--r--source/blender/blenkernel/intern/key.c1
-rw-r--r--source/blender/blenkernel/intern/lattice.c1
-rw-r--r--source/blender/blenkernel/intern/mesh.c2
-rw-r--r--source/blender/blenkernel/intern/modifier.c1
-rw-r--r--source/blender/blenkernel/intern/modifiers_bmesh.c11
-rw-r--r--source/blender/blenkernel/intern/particle.c1
-rw-r--r--source/blender/blenkernel/intern/softbody.c1
-rw-r--r--source/blender/blenlib/BLI_cellalloc.h43
-rw-r--r--source/blender/blenlib/intern/BLI_cellalloc.c151
-rw-r--r--source/blender/blenlib/intern/BLI_mempool.c2
-rw-r--r--source/blender/blenloader/intern/readfile.c1
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.c25
-rw-r--r--source/blender/editors/object/object_vgroup.c23
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c1
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c8
22 files changed, 302 insertions, 35 deletions
diff --git a/source/blender/blenkernel/intern/BME_tools.c b/source/blender/blenkernel/intern/BME_tools.c
index 32065ea5151..15ef809158b 100644
--- a/source/blender/blenkernel/intern/BME_tools.c
+++ b/source/blender/blenkernel/intern/BME_tools.c
@@ -44,6 +44,7 @@
#include "BKE_bmesh.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
/*split this all into a seperate bevel.c file in src*/
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 7b894d79b45..31ae4d6cbec 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -38,6 +38,7 @@
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
#include "DNA_armature_types.h"
#include "DNA_action_types.h"
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 9e105b00e15..c3a3f57cd40 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -48,6 +48,7 @@
#include "BKE_pointcache.h"
#include "BLI_kdopbvh.h"
+#include "BLI_cellalloc.h"
#ifdef _WIN32
void tstart ( void )
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index f1420db706f..a9611039dab 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -38,6 +38,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_editVert.h"
+#include "BLI_cellalloc.h"
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 7e67391743a..bda204409b2 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -38,6 +38,7 @@
#include "BLI_blenlib.h"
#include "BLI_linklist.h"
#include "BLI_mempool.h"
+#include "BLI_cellalloc.h"
#include "DNA_customdata_types.h"
#include "DNA_listBase.h"
@@ -112,7 +113,7 @@ static void layerCopy_mdeformvert(const void *source, void *dest,
MDeformVert *dvert = (MDeformVert *)((char *)dest + i * size);
if(dvert->totweight) {
- MDeformWeight *dw = MEM_callocN(dvert->totweight * sizeof(*dw),
+ MDeformWeight *dw = BLI_cellalloc_calloc(dvert->totweight * sizeof(*dw),
"layerCopy_mdeformvert dw");
memcpy(dw, dvert->dw, dvert->totweight * sizeof(*dw));
@@ -131,7 +132,7 @@ static void layerFree_mdeformvert(void *data, int count, int size)
MDeformVert *dvert = (MDeformVert *)((char *)data + i * size);
if(dvert->dw) {
- MEM_freeN(dvert->dw);
+ BLI_cellalloc_free(dvert->dw);
dvert->dw = NULL;
dvert->totweight = 0;
}
@@ -173,7 +174,7 @@ static void layerInterp_mdeformvert(void **sources, float *weights,
/* if this def_nr is not in the list, add it */
if(!node) {
- MDeformWeight *tmp_dw = MEM_callocN(sizeof(*tmp_dw),
+ MDeformWeight *tmp_dw = BLI_cellalloc_calloc(sizeof(*tmp_dw),
"layerInterp_mdeformvert tmp_dw");
tmp_dw->def_nr = dw->def_nr;
tmp_dw->weight = dw->weight * interp_weight;
@@ -184,10 +185,10 @@ static void layerInterp_mdeformvert(void **sources, float *weights,
}
/* now we know how many unique deform weights there are, so realloc */
- if(dvert->dw) MEM_freeN(dvert->dw);
+ if(dvert->dw) BLI_cellalloc_free(dvert->dw);
if(totweight) {
- dvert->dw = MEM_callocN(sizeof(*dvert->dw) * totweight,
+ dvert->dw = BLI_cellalloc_calloc(sizeof(*dvert->dw) * totweight,
"layerInterp_mdeformvert dvert->dw");
dvert->totweight = totweight;
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 47736865273..9ad004cff5f 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -60,6 +60,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "BLI_cellalloc.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
diff --git a/source/blender/blenkernel/intern/editderivedbmesh.c b/source/blender/blenkernel/intern/editderivedbmesh.c
index d6f31847ca5..b9f81911518 100644
--- a/source/blender/blenkernel/intern/editderivedbmesh.c
+++ b/source/blender/blenkernel/intern/editderivedbmesh.c
@@ -132,6 +132,45 @@ static void BMEdit_RecalcTesselation_intern(BMEditMesh *tm)
if (tm->looptris) MEM_freeN(tm->looptris);
+#if 0 //simple quad/triangle code for performance testing purposes
+ looptris = MEM_callocN(sizeof(void*)*bm->totface*8, "looptris");
+
+ f = BMIter_New(&iter, bm, BM_FACES_OF_MESH, NULL);
+ for ( ; f; f=BMIter_Step(&iter)) {
+ EditVert *v, *lastv=NULL, *firstv=NULL;
+ EditEdge *e;
+ EditFace *efa;
+
+ /*don't consider two-edged faces*/
+ if (f->len < 3) continue;
+
+ //V_GROW(looptris);
+ //V_GROW(looptris);
+ //V_GROW(looptris);
+
+ looptris[i*3] = f->loopbase;
+ looptris[i*3+1] = f->loopbase->head.next;
+ looptris[i*3+2] = f->loopbase->head.next->next;
+ i++;
+
+ if (f->len > 3) {
+ //V_GROW(looptris);
+ //V_GROW(looptris);
+ //V_GROW(looptris);
+
+ looptris[i*3] = f->loopbase;
+ looptris[i*3+1] = f->loopbase->head.next->next;
+ looptris[i*3+2] = f->loopbase->head.next->next->next;
+ i++;
+ }
+
+ }
+
+ tm->tottri = i;
+ tm->looptris = looptris;
+ return;
+#endif
+
f = BMIter_New(&iter, bm, BM_FACES_OF_MESH, NULL);
for ( ; f; f=BMIter_Step(&iter)) {
EditVert *v, *lastv=NULL, *firstv=NULL;
@@ -360,7 +399,7 @@ static void bmDM_recalcTesselation(DerivedMesh *dm)
{
EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
- bmdm_recalc_lookups(bmdm);
+ //bmdm_recalc_lookups(bmdm);
}
static void bmDM_foreachMappedVert(DerivedMesh *dm, void (*func)(void *userData, int index, float *co, float *no_f, short *no_s), void *userData)
@@ -1463,9 +1502,9 @@ static void bmDM_release(void *dm)
MEM_freeN(bmdm->faceNos);
}
- BLI_ghash_free(bmdm->fhash, NULL, NULL);
- BLI_ghash_free(bmdm->ehash, NULL, NULL);
- BLI_ghash_free(bmdm->vhash, NULL, NULL);
+ if (bmdm->fhash) BLI_ghash_free(bmdm->fhash, NULL, NULL);
+ if (bmdm->ehash) BLI_ghash_free(bmdm->ehash, NULL, NULL);
+ if (bmdm->vhash) BLI_ghash_free(bmdm->vhash, NULL, NULL);
if (bmdm->vtable) MEM_freeN(bmdm->vtable);
if (bmdm->etable) MEM_freeN(bmdm->etable);
@@ -1630,7 +1669,7 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em, Object *ob,
}
}
- bmdm_recalc_lookups(bmdm);
+ //bmdm_recalc_lookups(bmdm);
return (DerivedMesh*) bmdm;
}
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index a2fa97cabc9..4ba1c46d0c3 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -58,6 +58,7 @@
#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
#ifdef HAVE_CONFIG_H
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 67d63d527cb..70d76d25e93 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -40,6 +40,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "BLI_cellalloc.h"
#include "DNA_armature_types.h"
#include "DNA_mesh_types.h"
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 4448b690af9..617eb370e9f 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -246,7 +246,7 @@ void copy_dverts(MDeformVert *dst, MDeformVert *src, int copycount)
for (i=0; i<copycount; i++){
if (src[i].dw){
- dst[i].dw = MEM_callocN (sizeof(MDeformWeight)*src[i].totweight, "copy_deformWeight");
+ dst[i].dw = BLI_cellalloc_calloc (sizeof(MDeformWeight)*src[i].totweight, "copy_deformWeight");
memcpy (dst[i].dw, src[i].dw, sizeof (MDeformWeight)*src[i].totweight);
}
}
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 2e4146437a2..d796b5b36b1 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -50,6 +50,7 @@
#include "BLI_edgehash.h"
#include "BLI_ghash.h"
#include "BLI_memarena.h"
+#include "BLI_cellalloc.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c
index 36b661e3b1c..d281fb9bd2a 100644
--- a/source/blender/blenkernel/intern/modifiers_bmesh.c
+++ b/source/blender/blenkernel/intern/modifiers_bmesh.c
@@ -45,6 +45,7 @@
#include "BLI_edgehash.h"
#include "BLI_ghash.h"
#include "BLI_memarena.h"
+#include "BLI_cellalloc.h"
#include "MEM_guardedalloc.h"
@@ -288,7 +289,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
int numVerts, numEdges, numFaces;
int maxVerts, maxEdges, maxFaces;
int finalVerts, finalEdges, finalFaces;
- int *indexMap;
+ int *indexMap = NULL;
DerivedMesh *result, *start_cap = NULL, *end_cap = NULL;
MVert *src_mvert;
@@ -406,7 +407,6 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
#define _E(s, i) ((BMVert**)(s)->data.buf)[i]
-#if 0
/*calculate merge mapping*/
if (j == 0) {
BMOperator findop;
@@ -444,20 +444,19 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
BMO_Finish_Op(em->bm, &findop);
}
-#endif
/*generate merge mappping using index map. we do this by using the
operator slots as lookup arrays.*/
#define E(i) (i) < s1->len ? _E(s1, i) : _E(s2, (i)-s1->len)
- /*for (i=0; i<indexLen; i++) {
+ for (i=0; i<indexLen; i++) {
if (!indexMap[i]) continue;
v = E(i);
v2 = E(indexMap[i]-1);
BMO_Insert_MapPointer(em->bm, &weldop, "targetmap", v, v2);
- }*/
+ }
#undef E
#undef _E
@@ -477,7 +476,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
cddm = CDDM_from_BMEditMesh(em, NULL);
BMEdit_Free(em);
- //MEM_freeN(indexMap);
+ MEM_freeN(indexMap);
return cddm;
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 3d895c37884..9aaff82de84 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -56,6 +56,7 @@
#include "BLI_linklist.h"
#include "BLI_rand.h"
#include "BLI_threads.h"
+#include "BLI_cellalloc.h"
#include "BKE_anim.h"
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index aeadbb05cb1..094ea37afff 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -70,6 +70,7 @@ variables on the UI for now
#include "BLI_arithb.h"
#include "BLI_ghash.h"
#include "BLI_threads.h"
+#include "BLI_cellalloc.h"
#include "BKE_curve.h"
#include "BKE_effect.h"
diff --git a/source/blender/blenlib/BLI_cellalloc.h b/source/blender/blenlib/BLI_cellalloc.h
new file mode 100644
index 00000000000..0e6310ef0b4
--- /dev/null
+++ b/source/blender/blenlib/BLI_cellalloc.h
@@ -0,0 +1,43 @@
+/**
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 by Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/*
+ Simple, fast memory allocator that uses many BLI_mempools for allocation.
+ use for allocations < 1024 bytes that simply cannot be rewritten to use
+ mempools directly or memarenas.
+
+ Should really become part of guardedalloc, but I'm not sure how to
+ get it linking with blenlib on all build systems. - joeedh
+*/
+
+void *BLI_cellalloc_malloc(long size, char *tag);
+void *BLI_cellalloc_calloc(long size, char *tag);
+void BLI_cellalloc_free(void *mem);
+void BLI_cellalloc_printleaks(void);
+int BLI_cellalloc_get_totblock(void);
+void BLI_cellalloc_destroy(void);
diff --git a/source/blender/blenlib/intern/BLI_cellalloc.c b/source/blender/blenlib/intern/BLI_cellalloc.c
new file mode 100644
index 00000000000..85ef34900c9
--- /dev/null
+++ b/source/blender/blenlib/intern/BLI_cellalloc.c
@@ -0,0 +1,151 @@
+/**
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 by Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Joseph Eagar
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/*
+ Simple, fast memory allocator that uses many BLI_mempools for allocation.
+ this is meant to be used by lots of relatively small objects.
+*/
+
+#include "MEM_guardedalloc.h"
+
+#include "BKE_utildefines.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_linklist.h"
+
+#include "DNA_listBase.h"
+#include "BLI_mempool.h"
+
+#include <string.h>
+
+static BLI_mempool **pools;
+static int totpool = 0;
+ListBase active_mem = {NULL, NULL};
+static int celltotblock = 0;
+
+#define MEMIDCHECK ('a' | ('b' << 4) | ('c' << 8) | ('d' << 12))
+
+typedef struct MemHeader {
+ struct MemHeader *next, *prev;
+
+ int size;
+ char *tag;
+ int idcheck;
+} MemHeader;
+
+void *BLI_cellalloc_malloc(long size, char *tag)
+{
+ MemHeader *memh;
+ int slot = size + sizeof(MemHeader);
+
+ if (!slot)
+ return NULL;
+
+ if (slot >= totpool) {
+ void *tmp;
+
+ tmp = calloc(1, sizeof(void*)*(slot+1));
+ if (pools) {
+ memcpy(tmp, pools, totpool*sizeof(void*));
+ }
+
+ pools = tmp;
+ totpool = slot+1;
+ }
+
+ if (!pools[slot]) {
+ pools[slot] = BLI_mempool_create(slot, 1, 128);
+ }
+
+ memh = BLI_mempool_alloc(pools[slot]);
+ memh->size = size;
+ memh->idcheck = MEMIDCHECK;
+ memh->tag = tag;
+ BLI_addtail(&active_mem, memh);
+ celltotblock++;
+
+ return memh + 1;
+}
+
+void *BLI_cellalloc_calloc(long size, char *tag)
+{
+ void *mem = BLI_cellalloc_malloc(size, tag);
+ BMEMSET(mem, 0, size);
+
+ return mem;
+}
+
+void BLI_cellalloc_free(void *mem)
+{
+ MemHeader *memh = mem;
+
+ if (!memh)
+ return;
+
+ memh--;
+ if (memh->idcheck != MEMIDCHECK) {
+ printf("Error in BLI_cellalloc: attempt to free invalid block.\n");
+ return;
+ }
+
+ if (memh->size > 0 && memh->size+sizeof(MemHeader) < totpool) {
+ BLI_remlink(&active_mem, memh);
+ BLI_mempool_free(pools[memh->size+sizeof(MemHeader)], memh);
+ celltotblock--;
+ } else {
+ printf("Error in BLI_cellalloc: attempt to free corrupted block.\n");
+ }
+}
+
+void BLI_cellalloc_printleaks(void)
+{
+ MemHeader *memh;
+
+ if (!active_mem.first) return;
+
+ for (memh=active_mem.first; memh; memh=memh->next) {
+ printf("%s %d %p\n", memh->tag, memh->size, memh+1);
+ }
+}
+
+int BLI_cellalloc_get_totblock(void)
+{
+ return celltotblock;
+}
+
+void BLI_cellalloc_destroy(void)
+{
+ int i;
+
+ for (i=0; i<totpool; i++) {
+ if (pools[i]) {
+ BLI_mempool_destroy(pools[i]);
+ pools[i] = NULL;
+ }
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c
index b0c916db357..c553e95ff44 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -21,7 +21,7 @@
*
* The Original Code is: all of this file.
*
- * Contributor(s): none yet.
+ * Contributor(s): Geoffery Bantle
*
* ***** END GPL LICENSE BLOCK *****
*/
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 1be2f074813..3ed39f2611d 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -107,6 +107,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_storage_types.h" // for relname flags
+#include "BLI_cellalloc.h"
#include "BKE_animsys.h"
#include "BKE_action.h"
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index c4e92c64492..ed2c2f20789 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -188,16 +188,19 @@ void BM_Compute_Normals(BMesh *bm)
BMVert *v;
BMFace *f;
BMLoop *l;
-
BMIter verts;
BMIter faces;
BMIter loops;
-
unsigned int maxlength = 0;
float (*projectverts)[3];
+ //return;
+
/*first, find out the largest face in mesh*/
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
+ if (BM_TestHFlag(f, BM_HIDDEN))
+ continue;
+
if(f->len > maxlength) maxlength = f->len;
}
@@ -209,22 +212,36 @@ void BM_Compute_Normals(BMesh *bm)
/*calculate all face normals*/
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
- if (f->head.flag & BM_NONORMCALC) continue;
+ if (BM_TestHFlag(f, BM_HIDDEN))
+ continue;
+ if (f->head.flag & BM_NONORMCALC)
+ continue;
+
bmesh_update_face_normal(bm, f, projectverts);
}
/*Zero out vertex normals*/
- for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v = BMIter_Step(&verts))
+ for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v = BMIter_Step(&verts)) {
+ if (BM_TestHFlag(v, BM_HIDDEN))
+ continue;
+
v->no[0] = v->no[1] = v->no[2] = 0.0;
+ }
/*add face normals to vertices*/
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
+ if (BM_TestHFlag(f, BM_HIDDEN))
+ continue;
+
for(l = BMIter_New(&loops, bm, BM_LOOPS_OF_FACE, f ); l; l = BMIter_Step(&loops))
VecAddf(l->v->no, l->v->no, f->no);
}
/*average the vertex normals*/
for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v= BMIter_Step(&verts)){
+ if (BM_TestHFlag(v, BM_HIDDEN))
+ continue;
+
if (Normalize(v->no)==0.0) {
VECCOPY(v->no, v->co);
Normalize(v->no);
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index 154ab14df60..789cfaa840d 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -47,6 +47,7 @@
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
+#include "BLI_cellalloc.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
@@ -185,10 +186,10 @@ MDeformWeight *verify_defweight (MDeformVert *dv, int defgroup)
if (newdw)
return newdw;
- newdw = MEM_callocN (sizeof(MDeformWeight)*(dv->totweight+1), "deformWeight");
+ newdw = BLI_cellalloc_calloc(sizeof(MDeformWeight)*(dv->totweight+1), "deformWeight");
if (dv->dw){
memcpy (newdw, dv->dw, sizeof(MDeformWeight)*dv->totweight);
- MEM_freeN (dv->dw);
+ BLI_cellalloc_free (dv->dw);
}
dv->dw=newdw;
@@ -577,13 +578,13 @@ void remove_vert_def_nr (Object *ob, int def_nr, int vertnum)
* deform weight, and reshuffle the others
*/
if (dvert->totweight) {
- newdw = MEM_mallocN (sizeof(MDeformWeight)*(dvert->totweight),
+ newdw = BLI_cellalloc_malloc (sizeof(MDeformWeight)*(dvert->totweight),
"deformWeight");
if (dvert->dw){
memcpy (newdw, dvert->dw, sizeof(MDeformWeight)*i);
memcpy (newdw+i, dvert->dw+i+1,
sizeof(MDeformWeight)*(dvert->totweight-i));
- MEM_freeN (dvert->dw);
+ BLI_cellalloc_free (dvert->dw);
}
dvert->dw=newdw;
}
@@ -591,7 +592,7 @@ void remove_vert_def_nr (Object *ob, int def_nr, int vertnum)
* left then just remove the deform weight
*/
else {
- MEM_freeN (dvert->dw);
+ BLI_cellalloc_free (dvert->dw);
dvert->dw = NULL;
break;
}
@@ -677,11 +678,11 @@ void add_vert_defnr (Object *ob, int def_nr, int vertnum,
/* if we are doing an additive assignment, then
* we need to create the deform weight
*/
- newdw = MEM_callocN (sizeof(MDeformWeight)*(dv->totweight+1),
+ newdw = BLI_cellalloc_calloc (sizeof(MDeformWeight)*(dv->totweight+1),
"deformWeight");
if (dv->dw){
memcpy (newdw, dv->dw, sizeof(MDeformWeight)*dv->totweight);
- MEM_freeN (dv->dw);
+ BLI_cellalloc_free (dv->dw);
}
dv->dw=newdw;
@@ -772,10 +773,10 @@ void assign_verts_defgroup (Object *ob, float weight)
}
/* If not: Add the group and set its weight */
if (!done){
- newdw = MEM_callocN (sizeof(MDeformWeight)*(dvert->totweight+1), "deformWeight");
+ newdw = BLI_cellalloc_calloc (sizeof(MDeformWeight)*(dvert->totweight+1), "deformWeight");
if (dvert->dw){
memcpy (newdw, dvert->dw, sizeof(MDeformWeight)*dvert->totweight);
- MEM_freeN (dvert->dw);
+ BLI_cellalloc_free (dvert->dw);
}
dvert->dw=newdw;
@@ -918,7 +919,7 @@ void remove_verts_defgroup (Object *ob, int allverts)
if (eg == dg){
dvert->totweight--;
if (dvert->totweight){
- newdw = MEM_mallocN (sizeof(MDeformWeight)*(dvert->totweight), "deformWeight");
+ newdw = BLI_cellalloc_malloc (sizeof(MDeformWeight)*(dvert->totweight), "deformWeight");
if (dvert->dw){
memcpy (newdw, dvert->dw, sizeof(MDeformWeight)*i);
@@ -928,7 +929,7 @@ void remove_verts_defgroup (Object *ob, int allverts)
dvert->dw=newdw;
}
else{
- MEM_freeN (dvert->dw);
+ BLI_cellalloc_free (dvert->dw);
dvert->dw=NULL;
break;
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 2d44969aaf2..001349b4362 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -44,6 +44,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_memarena.h"
+#include "BLI_cellalloc.h"
#include "MTC_matrixops.h"
#include "DNA_action_types.h"
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 9a268f8be17..d05bc07ce95 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -55,6 +55,7 @@
#include "BKE_packedFile.h"
#include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
#include "RE_pipeline.h" /* RE_ free stuff */
@@ -268,8 +269,11 @@ void WM_exit(bContext *C)
SYS_DeleteSystem(SYS_GetSystem());
- if(MEM_get_memory_blocks_in_use()!=0) {
- printf("Error Totblock: %d\n", MEM_get_memory_blocks_in_use());
+ if(MEM_get_memory_blocks_in_use()!=0 || BLI_cellalloc_get_totblock()!=0) {
+ printf("Error Totblock: %d\n",
+ BLI_cellalloc_get_totblock()+MEM_get_memory_blocks_in_use());
+ BLI_cellalloc_printleaks();
+ BLI_cellalloc_destroy();
MEM_printmemlist();
}
// delete_autosave();