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>2008-08-14 03:31:29 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2008-08-14 03:31:29 +0400
commit5ad9495bfb0f0cf782595a21a9e4fd420f7fc3bc (patch)
treea6d5d7508b7e7a1b699cac25c6b99417f487f490 /source/blender
parent877f1518ecda9e7542dfe43264ab69f5655f1cfe (diff)
For loading old files: no need to generate maps for the last level.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/multires.c69
1 files changed, 32 insertions, 37 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 24a42f7f838..0b0ea3e7870 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -1040,13 +1040,13 @@ void multires_load_old(DerivedMesh *dm, Multires *mr)
}
- /* calculate vert to edge/face maps for each level */
- fmap = MEM_callocN(sizeof(ListBase*) * mr->level_count, "multires fmap");
- emap = MEM_callocN(sizeof(ListBase*) * mr->level_count, "multires emap");
- fmem = MEM_callocN(sizeof(IndexNode*) * mr->level_count, "multires fmem");
- emem = MEM_callocN(sizeof(IndexNode*) * mr->level_count, "multires emem");
+ /* calculate vert to edge/face maps for each level (except the last) */
+ fmap = MEM_callocN(sizeof(ListBase*) * (mr->level_count-1), "multires fmap");
+ emap = MEM_callocN(sizeof(ListBase*) * (mr->level_count-1), "multires emap");
+ fmem = MEM_callocN(sizeof(IndexNode*) * (mr->level_count-1), "multires fmem");
+ emem = MEM_callocN(sizeof(IndexNode*) * (mr->level_count-1), "multires emem");
lvl = lvl1;
- for(i = 0; i < mr->level_count; ++i) {
+ for(i = 0; i < mr->level_count - 1; ++i) {
create_old_vert_face_map(fmap + i, fmem + i, lvl->faces, lvl->totvert, lvl->totface);
create_old_vert_edge_map(emap + i, emem + i, lvl->edges, lvl->totvert, lvl->totedge);
lvl = lvl->next;
@@ -1054,41 +1054,36 @@ void multires_load_old(DerivedMesh *dm, Multires *mr)
/* Interior face verts */
lvl = lvl1->next->next;
- for(i = 3; i <= 3/*(mr->level_count*/; ++i) {
- tottri = totquad = 0;
- dst = 0;
- for(j = 0; j < lvl1->totface; ++j) {
- int sides = lvl1->faces[j].v[3] ? 4 : 3;
- int ldst = dst + 1 + sides * (st - 1);
-
- for(s = 0; s < sides; ++s) {
- int st2 = multires_side_tot[totlvl - 2] - 2;
- int st3 = multires_side_tot[totlvl - 3] - 2;
- int st4 = st3 == 0 ? 1 : (st3 + 1) / 2;
- int mid = ldst + st2 * st3 + st3;
- int cv = lvl1->faces[j].v[s];
- int nv = lvl1->faces[j].v[s == sides - 1 ? 0 : s + 1];
- int pv = lvl1->faces[j].v[s == 0 ? sides - 1 : s - 1];
-
- multires_load_old_faces(fmap, emap, lvl1->next, vvmap, mid,
- vvmap[dst], cv,
- find_old_edge(emap[0], lvl1->edges, pv, cv)->mid,
- find_old_edge(emap[0], lvl1->edges, cv, nv)->mid,
- st2, st4);
-
- ldst += (st - 1) * (st - 1);
- }
-
-
- dst = ldst;
- if(sides == 4) ++totquad;
- else ++tottri;
+ dst = 0;
+ for(j = 0; j < lvl1->totface; ++j) {
+ int sides = lvl1->faces[j].v[3] ? 4 : 3;
+ int ldst = dst + 1 + sides * (st - 1);
+
+ for(s = 0; s < sides; ++s) {
+ int st2 = multires_side_tot[totlvl - 2] - 2;
+ int st3 = multires_side_tot[totlvl - 3] - 2;
+ int st4 = st3 == 0 ? 1 : (st3 + 1) / 2;
+ int mid = ldst + st2 * st3 + st3;
+ int cv = lvl1->faces[j].v[s];
+ int nv = lvl1->faces[j].v[s == sides - 1 ? 0 : s + 1];
+ int pv = lvl1->faces[j].v[s == 0 ? sides - 1 : s - 1];
+
+ multires_load_old_faces(fmap, emap, lvl1->next, vvmap, mid,
+ vvmap[dst], cv,
+ find_old_edge(emap[0], lvl1->edges, pv, cv)->mid,
+ find_old_edge(emap[0], lvl1->edges, cv, nv)->mid,
+ st2, st4);
+
+ ldst += (st - 1) * (st - 1);
}
- lvl = lvl->next;
+
+ dst = ldst;
}
- for(i = 0; i < mr->level_count; ++i) {
+ lvl = lvl->next;
+
+ for(i = 0; i < mr->level_count - 1; ++i) {
MEM_freeN(fmap[i]);
MEM_freeN(fmem[i]);
MEM_freeN(emap[i]);