diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2006-02-19 14:37:50 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2006-02-19 14:37:50 +0300 |
commit | f624730d26b18e509edfe9022f8fcbe6d0d66eea (patch) | |
tree | fce3d885e1d8e3818798d5d556b9b03b19fc03d8 /source/blender/blenkernel | |
parent | 427339fd0b5377f7a8644a53970083808e36ce05 (diff) |
Warning fix in subsurf_ccg.c. Also changed subsurf UV vertex and edge
handles to be more consistent.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 20 |
3 files changed, 10 insertions, 16 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 5cf6dd41e6f..e8d9dbe0681 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -105,7 +105,6 @@ typedef struct UvMapVert { UvVertMap *make_uv_vert_map(struct MFace *mface, struct TFace *tface, unsigned int totface, unsigned int totvert, int selected, float *limit); UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v); -UvMapVert *get_first_uv_map_vert(UvVertMap *vmap); void free_uv_vert_map(UvVertMap *vmap); #ifdef __cplusplus diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index bbe2a35bcd4..c1718e0e859 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1189,11 +1189,6 @@ UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v) return vmap->vert[v]; } -UvMapVert *get_first_uv_map_vert(UvVertMap *vmap) -{ - return ((vmap->buf != NULL)? vmap->buf: NULL); -} - void free_uv_vert_map(UvVertMap *vmap) { if (vmap) { diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index e7870fe150e..1ad1c4a89fd 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -243,7 +243,7 @@ static float *getFaceUV(CCGSubSurf *ss, CCGFace *f, int S, int x, int y, int edg static void get_face_uv_map_vert(UvVertMap *vmap, struct MFace *mf, int fi, CCGVertHDL *fverts) { unsigned int *fv = &mf->v1; - UvMapVert *v, *nv, *firstv = get_first_uv_map_vert(vmap); + UvMapVert *v, *nv; int j, nverts= mf->v4? 4: 3; for (j=0; j<nverts; j++, fv++) { @@ -254,7 +254,7 @@ static void get_face_uv_map_vert(UvVertMap *vmap, struct MFace *mf, int fi, CCGV break; } - fverts[j]= (CCGVertHDL)(nv - firstv); + fverts[j]= (CCGVertHDL)(nv->f*4 + nv->tfindex); } } @@ -265,11 +265,12 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis int totvert = dlm?dlm->totvert:me->totvert; int totface = dlm?dlm->totface:me->totface; int i, j, seam; - UvMapVert *v, *firstv; + UvMapVert *v; UvVertMap *vmap; float limit[2]; CCGVertHDL fverts[4]; EdgeHash *ehash; + float creaseFactor = (float)ccgSubSurf_getSubdivisionLevels(ss); limit[0]= limit[1]= 0.0001f; vmap= make_uv_vert_map(mface, tface, totface, totvert, 0, limit); @@ -278,9 +279,6 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis ccgSubSurf_initFullSync(ss); - /* use this to get consistent vert handles with different heap addresses */ - firstv= (totvert > 0)? get_first_uv_map_vert(vmap): NULL; - /* create vertices */ for (i=0; i<totvert; i++) { if (!get_uv_map_vert(vmap, i)) @@ -295,7 +293,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis for (v=get_uv_map_vert(vmap, i); v; v=v->next) { if (v->separate) { CCGVert *ssv; - CCGVertHDL vhdl = (CCGVertHDL)(v - firstv); + CCGVertHDL vhdl = (CCGVertHDL)(v->f*4 + v->tfindex); float uv[3]; uv[0]= (tface+v->f)->uv[v->tfindex][0]; @@ -326,11 +324,13 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis if (!BLI_edgehash_haskey(ehash, v0, v1)) { CCGEdge *e, *orige= ccgSubSurf_getFaceEdge(origss, origf, j); - CCGEdgeHDL ehdl= (CCGEdgeHDL)((int)fverts[j], (int)fverts[(j+1)%nverts]); - float crease = ccgSubSurf_getEdgeCrease(origss, orige); + CCGEdgeHDL ehdl= (CCGEdgeHDL)(i*4 + j); + float crease; if ((mv0->flag&mv1->flag) & ME_VERT_MERGED) - crease = 2.0f; + crease = creaseFactor; + else + crease = ccgSubSurf_getEdgeCrease(origss, orige); ccgSubSurf_syncEdge(ss, ehdl, fverts[j], fverts[(j+1)%nverts], crease, &e); BLI_edgehash_insert(ehash, v0, v1, NULL); |