From 5fcbb36b79ed5349d66704f696097d03ad5e3959 Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Sat, 25 Jul 2009 14:13:26 +0000 Subject: [PATCH] assorted uv fixes --- .../blenkernel/intern/editderivedbmesh.c | 97 ++----------------- source/blender/bmesh/intern/bmesh_construct.c | 3 +- source/blender/bmesh/operators/mesh_conv.c | 4 +- .../blender/editors/space_view3d/drawmesh.c | 7 +- source/blender/editors/uvedit/uvedit_ops.c | 3 +- 5 files changed, 21 insertions(+), 93 deletions(-) diff --git a/source/blender/blenkernel/intern/editderivedbmesh.c b/source/blender/blenkernel/intern/editderivedbmesh.c index 2d8e61b41ce..539d2f89b71 100644 --- a/source/blender/blenkernel/intern/editderivedbmesh.c +++ b/source/blender/blenkernel/intern/editderivedbmesh.c @@ -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; itottri; 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)) diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index 06b7116de59..c1c6cae6499 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -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; diff --git a/source/blender/bmesh/operators/mesh_conv.c b/source/blender/bmesh/operators/mesh_conv.c index 47173b356bf..a77256e217a 100644 --- a/source/blender/bmesh/operators/mesh_conv.c +++ b/source/blender/bmesh/operators/mesh_conv.c @@ -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); diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 83f3ec5d3d5..846d45388d3 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -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; diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index a7b5109e292..0219d8dc774 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -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; }