assorted uv fixes
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user