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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2006-02-19 14:37:50 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2006-02-19 14:37:50 +0300
commitf624730d26b18e509edfe9022f8fcbe6d0d66eea (patch)
treefce3d885e1d8e3818798d5d556b9b03b19fc03d8 /source/blender/blenkernel
parent427339fd0b5377f7a8644a53970083808e36ce05 (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.h1
-rw-r--r--source/blender/blenkernel/intern/mesh.c5
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c20
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);