diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2007-01-03 01:40:45 +0300 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2007-01-03 01:40:45 +0300 |
commit | 6286f8b565573623aa4b7af4f7755a98830cec58 (patch) | |
tree | 86773d5cc0388f0a1954fab3c55ace53616cccdc /source/blender/src/multires.c | |
parent | d813fb3da811d391b6b568fb077b2f3e538ce4db (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.c | 14 |
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; |