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:
authorJoseph Eagar <joeedh@gmail.com>2009-07-24 14:43:58 +0400
committerJoseph Eagar <joeedh@gmail.com>2009-07-24 14:43:58 +0400
commit62a847d741ed35a56d01197bf2dd0a2d8c8ce8cf (patch)
tree94924b59855ee012443b03844feebcf22cf96fda /source/blender
parentc691b2b037fe5030726340a6461ceba1573074f5 (diff)
uv texture (though not glsl) works now. also fixed some bugs. still some issues left, and for some reason textured objs aren't displaying properly in object mode.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h2
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c4
-rw-r--r--source/blender/blenkernel/intern/editderivedbmesh.c252
-rw-r--r--source/blender/blenkernel/intern/modifiers_bmesh.c2
-rw-r--r--source/blender/bmesh/bmesh.h4
-rw-r--r--source/blender/bmesh/operators/removedoubles.c2
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c59
7 files changed, 231 insertions, 94 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 20bcfcac373..6288e5d71b0 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -316,7 +316,7 @@ struct DerivedMesh {
*/
void (*drawFacesTex)(DerivedMesh *dm,
int (*setDrawOptions)(struct MTFace *tface,
- struct MCol *mcol, int matnr));
+ int has_vcol, int matnr));
/* Draw all faces with GLSL materials
* o setMaterial is called for every different material nr
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index e8cba86709a..c1e412458ee 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -394,7 +394,7 @@ static void cdDM_drawFacesColored(DerivedMesh *dm, int useTwoSided, unsigned cha
}
static void cdDM_drawFacesTex_common(DerivedMesh *dm,
- int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
+ int (*drawParams)(MTFace *tface, int has_vcol, int matnr),
int (*drawParamsMapped)(void *userData, int index),
void *userData)
{
@@ -412,7 +412,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
unsigned char *cp = NULL;
if(drawParams) {
- flag = drawParams(tf? &tf[i]: NULL, mcol? &mcol[i*4]: NULL, mf->mat_nr);
+ flag = drawParams(tf? &tf[i]: NULL, mcol != NULL, mf->mat_nr);
}
else {
if(index) {
diff --git a/source/blender/blenkernel/intern/editderivedbmesh.c b/source/blender/blenkernel/intern/editderivedbmesh.c
index cbac230c118..2d8e61b41ce 100644
--- a/source/blender/blenkernel/intern/editderivedbmesh.c
+++ b/source/blender/blenkernel/intern/editderivedbmesh.c
@@ -417,7 +417,7 @@ static void bmDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void *us
BMIter viter;
eve = BMIter_New(&viter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL);
- for (i=0; eve; eve=BMIter_Step(&viter)) {
+ for (i=0; eve; eve=BMIter_Step(&viter), i++) {
BMINDEX_SET(eve, i);
}
@@ -532,11 +532,19 @@ static void bmDM__calcFaceCent(BMesh *bm, BMFace *efa, float cent[3],
cent[0] = cent[1] = cent[2] = 0.0f;
/*simple (and stupid) median (average) based method :/ */
-
- l = BMIter_New(&iter, bm, BM_LOOPS_OF_FACE, efa);
- for (; l; l=BMIter_Step(&iter)) {
- VECADD(cent, cent, l->v->co);
- tot++;
+
+ if (vertexCos) {
+ l = BMIter_New(&iter, bm, BM_LOOPS_OF_FACE, efa);
+ for (; l; l=BMIter_Step(&iter)) {
+ VECADD(cent, cent, vertexCos[BMINDEX_GET(l->v)]);
+ tot++;
+ }
+ } else {
+ l = BMIter_New(&iter, bm, BM_LOOPS_OF_FACE, efa);
+ for (; l; l=BMIter_Step(&iter)) {
+ VECADD(cent, cent, l->v->co);
+ tot++;
+ }
}
if (tot==0) return;
@@ -554,7 +562,7 @@ static void bmDM_foreachMappedFaceCenter(DerivedMesh *dm, void (*func)(void *use
if (bmdm->vertexCos) {
eve = BMIter_New(&iter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL);
- for (i=0; eve; eve=BMIter_Step(&iter));
+ for (i=0; eve; eve=BMIter_Step(&iter), i++)
BMINDEX_SET(eve, i);
}
@@ -576,7 +584,7 @@ static void bmDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
BMVert *eve;
eve = BMIter_New(&iter, bmdm->tc->bm, BM_VERTS_OF_MESH, NULL);
- for (i=0; eve; eve=BMIter_Step(&iter))
+ for (i=0; eve; eve=BMIter_Step(&iter), i++)
BMINDEX_SET(eve, i);
efa = BMIter_New(&iter, bmdm->tc->bm, BM_FACES_OF_MESH, NULL);
@@ -587,8 +595,8 @@ static void bmDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
BMLoop **l = bmdm->tc->looptris[i];
int drawSmooth;
- drawSmooth = (efa->head.flag & BM_SMOOTH);
efa = l[0]->f;
+ drawSmooth = (efa->head.flag & BM_SMOOTH);
draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BMINDEX_GET(efa), &drawSmooth);
if(draw) {
@@ -602,7 +610,7 @@ static void bmDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
glBegin(GL_TRIANGLES);
if (!drawSmooth) {
- glNormal3fv(efa->no);
+ glNormal3fv(bmdm->faceNos[i]);
glVertex3fv(bmdm->vertexCos[(int) BMINDEX_GET(l[0]->v)]);
glVertex3fv(bmdm->vertexCos[(int) BMINDEX_GET(l[1]->v)]);
glVertex3fv(bmdm->vertexCos[(int) BMINDEX_GET(l[2]->v)]);
@@ -630,7 +638,6 @@ static void bmDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
int drawSmooth;
efa = l[0]->f;
-
drawSmooth = (efa->head.flag & BM_SMOOTH);
draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BMINDEX_GET(efa), &drawSmooth);
@@ -664,102 +671,211 @@ static void bmDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
}
}
+static void bmdm_get_tri_tex(BMesh *bm, BMLoop **ls, MLoopUV *luv[3], MLoopCol *lcol[3],
+ int has_uv, int has_col)
+{
+ if (has_uv) {
+ luv[0] = CustomData_bmesh_get(&bm->ldata, ls[0]->head.data, CD_MLOOPUV);
+ luv[1] = CustomData_bmesh_get(&bm->ldata, ls[1]->head.data, CD_MLOOPUV);
+ luv[2] = CustomData_bmesh_get(&bm->ldata, ls[2]->head.data, CD_MLOOPUV);
+ }
+
+ if (has_col) {
+ lcol[0] = CustomData_bmesh_get(&bm->ldata, ls[0]->head.data, CD_MLOOPCOL);
+ lcol[1] = CustomData_bmesh_get(&bm->ldata, ls[1]->head.data, CD_MLOOPCOL);
+ lcol[2] = CustomData_bmesh_get(&bm->ldata, ls[2]->head.data, CD_MLOOPCOL);
+ }
+
+
+}
+
static void bmDM_drawFacesTex_common(DerivedMesh *dm,
- int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
+ int (*drawParams)(MTFace *tface, int has_vcol, int matnr),
int (*drawParamsMapped)(void *userData, int index),
void *userData)
{
-#if 0
EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
+ BMEditMesh *em = bmdm->tc;
BMesh *bm= bmdm->tc->bm;
float (*vertexCos)[3]= bmdm->vertexCos;
float (*vertexNos)[3]= bmdm->vertexNos;
BMFace *efa;
+ BMVert *eve;
BMIter iter;
- int i;
+ MLoopUV *luv[3], dummyluv = {0};
+ MLoopCol *lcol[3], dummylcol = {0};
+ int i, has_vcol = CustomData_has_layer(&bm->ldata, CD_MLOOPCOL);
+ int has_uv = CustomData_has_layer(&bm->pdata, CD_MTEXPOLY);
+
+ luv[0] = luv[1] = luv[2] = &dummyluv;
+ lcol[0] = lcol[1] = lcol[2] = &dummylcol;
+
+ dummylcol.a = dummylcol.r = dummylcol.g = dummylcol.b = 255;
/* always use smooth shading even for flat faces, else vertex colors wont interpolate */
glShadeModel(GL_SMOOTH);
- if (vertexCos) {
- BMVert *eve;
+ i = 0;
+ BM_ITER(efa, &iter, bm, BM_FACES_OF_MESH, NULL)
+ BMINDEX_SET(efa, i++);
- for (i=0,eve=bm->verts.first; eve; eve= eve->next)
+ if (vertexCos) {
+ i = 0;
+ BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL)
BMINDEX_SET(eve, i++);
-
- 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);
+
+ 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= (efa->flag & ME_SMOOTH);
+ int drawSmooth= BM_TestHFlag(ls[0]->f->head.data, BM_SMOOTH);
int flag;
+ efa = ls[0]->f;
+
+ if (has_uv) {
+ mtf.flag = tp->flag;
+ mtf.tpage = tp->tpage;
+ mtf.transp = tp->transp;
+ mtf.mode = tp->mode;
+ mtf.tile = tp->tile;
+ mtf.unwrap = tp->unwrap;
+ }
+
if(drawParams)
- flag= drawParams(tf, mcol, efa->mat_nr);
+ flag= drawParams(&mtf, has_vcol, efa->mat_nr);
else if(drawParamsMapped)
- flag= drawParamsMapped(userData, i);
+ flag= drawParamsMapped(userData, BMINDEX_GET(efa));
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 {
+ if (!has_vcol) {
glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
}
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+
+ glBegin(GL_TRIANGLES);
if (!drawSmooth) {
glNormal3fv(bmdm->faceNos[i]);
+
+ bmdm_get_tri_tex(bm, ls, luv, lcol, has_uv, has_vcol);
+
+ glTexCoord2fv(luv[0]->uv);
+ glColor3ub(lcol[0]->r, lcol[0]->g, lcol[0]->b);
+ 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)]);
+
+ glTexCoord2fv(luv[2]->uv);
+ glColor3ub(lcol[2]->r, lcol[2]->g, lcol[2]->b);
+ glVertex3fv(vertexCos[BMINDEX_GET(ls[2]->v)]);
+ } else {
+ bmdm_get_tri_tex(bm, ls, luv, lcol, has_uv, has_vcol);
+
+ 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)]);
+
+ 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)]);
+
+ 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)]);
+ }
+ glEnd();
+ }
+ }
+ } else {
+ i = 0;
+ BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL)
+ BMINDEX_SET(eve, i++);
+
+ 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 flag;
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+ efa = ls[0]->f;
+
+ if (has_uv) {
+ mtf.flag = tp->flag;
+ mtf.tpage = tp->tpage;
+ mtf.transp = tp->transp;
+ mtf.mode = tp->mode;
+ mtf.tile = tp->tile;
+ mtf.unwrap = tp->unwrap;
+ }
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+ if(drawParams)
+ flag= drawParams(&mtf, has_vcol, efa->mat_nr);
+ else if(drawParamsMapped)
+ flag= drawParamsMapped(userData, BMINDEX_GET(efa));
+ else
+ flag= 1;
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+ if(flag != 0) { /* flag 0 == the face is hidden or invisible */
+
+ /* we always want smooth here since otherwise vertex colors dont interpolate */
+ if (!has_vcol) {
+ glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
+ }
+
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- }
+ glBegin(GL_TRIANGLES);
+ if (!drawSmooth) {
+ glNormal3fv(efa->no);
+
+ bmdm_get_tri_tex(bm, ls, luv, lcol, has_uv, has_vcol);
+
+ glTexCoord2fv(luv[0]->uv);
+ glColor3ub(lcol[0]->r, lcol[0]->g, lcol[0]->b);
+ glVertex3fv(ls[0]->v->co);
+
+ glTexCoord2fv(luv[1]->uv);
+ glColor3ub(lcol[1]->r, lcol[1]->g, lcol[1]->b);
+ glVertex3fv(ls[1]->v->co);
+
+ glTexCoord2fv(luv[2]->uv);
+ glColor3ub(lcol[2]->r, lcol[2]->g, lcol[2]->b);
+ glVertex3fv(ls[2]->v->co);
} else {
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
-
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- }
+ bmdm_get_tri_tex(bm, ls, luv, lcol, has_uv, has_vcol);
+
+ glTexCoord2fv(luv[0]->uv);
+ glColor3ub(lcol[0]->r, lcol[0]->g, lcol[0]->b);
+ glVertex3fv(ls[0]->v->co);
+ glNormal3fv(ls[0]->v->no);
+
+ glTexCoord2fv(luv[1]->uv);
+ glColor3ub(lcol[1]->r, lcol[1]->g, lcol[1]->b);
+ glVertex3fv(ls[1]->v->co);
+ glNormal3fv(ls[1]->v->no);
+
+ glTexCoord2fv(luv[2]->uv);
+ glColor3ub(lcol[2]->r, lcol[2]->g, lcol[2]->b);
+ glVertex3fv(ls[2]->v->co);
+ glNormal3fv(ls[2]->v->no);
}
glEnd();
}
}
- } else {
+ }
+#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);
@@ -835,7 +951,7 @@ static void bmDM_drawFacesTex_common(DerivedMesh *dm,
#endif
}
-static void bmDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void bmDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, int has_vcol, int matnr))
{
bmDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
}
@@ -1494,7 +1610,7 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em, Object *ob,
if(vertexCos) {
BMVert *eve;
BMIter iter;
- int totface = bm->totface;
+ int totface = bmdm->tc->tottri;
int i;
eve=BMIter_New(&iter, bm, BM_VERTS_OF_MESH, NULL);
diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c
index 0abb2c4f35c..ff0d24173a0 100644
--- a/source/blender/blenkernel/intern/modifiers_bmesh.c
+++ b/source/blender/blenkernel/intern/modifiers_bmesh.c
@@ -567,6 +567,8 @@ DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd,
mtx, mmd->tolerance, axis);
BMO_Exec_Op(bm, &op);
+
+ BMO_CallOpf(bm, "reversefaces faces=%s", &op, "newout");
/*handle vgroup stuff*/
if (mmd->flag & MOD_MIR_VGROUP) {
diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h
index 3c8194ee205..1ef76a03490 100644
--- a/source/blender/bmesh/bmesh.h
+++ b/source/blender/bmesh/bmesh.h
@@ -244,8 +244,8 @@ struct BMFace *BM_Make_Ngon(struct BMesh *bm, struct BMVert *v1, struct BMVert *
#define BM_ClearHFlag(ele, f) (((BMHeader*)ele)->flag = ((BMHeader*)ele)->flag & ~(f))
/*stuff for setting indices in elements.*/
-#define BMINDEX_SET(ele, i) (((BMHeader*)ele)->index = i)
-#define BMINDEX_GET(ele) ((BMHeader*)ele)->index
+#define BMINDEX_SET(ele, i) (((BMHeader*)(ele))->index = i)
+#define BMINDEX_GET(ele) (((BMHeader*)(ele))->index)
/*copies loop data from adjacent faces*/
void BM_Face_CopyShared(BMesh *bm, BMFace *f);
diff --git a/source/blender/bmesh/operators/removedoubles.c b/source/blender/bmesh/operators/removedoubles.c
index a5a4d5b763f..4e66052b787 100644
--- a/source/blender/bmesh/operators/removedoubles.c
+++ b/source/blender/bmesh/operators/removedoubles.c
@@ -157,7 +157,7 @@ void bmesh_weldverts_exec(BMesh *bm, BMOperator *op)
v2 = BMO_Get_MapPointer(bm, op, "targetmap", v2);
- f2 = BM_Make_Ngon(bm, v, v2, edges, a, 0);
+ f2 = BM_Make_Ngon(bm, v2, v, edges, a, 0);
if (f2) {
BM_Copy_Attributes(bm, bm, f, f2);
BMO_SetFlag(bm, f, ELE_DEL);
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index a04d6d07d24..83f3ec5d3d5 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -62,6 +62,7 @@
#include "BKE_object.h"
#include "BKE_property.h"
#include "BKE_utildefines.h"
+#include "BKE_tessmesh.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -398,7 +399,7 @@ static void draw_textured_end()
}
-static int draw_tface__set_draw(MTFace *tface, MCol *mcol, int matnr)
+static int draw_tface__set_draw(MTFace *tface, int has_vcol, int matnr)
{
if (tface && (tface->mode&TF_INVISIBLE)) return 0;
@@ -408,7 +409,7 @@ static int draw_tface__set_draw(MTFace *tface, MCol *mcol, int matnr)
} else if (tface && tface->mode&TF_OBCOL) {
glColor3ubv(Gtexdraw.obcol);
return 2; /* Don't set color */
- } else if (!mcol) {
+ } else if (!has_vcol) {
if (tface) glColor3f(1.0, 1.0, 1.0);
else {
Material *ma= give_current_material(Gtexdraw.ob, matnr+1);
@@ -424,30 +425,50 @@ static int draw_tface__set_draw(MTFace *tface, MCol *mcol, int matnr)
static int draw_tface_mapped__set_draw(void *userData, int index)
{
Mesh *me = (Mesh*)userData;
- MTFace *tface = (me->mtface)? &me->mtface[index]: NULL;
- MFace *mface = (me->mface)? &me->mface[index]: NULL;
- MCol *mcol = (me->mcol)? &me->mcol[index]: NULL;
- int matnr = me->mface[index].mat_nr;
- if (mface && mface->flag&ME_HIDE) return 0;
- return draw_tface__set_draw(tface, mcol, matnr);
+ MTexPoly *tpoly = (me->mtpoly)? &me->mtpoly[index]: NULL;
+ MPoly *mpoly = (me->mpoly)? &me->mpoly[index]: NULL;
+ MTFace mtf;
+ int matnr = me->mpoly[index].mat_nr;
+
+ if (mpoly && mpoly->flag&ME_HIDE) return 0;
+
+ if (tpoly) {
+ mtf.flag = tpoly->flag;
+ mtf.tpage = tpoly->tpage;
+ mtf.transp = tpoly->transp;
+ mtf.mode = tpoly->mode;
+ mtf.tile = tpoly->tile;
+ mtf.unwrap = tpoly->unwrap;
+ }
+
+ return draw_tface__set_draw(&mtf, CustomData_has_layer(&me->ldata, CD_MLOOPUV), matnr);
}
static int draw_em_tf_mapped__set_draw(void *userData, int index)
{
- EditMesh *em = userData;
- EditFace *efa= EM_get_face_for_index(index);
- MTFace *tface;
- MCol *mcol;
- int matnr;
+ BMEditMesh *em = userData;
+ BMFace *efa= EDBM_get_face_for_index(em, index);
+ MTexPoly *tpoly;
+ MTFace mtf;
+ int matnr, has_vcol;
- if (efa==NULL || efa->h)
+ if (efa==NULL || BM_TestHFlag(efa, BM_HIDDEN))
return 0;
- tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- mcol = CustomData_em_get(&em->fdata, efa->data, CD_MCOL);
+ tpoly = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
+ has_vcol = CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
matnr = efa->mat_nr;
- return draw_tface__set_draw(tface, mcol, matnr);
+ if (tpoly) {
+ mtf.flag = tpoly->flag;
+ mtf.tpage = tpoly->tpage;
+ mtf.transp = tpoly->transp;
+ mtf.mode = tpoly->mode;
+ mtf.tile = tpoly->tile;
+ mtf.unwrap = tpoly->unwrap;
+ }
+
+ return draw_tface__set_draw(&mtf, has_vcol, matnr);
}
static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r)
@@ -550,7 +571,6 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl)
void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, int faceselect)
{
-#if 0
Mesh *me= ob->data;
/* correct for negative scale */
@@ -561,7 +581,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o
draw_textured_begin(scene, v3d, rv3d, ob);
if(ob == scene->obedit) {
- dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_mesh);
+ dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_btmesh);
} else if(faceselect) {
if(G.f & G_WEIGHTPAINT)
dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1);
@@ -587,6 +607,5 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o
/* in editmode, the blend mode needs to be set incase it was ADD */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-#endif
}