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>2007-01-03 01:40:45 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2007-01-03 01:40:45 +0300
commit6286f8b565573623aa4b7af4f7755a98830cec58 (patch)
tree86773d5cc0388f0a1954fab3c55ace53616cccdc /source/blender/src/multires.c
parentd813fb3da811d391b6b568fb077b2f3e538ce4db (diff)
Multires bugfix: when deleting lower levels, edge flags should be subdivided to the next level.
Diffstat (limited to 'source/blender/src/multires.c')
-rw-r--r--source/blender/src/multires.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c
index c777a218007..e8ae28b9282 100644
--- a/source/blender/src/multires.c
+++ b/source/blender/src/multires.c
@@ -790,12 +790,22 @@ void multires_free_level(MultiresLevel *lvl)
void multires_del_lower(void *ob, void *me)
{
Multires *mr= ((Mesh*)me)->mr;
- MultiresLevel *lvl= BLI_findlink(&mr->levels,mr->current-1);
+ MultiresLevel *lvl= mr->levels.first;
MultiresLevel *lvlprev;
+ short *edgeflags= NULL;
+ int i, last;
multires_check_state();
- lvl= lvl->prev;
+ /* Subdivide the edge flags to the current level */
+ edgeflags= MEM_callocN(sizeof(short)*current_level(mr)->totedge, "Multires Edge Flags");
+ last= lvl->totedge * pow(2, mr->current-1);
+ for(i=0; i<last; ++i)
+ edgeflags[i] = mr->edge_flags[(int)(i / pow(2, mr->current-1))];
+ MEM_freeN(mr->edge_flags);
+ mr->edge_flags= edgeflags;
+
+ lvl= current_level(mr)->prev;
while(lvl) {
lvlprev= lvl->prev;