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:
authorNicholas Bishop <nicholasbishop@gmail.com>2006-12-20 11:12:32 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2006-12-20 11:12:32 +0300
commit547be2a5ce4a73a633fbf13a11d82141ba8b16d3 (patch)
tree175b6e05d95aeac0242d1bfbe2ef5f7ee3968341 /source/blender/src/multires.c
parent3ed0c210d128c9fa7d614aad389bb08240777dd6 (diff)
As Brecht suggested, changed multires vert maps to use one big chunk of memory rather than many small ones.
Diffstat (limited to 'source/blender/src/multires.c')
-rw-r--r--source/blender/src/multires.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c
index 87b3b2b2a4b..50ded1931e3 100644
--- a/source/blender/src/multires.c
+++ b/source/blender/src/multires.c
@@ -107,6 +107,11 @@ void multires_undo_push(char *str)
BIF_undo_push(str);
}
+typedef struct MultiresMapNode {
+ struct MultiresMapNode *next, *prev;
+ unsigned Index;
+} MultiresMapNode;
+
void Vec3fAvg3(float *out, float *v1, float *v2, float *v3)
{
out[0]= (v1[0]+v2[0]+v3[0])/3;
@@ -737,20 +742,15 @@ void multires_free(Multires *mr)
void multires_free_level(MultiresLevel *lvl)
{
if(lvl) {
- unsigned i;
-
if(lvl->verts) MEM_freeN(lvl->verts);
if(lvl->faces) MEM_freeN(lvl->faces);
if(lvl->edges) MEM_freeN(lvl->edges);
if(lvl->texcolfaces) MEM_freeN(lvl->texcolfaces);
/* Free all vertex maps */
- for(i=0; i<lvl->totvert; ++i)
- BLI_freelistN(&lvl->vert_edge_map[i]);
- for(i=0; i<lvl->totvert; ++i)
- BLI_freelistN(&lvl->vert_face_map[i]);
MEM_freeN(lvl->vert_edge_map);
MEM_freeN(lvl->vert_face_map);
+ MEM_freeN(lvl->map_mem);
}
}
@@ -1591,21 +1591,22 @@ void multires_calc_level_maps(MultiresLevel *lvl)
unsigned i,j;
MultiresMapNode *indexnode= NULL;
+ lvl->map_mem= MEM_mallocN(sizeof(MultiresMapNode)*(lvl->totedge*2 + lvl->totface*4), "map_mem");
+ indexnode= lvl->map_mem;
+
lvl->vert_edge_map= MEM_callocN(sizeof(ListBase)*lvl->totvert,"vert_edge_map");
for(i=0; i<lvl->totedge; ++i) {
- for(j=0; j<2; ++j) {
- indexnode= MEM_callocN(sizeof(MultiresMapNode),"vert_edge_map indexnode");
+ for(j=0; j<2; ++j, ++indexnode) {
indexnode->Index= i;
- BLI_addtail(&lvl->vert_edge_map[lvl->edges[i].v[j]],indexnode);
+ BLI_addtail(&lvl->vert_edge_map[lvl->edges[i].v[j]], indexnode);
}
}
lvl->vert_face_map= MEM_callocN(sizeof(ListBase)*lvl->totvert,"vert_face_map");
for(i=0; i<lvl->totface; ++i){
- for(j=0; j<(lvl->faces[i].v[3]?4:3); ++j){
- indexnode= MEM_callocN(sizeof(MultiresMapNode),"vert_face_map indexnode");
+ for(j=0; j<(lvl->faces[i].v[3]?4:3); ++j, ++indexnode) {
indexnode->Index= i;
- BLI_addtail(&lvl->vert_face_map[lvl->faces[i].v[j]],indexnode);
+ BLI_addtail(&lvl->vert_face_map[lvl->faces[i].v[j]], indexnode);
}
}
}