diff options
Diffstat (limited to 'source/blender/editors/space_view3d/drawobject.c')
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index df3bc3d479d..d3162c44463 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -901,7 +901,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, if(drawcone && !v3d->transp) { /* in this case we need to draw delayed */ - add_view3d_after(v3d, base, V3D_TRANSP, flag); + add_view3d_after(&v3d->afterdraw_transp, base, flag); return; } @@ -2769,7 +2769,20 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } /* GPU_begin_object_materials checked if this is needed */ - if(do_alpha_pass) add_view3d_after(v3d, base, V3D_TRANSP, flag); + if(do_alpha_pass) { + if(ob->dtx & OB_DRAWXRAY) { + add_view3d_after(&v3d->afterdraw_xraytransp, base, flag); + } + else { + add_view3d_after(&v3d->afterdraw_transp, base, flag); + } + } + else if(ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) { + /* special case xray+transp when alpha is 1.0, without this the object vanishes */ + if(v3d->xray == 0 && v3d->transp == 0) { + add_view3d_after(&v3d->afterdraw_xray, base, flag); + } + } return retval; } @@ -5537,13 +5550,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* don't do xray in particle mode, need the z-buffer */ if(!(ob->mode & OB_MODE_PARTICLE_EDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ - if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY)) { - if(ob->dtx & OB_DRAWTRANSP) { - add_view3d_after(v3d, base, V3D_XRAYTRANSP, flag); - } - else { - add_view3d_after(v3d, base, V3D_XRAY, flag); - } + if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) { + add_view3d_after(&v3d->afterdraw_xray, base, flag); return; } } |