assorted uv fixes

This commit is contained in:
Joseph Eagar
2009-07-25 14:13:26 +00:00
parent 82ff261455
commit 5fcbb36b79
5 changed files with 21 additions and 93 deletions

View File

@@ -724,12 +724,13 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL)
BMINDEX_SET(eve, i++);
glBegin(GL_TRIANGLES);
for (i=0; i<em->tottri; i++) {
BMLoop **ls = em->looptris[i];
MTexPoly *tp= CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY);
MTFace mtf = {0};
unsigned char *cp= NULL;
int drawSmooth= BM_TestHFlag(ls[0]->f->head.data, BM_SMOOTH);
int drawSmooth= BM_TestHFlag(ls[0]->f, BM_SMOOTH);
int flag;
efa = ls[0]->f;
@@ -757,8 +758,6 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
}
glBegin(GL_TRIANGLES);
if (!drawSmooth) {
glNormal3fv(bmdm->faceNos[i]);
@@ -780,22 +779,22 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
glTexCoord2fv(luv[0]->uv);
glColor3ub(lcol[0]->r, lcol[0]->g, lcol[0]->b);
glVertex3fv(vertexCos[BMINDEX_GET(ls[0]->v)]);
glNormal3fv(vertexNos[BMINDEX_GET(ls[0]->v)]);
glVertex3fv(vertexCos[BMINDEX_GET(ls[0]->v)]);
glTexCoord2fv(luv[1]->uv);
glColor3ub(lcol[1]->r, lcol[1]->g, lcol[1]->b);
glVertex3fv(vertexCos[BMINDEX_GET(ls[1]->v)]);
glNormal3fv(vertexNos[BMINDEX_GET(ls[1]->v)]);
glVertex3fv(vertexCos[BMINDEX_GET(ls[1]->v)]);
glTexCoord2fv(luv[2]->uv);
glColor3ub(lcol[2]->r, lcol[2]->g, lcol[2]->b);
glVertex3fv(vertexCos[BMINDEX_GET(ls[2]->v)]);
glNormal3fv(vertexNos[BMINDEX_GET(ls[2]->v)]);
glVertex3fv(vertexCos[BMINDEX_GET(ls[2]->v)]);
}
glEnd();
}
}
glEnd();
} else {
i = 0;
BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL)
@@ -806,7 +805,7 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
MTexPoly *tp= CustomData_bmesh_get(&bm->pdata, ls[0]->f->head.data, CD_MTEXPOLY);
MTFace mtf = {0};
unsigned char *cp= NULL;
int drawSmooth= BM_TestHFlag(ls[0]->f->head.data, BM_SMOOTH);
int drawSmooth= BM_TestHFlag(ls[0]->f, BM_SMOOTH);
int flag;
efa = ls[0]->f;
@@ -834,7 +833,6 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
}
glBegin(GL_TRIANGLES);
if (!drawSmooth) {
glNormal3fv(efa->no);
@@ -857,98 +855,23 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
glTexCoord2fv(luv[0]->uv);
glColor3ub(lcol[0]->r, lcol[0]->g, lcol[0]->b);
glVertex3fv(ls[0]->v->co);
glNormal3fv(ls[0]->v->no);
glVertex3fv(ls[0]->v->co);
glTexCoord2fv(luv[1]->uv);
glColor3ub(lcol[1]->r, lcol[1]->g, lcol[1]->b);
glVertex3fv(ls[1]->v->co);
glNormal3fv(ls[1]->v->no);
glVertex3fv(ls[1]->v->co);
glTexCoord2fv(luv[2]->uv);
glColor3ub(lcol[2]->r, lcol[2]->g, lcol[2]->b);
glVertex3fv(ls[2]->v->co);
glNormal3fv(ls[2]->v->no);
glVertex3fv(ls[2]->v->co);
}
glEnd();
}
}
}
#if 0
else {
for (i=0,efa= bm->faces.first; efa; i++,efa= efa->next) {
MTFace *tf= CustomData_bm_get(&bm->pdata, efa->data, CD_MTFACE);
MCol *mcol= CustomData_bm_get(&bm->pdata, efa->data, CD_MCOL);
unsigned char *cp= NULL;
int drawSmooth= (efa->flag & ME_SMOOTH);
int flag;
if(drawParams)
flag= drawParams(tf, mcol, efa->mat_nr);
else if(drawParamsMapped)
flag= drawParamsMapped(userData, i);
else
flag= 1;
if(flag != 0) { /* flag 0 == the face is hidden or invisible */
/* we always want smooth here since otherwise vertex colors dont interpolate */
if (mcol) {
if (flag==1) {
cp= (unsigned char*)mcol;
}
} else {
glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
}
glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
if (!drawSmooth) {
glNormal3fv(efa->n);
if(tf) glTexCoord2fv(tf->uv[0]);
if(cp) glColor3ub(cp[3], cp[2], cp[1]);
glVertex3fv(efa->v1->co);
if(tf) glTexCoord2fv(tf->uv[1]);
if(cp) glColor3ub(cp[7], cp[6], cp[5]);
glVertex3fv(efa->v2->co);
if(tf) glTexCoord2fv(tf->uv[2]);
if(cp) glColor3ub(cp[11], cp[10], cp[9]);
glVertex3fv(efa->v3->co);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
if(cp) glColor3ub(cp[15], cp[14], cp[13]);
glVertex3fv(efa->v4->co);
}
} else {
if(tf) glTexCoord2fv(tf->uv[0]);
if(cp) glColor3ub(cp[3], cp[2], cp[1]);
glNormal3fv(efa->v1->no);
glVertex3fv(efa->v1->co);
if(tf) glTexCoord2fv(tf->uv[1]);
if(cp) glColor3ub(cp[7], cp[6], cp[5]);
glNormal3fv(efa->v2->no);
glVertex3fv(efa->v2->co);
if(tf) glTexCoord2fv(tf->uv[2]);
if(cp) glColor3ub(cp[11], cp[10], cp[9]);
glNormal3fv(efa->v3->no);
glVertex3fv(efa->v3->co);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
if(cp) glColor3ub(cp[15], cp[14], cp[13]);
glNormal3fv(efa->v4->no);
glVertex3fv(efa->v4->co);
}
}
glEnd();
}
}
}
#endif
}
static void bmDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, int has_vcol, int matnr))

