Revision: 14706 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14706 Author: blendix Date: 2008-05-06 17:31:17 +0200 (Tue, 06 May 2008)
Log Message: ----------- Fix for bug: drawing x-ray and transparency with sets didn't work well, now it draws those type of objects from sets also at the end. Modified Paths: -------------- trunk/blender/source/blender/include/BSE_drawview.h trunk/blender/source/blender/src/drawobject.c trunk/blender/source/blender/src/drawview.c Modified: trunk/blender/source/blender/include/BSE_drawview.h =================================================================== --- trunk/blender/source/blender/include/BSE_drawview.h 2008-05-06 09:43:28 UTC (rev 14705) +++ trunk/blender/source/blender/include/BSE_drawview.h 2008-05-06 15:31:17 UTC (rev 14706) @@ -46,7 +46,7 @@ /* View3DAfter->type */ #define V3D_XRAY 1 #define V3D_TRANSP 2 -void add_view3d_after(struct View3D *v3d, struct Base *base, int type); +void add_view3d_after(struct View3D *v3d, struct Base *base, int type, int flag); void backdrawview3d(int test); void check_backbuf(void); Modified: trunk/blender/source/blender/src/drawobject.c =================================================================== --- trunk/blender/source/blender/src/drawobject.c 2008-05-06 09:43:28 UTC (rev 14705) +++ trunk/blender/source/blender/src/drawobject.c 2008-05-06 15:31:17 UTC (rev 14706) @@ -2485,7 +2485,7 @@ } /* init_gl_materials did the proper checking if this is needed */ - if(has_alpha) add_view3d_after(G.vd, base, V3D_TRANSP); + if(has_alpha) add_view3d_after(G.vd, base, V3D_TRANSP, flag); return retval; } @@ -4663,7 +4663,7 @@ if(!(G.f & G_PARTICLEEDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ if(!G.vd->xray && !G.vd->transp && (ob->dtx & OB_DRAWXRAY)) { - add_view3d_after(G.vd, base, V3D_XRAY); + add_view3d_after(G.vd, base, V3D_XRAY, flag); return; } } Modified: trunk/blender/source/blender/src/drawview.c =================================================================== --- trunk/blender/source/blender/src/drawview.c 2008-05-06 09:43:28 UTC (rev 14705) +++ trunk/blender/source/blender/src/drawview.c 2008-05-06 15:31:17 UTC (rev 14706) @@ -2663,21 +2663,22 @@ typedef struct View3DAfter { struct View3DAfter *next, *prev; struct Base *base; - int type; + int type, flag; } View3DAfter; /* temp storage of Objects that need to be drawn as last */ -void add_view3d_after(View3D *v3d, Base *base, int type) +void add_view3d_after(View3D *v3d, Base *base, int type, int flag) { View3DAfter *v3da= MEM_callocN(sizeof(View3DAfter), "View 3d after"); BLI_addtail(&v3d->afterdraw, v3da); v3da->base= base; v3da->type= type; + v3da->flag= flag; } /* clears zbuffer and draws it over */ -static void view3d_draw_xray(View3D *v3d, int flag) +static void view3d_draw_xray(View3D *v3d) { View3DAfter *v3da, *next; int doit= 0; @@ -2692,7 +2693,7 @@ for(v3da= v3d->afterdraw.first; v3da; v3da= next) { next= v3da->next; if(v3da->type==V3D_XRAY) { - draw_object(v3da->base, flag); + draw_object(v3da->base, v3da->flag); BLI_remlink(&v3d->afterdraw, v3da); MEM_freeN(v3da); } @@ -2702,7 +2703,7 @@ } /* disables write in zbuffer and draws it over */ -static void view3d_draw_transp(View3D *v3d, int flag) +static void view3d_draw_transp(View3D *v3d) { View3DAfter *v3da, *next; @@ -2712,7 +2713,7 @@ for(v3da= v3d->afterdraw.first; v3da; v3da= next) { next= v3da->next; if(v3da->type==V3D_TRANSP) { - draw_object(v3da->base, flag); + draw_object(v3da->base, v3da->flag); BLI_remlink(&v3d->afterdraw, v3da); MEM_freeN(v3da); } @@ -3102,9 +3103,7 @@ } } - /* Transp and X-ray afterdraw stuff */ - view3d_draw_xray(v3d, DRAW_CONSTCOLOR); // clears zbuffer if it is used! - view3d_draw_transp(v3d, DRAW_CONSTCOLOR); + /* Transp and X-ray afterdraw stuff for sets is done later */ } /* then draw not selected and the duplis, but skip editmode object */ @@ -3150,8 +3149,8 @@ if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID); /* Transp and X-ray afterdraw stuff */ - view3d_draw_xray(v3d, 0); // clears zbuffer if it is used! - view3d_draw_transp(v3d, 0); + view3d_draw_xray(v3d); // clears zbuffer if it is used! + view3d_draw_transp(v3d); if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) { if(G.f & G_SCULPTMODE) @@ -3327,9 +3326,7 @@ } } - /* Transp and X-ray afterdraw stuff */ - view3d_draw_xray(v3d, DRAW_CONSTCOLOR); // clears zbuffer if it is used! - view3d_draw_transp(v3d, DRAW_CONSTCOLOR); + /* Transp and X-ray afterdraw stuff for sets is done later */ } /* first not selected and duplis */ @@ -3367,8 +3364,8 @@ if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID); /* Transp and X-ray afterdraw stuff */ - view3d_draw_xray(v3d, 0); // clears zbuffer if it is used! - view3d_draw_transp(v3d, 0); + view3d_draw_xray(v3d); // clears zbuffer if it is used! + view3d_draw_transp(v3d); if(v3d->flag & V3D_CLIPPING) view3d_clr_clipping(); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs