[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14191] trunk/blender/source/blender/src/ drawview.c: Objects with transp and xray work with border zoom (shift+b),
Campbell Barton
ideasman42 at gmail.com
Thu Mar 20 22:43:32 CET 2008
Revision: 14191
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14191
Author: campbellbarton
Date: 2008-03-20 22:43:32 +0100 (Thu, 20 Mar 2008)
Log Message:
-----------
Objects with transp and xray work with border zoom (shift+b),
zooming behind an object to one with xray now works, transp objects work like normal objects.
Modified Paths:
--------------
trunk/blender/source/blender/src/drawview.c
Modified: trunk/blender/source/blender/src/drawview.c
===================================================================
--- trunk/blender/source/blender/src/drawview.c 2008-03-20 20:28:51 UTC (rev 14190)
+++ trunk/blender/source/blender/src/drawview.c 2008-03-20 21:43:32 UTC (rev 14191)
@@ -2894,10 +2894,11 @@
View3D *v3d= spacedata;
Base *base;
Scene *sce;
- short drawtype;
+ short drawtype, zbuf;
/* temp set drawtype to solid */
drawtype = v3d->drawtype;
+ zbuf = v3d->zbuf;
v3d->drawtype = OB_SOLID;
@@ -2923,13 +2924,8 @@
/* draw set first */
if(G.scene->set) {
for(SETLOOPER(G.scene->set, base)) {
-
if(v3d->lay & base->lay) {
-
- /*BIF_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);*/ /* not needed for depths */
-
- draw_object(base, DRAW_CONSTCOLOR);
-
+ draw_object(base, 0);
if(base->object->transflag & OB_DUPLI) {
draw_dupli_objects_color(v3d, base, TH_WIRE);
}
@@ -2937,7 +2933,6 @@
}
}
- /* then draw not selected and the duplis, but skip editmode object */
for(base= G.scene->base.first; base; base= base->next) {
if(v3d->lay & base->lay) {
@@ -2949,7 +2944,42 @@
}
}
+ /* this isnt that nice, draw xray objects as if they are normal */
+ if (v3d->afterdraw.first) {
+ View3DAfter *v3da, *next;
+ int num = 0;
+ v3d->xray= TRUE;
+
+ glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
+ for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
+ next= v3da->next;
+ if(v3da->type==V3D_XRAY) {
+ draw_object(v3da->base, 0);
+ num++;
+ }
+ /* dont remove this time */
+ }
+ v3d->xray= FALSE;
+
+ glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */
+ for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
+ next= v3da->next;
+ if(v3da->type==V3D_XRAY) {
+ v3d->xray= TRUE; v3d->transp= FALSE;
+ } else if (v3da->type==V3D_TRANSP) {
+ v3d->xray= FALSE; v3d->transp= TRUE;
+ }
+
+ draw_object(v3da->base, 0); /* Draw Xray or Transp objects normally */
+ BLI_remlink(&v3d->afterdraw, v3da);
+ MEM_freeN(v3da);
+ }
+ v3d->xray= FALSE;
+ v3d->transp= FALSE;
+ }
+
v3d->drawtype = drawtype;
+ v3d->zbuf = zbuf;
}
static void draw_viewport_fps(ScrArea *sa);
More information about the Bf-blender-cvs
mailing list