From f79ff934973f8da2ce4874a8ad3a831cd0fc7788 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 17 Jul 2005 18:31:39 +0000 Subject: [PATCH] - assorted fixes for drawing "Text" tfaces --- source/blender/src/drawmesh.c | 37 ++++++++++++++--------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/source/blender/src/drawmesh.c b/source/blender/src/drawmesh.c index 6ac3e8d22be..ab91b450fed 100644 --- a/source/blender/src/drawmesh.c +++ b/source/blender/src/drawmesh.c @@ -841,9 +841,6 @@ static int draw_tface_mesh__set_draw(TFace *tface, int matnr) void draw_tface_mesh(Object *ob, Mesh *me, int dt) /* maximum dt (drawtype): exactly according values that have been set */ { - TFace *tface=NULL; - MFace *mface=NULL; - float *extverts= NULL; unsigned char obcol[4]; int a; short islight, istex; @@ -876,21 +873,23 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) set_draw_settings_cached(1, 0, 0, 0, 0, 0, 0); if(dt > OB_SOLID) { + TFace *tface= me->tface; + MFace *mface= me->mface; bProperty *prop = get_property(ob, "Text"); int editing= (G.f & (G_VERTEXPAINT+G_FACESELECT+G_TEXTUREPAINT+G_WEIGHTPAINT)) && (ob==((G.scene->basact) ? (G.scene->basact->object) : 0)); DerivedMesh *dm; int start, totface; + int dmNeedsFree; if(mesh_uses_displist(me) && editing==0) { dm = mesh_get_derived(ob); - dm->drawFacesTex(dm, draw_tface_mesh__set_draw); + dmNeedsFree = 0; } else { - int dmNeedsFree; dm = mesh_get_derived_deform(ob, &dmNeedsFree); - dm->drawFacesTex(dm, draw_tface_mesh__set_draw); - if (dmNeedsFree) dm->release(dm); } + dm->drawFacesTex(dm, draw_tface_mesh__set_draw); + start = 0; totface = me->totface; set_buildvars(ob, &start, &totface); @@ -905,7 +904,7 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) if (mf->v3 && !(tface->flag&TF_HIDE) && !(mode&TF_INVISIBLE) && (mode&TF_BMFONT)) { int badtex= set_draw_settings_cached(0, g_draw_tface_mesh_istex, tface, g_draw_tface_mesh_islight, g_draw_tface_mesh_ob, matnr, TF_TWOSIDE); - float *v1, *v2, *v3, *v4; + float v1[3], v2[3], v3[3], v4[3]; char string[MAX_PROPSTRING]; int characters, index; Image *ima; @@ -914,17 +913,10 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) if (badtex) continue; - if (extverts) { - v1= extverts+3*mf->v1; - v2= extverts+3*mf->v2; - v3= extverts+3*mf->v3; - v4= mf->v4?(extverts+3*mf->v4):NULL; - } else { - v1= (me->mvert+mf->v1)->co; - v2= (me->mvert+mf->v2)->co; - v3= (me->mvert+mf->v3)->co; - v4= mf->v4?(me->mvert+mf->v4)->co:NULL; - } + dm->getVertCo(dm, mf->v1, v1); + dm->getVertCo(dm, mf->v2, v2); + dm->getVertCo(dm, mf->v3, v3); + if (mf->v4) dm->getVertCo(dm, mf->v4, v4); // The BM_FONT handling code is duplicated in the gameengine // Search for 'Frank van Beek' ;-) @@ -938,7 +930,7 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) characters = 0; } - if (1 || !mf_smooth) { + if (!mf_smooth) { float nor[3]; CalcNormFloat(v1, v2, v3, nor); @@ -947,7 +939,7 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) } curpos= 0.0; - glBegin(v4?GL_QUADS:GL_TRIANGLES); + glBegin(mf->v4?GL_QUADS:GL_TRIANGLES); for (index = 0; index < characters; index++) { float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance; int character = string[index]; @@ -975,7 +967,7 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) if (cp) glColor3ub(cp[11], cp[10], cp[9]); glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]); - if(v4) { + if(mf->v4) { glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, (tface->uv[3][1] - centery) * sizey + transy); if (cp) glColor3ub(cp[15], cp[14], cp[13]); glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]); @@ -990,6 +982,7 @@ void draw_tface_mesh(Object *ob, Mesh *me, int dt) /* switch off textures */ set_tpage(0); + if (dmNeedsFree) dm->release(dm); } glShadeModel(GL_FLAT); glDisable(GL_CULL_FACE);