[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [10906] trunk/blender/source/blender/src/ multires.c: == Multires ==
Nicholas Bishop
nicholasbishop at gmail.com
Sun Jun 10 08:00:45 CEST 2007
Revision: 10906
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=10906
Author: nicholasbishop
Date: 2007-06-10 08:00:42 +0200 (Sun, 10 Jun 2007)
Log Message:
-----------
== Multires ==
Modified the vert_edge_map and vert_face_map arrays in MultiresLevel so that the data is stored only for as long as it is needed -- for adding levels and updating levels. Once the modifications are
complete, the mapping data is deleted, which provides a large reduction in memory usage for a minor increase in processing time for updating levels.
Modified Paths:
--------------
trunk/blender/source/blender/src/multires.c
Modified: trunk/blender/source/blender/src/multires.c
===================================================================
--- trunk/blender/source/blender/src/multires.c 2007-06-10 04:10:25 UTC (rev 10905)
+++ trunk/blender/source/blender/src/multires.c 2007-06-10 06:00:42 UTC (rev 10906)
@@ -609,8 +609,6 @@
multires_load_cols(me);
- multires_calc_level_maps(lvl);
-
allqueue(REDRAWBUTSEDIT, 0);
BIF_undo_push("Make multires");
@@ -641,7 +639,7 @@
lvl->colfaces= MEM_dupallocN(orig->colfaces);
lvl->edges= MEM_dupallocN(orig->edges);
lvl->vert_edge_map= lvl->vert_face_map= NULL;
- multires_calc_level_maps(lvl);
+ lvl->map_mem= NULL;
return lvl;
}
@@ -700,6 +698,19 @@
}
}
+/* Free and clear the vert-edge-face maps */
+void multires_free_maps(MultiresLevel *lvl)
+{
+ if(lvl) {
+ if(lvl->vert_edge_map) MEM_freeN(lvl->vert_edge_map);
+ if(lvl->vert_face_map) MEM_freeN(lvl->vert_face_map);
+ if(lvl->map_mem) MEM_freeN(lvl->map_mem);
+
+ lvl->vert_edge_map = lvl->vert_face_map = NULL;
+ lvl->map_mem = NULL;
+ }
+}
+
/* Does not actually free lvl itself! */
void multires_free_level(MultiresLevel *lvl)
{
@@ -708,10 +719,7 @@
if(lvl->edges) MEM_freeN(lvl->edges);
if(lvl->colfaces) MEM_freeN(lvl->colfaces);
- /* Free all vertex maps */
- MEM_freeN(lvl->vert_edge_map);
- MEM_freeN(lvl->vert_face_map);
- MEM_freeN(lvl->map_mem);
+ multires_free_maps(lvl);
}
}
@@ -880,6 +888,8 @@
lvl->prev->faces[i].mid= lvl->prev->totvert + lvl->prev->totedge + i;
}
+ multires_calc_level_maps(lvl->prev);
+
/* Create faces
============ */
/* Allocate all the new faces (each triangle creates three, and
@@ -936,8 +946,6 @@
}
}
- multires_calc_level_maps(lvl);
-
/* Smooth vertices
=============== */
for(i=0; i<lvl->prev->totface; ++i) {
@@ -976,6 +984,7 @@
}
}
+ multires_free_maps(lvl->prev);
MEM_freeN(oldverts);
/* Vertex Colors
@@ -1385,6 +1394,8 @@
pr_lvl= BLI_findlink(&me->mr->levels,me->mr->current-1);
cr_lvl= pr_lvl->next;
while(cr_lvl) {
+ multires_calc_level_maps(pr_lvl);
+
/* Swap the old/new deltas */
swap_deltas= pr_deltas;
pr_deltas= cr_deltas;
@@ -1437,6 +1448,8 @@
&cr_deltas[i].x);
}
+ multires_free_maps(pr_lvl);
+
pr_lvl= pr_lvl->next;
cr_lvl= cr_lvl->next;
}
More information about the Bf-blender-cvs
mailing list