View File

@@ -537,6 +537,7 @@ BMesh *BM_Copy_Mesh(BMesh *bmold)
which much be either a BMVert, BMEdge,
or BMFace, converted to mesh flags.
*/
int BMFlags_To_MEFlags(void *element) {
BMHeader *h = element;
int f = 0;
@@ -551,9 +552,9 @@ int BMFlags_To_MEFlags(void *element) {
if (h->flag & BM_SEAM) f |= ME_SEAM;
if (h->flag & BM_SHARP) f |= ME_SHARP;
if (BM_Wire_Edge(NULL, element)) f |= ME_LOOSEEDGE;
f |= ME_EDGEDRAW;
} else if (h->type == BM_VERT) {
if (h->flag & BM_SELECT) f |= BM_SELECT;
if (h->flag & BM_HIDDEN) f |= ME_HIDE;
}
return f;

View File

@@ -164,8 +164,8 @@ void bmesh_to_mesh_exec(BMesh *bm, BMOperator *op) {
BMIter iter, liter;
int i, j, ototvert, totloop, numTex, numCol;
numTex = CustomData_number_of_layers(&me->pdata, CD_MLOOPUV);
numCol = CustomData_number_of_layers(&me->ldata, CD_MLOOPCOL);
numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
bmtess = BM_Copy_Mesh(bm);
BMO_CallOpf(bmtess, "makefgon trifan=%i", 0);

View File

@@ -432,6 +432,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
if (mpoly && mpoly->flag&ME_HIDE) return 0;
memset(&mtf, 0, sizeof(mtf));
if (tpoly) {
mtf.flag = tpoly->flag;
mtf.tpage = tpoly->tpage;
@@ -441,7 +442,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
mtf.unwrap = tpoly->unwrap;
}
return draw_tface__set_draw(&mtf, CustomData_has_layer(&me->ldata, CD_MLOOPUV), matnr);
return draw_tface__set_draw(&mtf, CustomData_has_layer(&me->ldata, CD_MLOOPCOL), matnr);
}
static int draw_em_tf_mapped__set_draw(void *userData, int index)
@@ -456,9 +457,11 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index)
return 0;
tpoly = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
has_vcol = CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
has_vcol = CustomData_has_layer(&em->bm->ldata, CD_MLOOPCOL);
matnr = efa->mat_nr;
memset(&mtf, 0, sizeof(mtf));
if (tpoly) {
mtf.flag = tpoly->flag;
mtf.tpage = tpoly->tpage;

View File

@@ -116,7 +116,8 @@ void ED_uvedit_assign_image(Scene *scene, Object *obedit, Image *ima, Image *pre
/* ensure we have a uv layer */
if(!CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) {
BM_add_data_layer(em->bm, &em->bm->pdata, CD_MTFACE);
BM_add_data_layer(em->bm, &em->bm->pdata, CD_MTEXPOLY);
BM_add_data_layer(em->bm, &em->bm->ldata, CD_MLOOPUV);
update= 1;
}