diff options
author | Ton Roosendaal <ton@blender.org> | 2005-07-13 23:42:08 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-07-13 23:42:08 +0400 |
commit | 75ae1ae5ef0d3bb37cd3a5c70699955cb207dcde (patch) | |
tree | dddd08d35bafcd07be90d330dbd72859e9b3df45 /source/blender/src/drawobject.c | |
parent | 64af8d0ced696fd1ab3dbb452e1dda2a43843f6f (diff) |
Armature "XRay mode" now draws nicely with solid too. For it to work, I
had to add a new feature to the 3d window, to collect "after draw" objects,
which get drawn as last, after a clear of the zbuffer.
Same method can be used for nice OpenGL transparent draw, the system is
ready for it, do that later.
The huge commit is caused by cleaning up globals from struct Global. Many
variables were unused or just not needed anymore. Did that to move the ugly
G.zbuf to where it belongs, in the View3D space struct. :)
Diffstat (limited to 'source/blender/src/drawobject.c')
-rw-r--r-- | source/blender/src/drawobject.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index d87f4826f0d..8fe7f69dd5e 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -960,12 +960,12 @@ static void drawlattice(Object *ob) calc_lattverts(); - if(G.zbuf) glDisable(GL_DEPTH_TEST); + if(G.vd->zbuf) glDisable(GL_DEPTH_TEST); tekenvertslatt(0); tekenvertslatt(1); - if(G.zbuf) glEnable(GL_DEPTH_TEST); + if(G.vd->zbuf) glEnable(GL_DEPTH_TEST); } else lattice_modifier(ob, 'e'); @@ -1339,7 +1339,7 @@ static void draw_em_fancy_verts(EditMesh *em, DerivedMesh *cageDM) { int sel; - if(G.zbuf) glDepthMask(0); // disable write in zbuffer, zbuf select + if(G.vd->zbuf) glDepthMask(0); // disable write in zbuffer, zbuf select for (sel=0; sel<2; sel++) { char col[4], fcol[4]; @@ -1353,7 +1353,7 @@ static void draw_em_fancy_verts(EditMesh *em, DerivedMesh *cageDM) float fsize = BIF_GetThemeValuef(TH_FACEDOT_SIZE); if (pass==0) { - if(G.zbuf && !(G.vd->flag&V3D_ZBUF_SELECT)) { + if(G.vd->zbuf && !(G.vd->flag&V3D_ZBUF_SELECT)) { glDisable(GL_DEPTH_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -1388,7 +1388,7 @@ static void draw_em_fancy_verts(EditMesh *em, DerivedMesh *cageDM) } } - if(G.zbuf) glDepthMask(1); + if(G.vd->zbuf) glDepthMask(1); glPointSize(1.0); } @@ -1404,7 +1404,7 @@ static void draw_em_fancy_edges(DerivedMesh *cageDM) for (pass=0; pass<2; pass++) { /* show wires in transparant when no zbuf clipping for select */ if (pass==0) { - if (G.zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0) { + if (G.vd->zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0) { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); @@ -1472,10 +1472,10 @@ static void draw_em_measure_stats(Object *ob, EditMesh *em) char val[32]; /* Stores the measurement display text here */ float area, col[3]; /* area of the face, colour of the text to draw */ - if(G.zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0) + if(G.vd->zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0) glDisable(GL_DEPTH_TEST); - if(G.zbuf) bglPolygonOffset(5.0); + if(G.vd->zbuf) bglPolygonOffset(5.0); if(G.f & G_DRAW_EDGELEN) { BIF_GetThemeColor3fv(TH_TEXT, col); @@ -1616,7 +1616,7 @@ static void draw_em_measure_stats(Object *ob, EditMesh *em) } } - if(G.zbuf) { + if(G.vd->zbuf) { glEnable(GL_DEPTH_TEST); bglPolygonOffset(0.0); } @@ -2755,7 +2755,7 @@ static void drawnurb(Object *ob, Nurb *nurb, int dt) calc_Nurbverts(nurb); - if(G.zbuf) glDisable(GL_DEPTH_TEST); + if(G.vd->zbuf) glDisable(GL_DEPTH_TEST); nu= nurb; while(nu) { @@ -2770,7 +2770,7 @@ static void drawnurb(Object *ob, Nurb *nurb, int dt) nu= nu->next; } - if(G.zbuf) glEnable(GL_DEPTH_TEST); + if(G.vd->zbuf) glEnable(GL_DEPTH_TEST); } static void tekentextcurs(void) @@ -3342,10 +3342,9 @@ static void drawSolidSelect(Object *ob) else if(ob->type==OB_ARMATURE) { if(ob!=G.obpose) { bArmature *arm= ob->data; - int oldflag= arm->flag; - arm->flag &= ~ARM_DRAWXRAY; - draw_armature(ob, OB_WIRE); // patch needed for xray option... - arm->flag= oldflag; + + if(G.vd->xray || (arm->flag & ARM_DRAWXRAY)==0) + draw_armature(ob, OB_WIRE); } } @@ -3537,7 +3536,7 @@ void draw_object(Base *base) /* maximum drawtype */ dt= MIN2(G.vd->drawtype, ob->dt); - if(G.zbuf==0 && dt>OB_WIRE) dt= OB_WIRE; + if(G.vd->zbuf==0 && dt>OB_WIRE) dt= OB_WIRE; dtx= 0; /* faceselect exception: also draw solid when dt==wire, except in editmode */ @@ -3714,7 +3713,13 @@ void draw_object(Base *base) drawlattice(ob); break; case OB_ARMATURE: - draw_armature (ob, dt); + { + bArmature *arm= ob->data; + if(G.vd->xray==0 && (arm->flag & ARM_DRAWXRAY)) + add_view3d_after(G.vd, base, V3D_XRAY); + else + draw_armature(ob, dt); + } break; default: drawaxes(1.0); @@ -3810,7 +3815,7 @@ void draw_object(Base *base) } /* object centers */ - if(G.zbuf) glDisable(GL_DEPTH_TEST); + if(G.vd->zbuf) glDisable(GL_DEPTH_TEST); if(ob->type == OB_LAMP) { if(ob->id.lib) { if(base->flag & SELECT) rect= rectllib_sel; @@ -3841,7 +3846,7 @@ void draw_object(Base *base) } draw_icon_centered(ob->obmat[3], rect, 4); } - if(G.zbuf) glEnable(GL_DEPTH_TEST); + if(G.vd->zbuf) glEnable(GL_DEPTH_TEST); } else if((G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT))==0) { @@ -3861,7 +3866,7 @@ void draw_object_ext(Base *base) if(G.vd==NULL || base==NULL) return; if(G.vd->drawtype > OB_WIRE) { - G.zbuf= 1; + G.vd->zbuf= 1; glEnable(GL_DEPTH_TEST); } @@ -3877,8 +3882,8 @@ void draw_object_ext(Base *base) glFlush(); /* reveil frontbuffer drawing */ glDrawBuffer(GL_BACK); - if(G.zbuf) { - G.zbuf= 0; + if(G.vd->zbuf) { + G.vd->zbuf= 0; glDisable(GL_DEPTH_TEST); } curarea->win_swap= WIN_FRONT_OK; |