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:
authorJoseph Eagar <joeedh@gmail.com>2011-03-03 10:10:42 +0300
committerJoseph Eagar <joeedh@gmail.com>2011-03-03 10:10:42 +0300
commita147a91899f97adccb7049965a4cd4dfd5693eb6 (patch)
treebf2734c1e5a82d9e1726d64ad33061f7ea1156eb /source/blender/blenkernel/intern/multires.c
parent065a7f4e2f4509c99cef33af6a4446292224699f (diff)
=bmesh=
Fixed view selected code. Made MDisps->disps use the special allocation library I wrote as a temporary fix to MDeformGroup->dw problems. Why was the vgroup solution reused? It's really slow, and its hard to tie in something like mempool or memarena. The hackish allocator I wrote really needs to go, eventually, or be folded into guardedalloc. Also fixed a customdata bug with modifiers.
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r--source/blender/blenkernel/intern/multires.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index f2c5a9cbf37..a3d74e95309 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -39,6 +39,7 @@
#include "BLI_pbvh.h"
#include "BLI_editVert.h"
#include "BLI_utildefines.h"
+#include "BLI_cellalloc.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
@@ -320,10 +321,10 @@ static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl)
/* reallocate displacements to be filled in */
for(i = 0; i < me->totloop; ++i) {
int totdisp = multires_grid_tot[lvl];
- float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps");
+ float (*disps)[3] = BLI_cellalloc_calloc(sizeof(float) * 3 * totdisp, "multires disps");
if(mdisps[i].disps)
- MEM_freeN(mdisps[i].disps);
+ BLI_cellalloc_free(mdisps[i].disps);
mdisps[i].disps = disps;
mdisps[i].totdisp = totdisp;
@@ -402,7 +403,7 @@ static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
float (*disps)[3], (*ndisps)[3], (*hdisps)[3];
int totdisp = multires_grid_tot[lvl];
- disps = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps");
+ disps = BLI_cellalloc_calloc(sizeof(float) * 3 * totdisp, "multires disps");
ndisps = disps;
hdisps = mdisp->disps;
@@ -412,7 +413,7 @@ static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
ndisps += nsize*nsize;
hdisps += hsize*hsize;
- MEM_freeN(mdisp->disps);
+ BLI_cellalloc_free(mdisp->disps);
mdisp->disps = disps;
mdisp->totdisp = totdisp;
}
@@ -737,7 +738,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, int invert, int
int S, x, y, gIndex = gridOffset[i];
for(S = 0; S < numVerts; ++S, ++gIndex, ++k) {
- MDisps *mdisp = &mdisps[k];
+ MDisps *mdisp = &mdisps[mpoly[i].loopstart+S];
DMGridData *grid = gridData[gIndex];
DMGridData *subgrid = subGridData[gIndex];
float (*dispgrid)[3] = NULL;
@@ -1033,7 +1034,7 @@ static void old_mdisps_convert(MFace *mface, MDisps *mdisp)
int x, y, S;
float (*disps)[3], (*out)[3], u, v;
- disps = MEM_callocN(sizeof(float) * 3 * newtotdisp, "multires disps");
+ disps = BLI_cellalloc_calloc(sizeof(float) * 3 * newtotdisp, "multires disps");
out = disps;
for(S = 0; S < nvert; S++) {
@@ -1050,7 +1051,7 @@ static void old_mdisps_convert(MFace *mface, MDisps *mdisp)
}
}
- MEM_freeN(mdisp->disps);
+ BLI_cellalloc_free(mdisp->disps);
mdisp->totdisp= newtotdisp;
mdisp->disps= disps;
@@ -1079,7 +1080,7 @@ void multires_load_old_250(Mesh *me)
int totdisp = mdisps[i].totdisp / nvert;
for (j=0; j < mf->v4 ? 4 : 3; j++, k++) {
- mdisps2[k].disps = MEM_callocN(sizeof(float)*3*totdisp, "multires disp in conversion");
+ mdisps2[k].disps = BLI_cellalloc_calloc(sizeof(float)*3*totdisp, "multires disp in conversion");
mdisps2[k].totdisp = totdisp;
memcpy(mdisps2[k].disps, mdisps[i].disps + totdisp*j, totdisp);
}
@@ -1781,7 +1782,7 @@ void multires_topology_changed(Scene *scene, Object *ob)
if(!mdisp->totdisp) {
if(grid) {
mdisp->totdisp= nvert*grid;
- mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
+ mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
}
continue;
@@ -1793,9 +1794,9 @@ void multires_topology_changed(Scene *scene, Object *ob)
mdisp->totdisp= (mdisp->totdisp/corners)*nvert;
if(mdisp->disps)
- MEM_freeN(mdisp->disps);
+ BLI_cellalloc_free(mdisp->disps);
- mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
+ mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
}
}
}
@@ -2150,13 +2151,13 @@ void mdisp_join_tris(MDisps *dst, MDisps *tri1, MDisps *tri2)
MDisps *src;
if(dst->disps)
- MEM_freeN(dst->disps);
+ BLI_cellalloc_free(dst->disps);
side = sqrt(tri1->totdisp / 3);
st = (side<<1)-1;
dst->totdisp = 4 * side * side;
- out = dst->disps = MEM_callocN(3*dst->totdisp*sizeof(float), "join disps");
+ out = dst->disps = BLI_cellalloc_calloc(3*dst->totdisp*sizeof(float), "join disps");
for(S = 0; S < 4; S++)
for(y = 0; y < side; ++y)