Autosmooth didn't copy additional texture coordinates such as sticky
correctly. This was part of the vertex struct in 2.41 and older, but it
became dynamic in 2.42.
This commit is contained in:
Ton Roosendaal
2006-11-12 11:41:43 +00:00
parent 72f620fef3
commit a56b95c049
2 changed files with 45 additions and 12 deletions

View File

@@ -309,15 +309,6 @@ u | | F1 | F2 |
/* ------------------------------------------------------------------------- */
static VertRen *duplicate_vertren(Render *re, VertRen *ver)
{
VertRen *v1= RE_findOrAddVert(re, re->totvert++);
int index= v1->index;
*v1= *ver;
v1->index= index;
return v1;
}
static void split_v_renderfaces(Render *re, int startvlak, int startvert, int usize, int vsize, int uIndex, int cyclu, int cyclv)
{
int vLen = vsize-1+(!!cyclv);
@@ -325,7 +316,7 @@ static void split_v_renderfaces(Render *re, int startvlak, int startvert, int us
for (v=0; v<vLen; v++) {
VlakRen *vlr = RE_findOrAddVlak(re, startvlak + vLen*uIndex + v);
VertRen *vert = duplicate_vertren(re, vlr->v2);
VertRen *vert = RE_vertren_copy(re, vlr->v2);
if (cyclv) {
vlr->v2 = vert;
@@ -346,7 +337,7 @@ static void split_v_renderfaces(Render *re, int startvlak, int startvert, int us
}
if (v==0) {
vlr->v1 = duplicate_vertren(re, vlr->v1);
vlr->v1 = RE_vertren_copy(re, vlr->v1);
}
}
}
@@ -903,7 +894,7 @@ static void autosmooth(Render *re, float mat[][4], int startvert, int startvlak,
v1= as_findvertex(vlr, ver, asv, thresh);
if(v1==NULL) {
/* make a new vertex */
v1= duplicate_vertren(re, ver);
v1= RE_vertren_copy(re, ver);
}
asf->nver[b]= v1;
if(vlr->v1==ver) vlr->v1= v1;

View File

@@ -188,6 +188,48 @@ float *RE_vertren_get_winspeed(Render *re, VertRen *ver, int verify)
return winspeed + (ver->index & 255)*RE_WINSPEED_ELEMS;
}
VertRen *RE_vertren_copy(Render *re, VertRen *ver)
{
VertRen *v1= RE_findOrAddVert(re, re->totvert++);
float *fp1, *fp2;
int index= v1->index;
*v1= *ver;
v1->index= index;
fp1= RE_vertren_get_sticky(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_sticky(re, v1, 1);
memcpy(fp2, fp1, RE_STICKY_ELEMS*sizeof(float));
}
fp1= RE_vertren_get_stress(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_stress(re, v1, 1);
memcpy(fp2, fp1, RE_STRESS_ELEMS*sizeof(float));
}
fp1= RE_vertren_get_rad(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_rad(re, v1, 1);
memcpy(fp2, fp1, RE_RAD_ELEMS*sizeof(float));
}
fp1= RE_vertren_get_strand(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_strand(re, v1, 1);
memcpy(fp2, fp1, RE_STRAND_ELEMS*sizeof(float));
}
fp1= RE_vertren_get_tangent(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_tangent(re, v1, 1);
memcpy(fp2, fp1, RE_TANGENT_ELEMS*sizeof(float));
}
fp1= RE_vertren_get_winspeed(re, ver, 0);
if(fp1) {
fp2= RE_vertren_get_winspeed(re, v1, 1);
memcpy(fp2, fp1, RE_WINSPEED_ELEMS*sizeof(float));
}
return v1;
}
VertRen *RE_findOrAddVert(Render *re, int nr)
{
VertTableNode *temp;