- XRAY draw for armatures now is generic "Draw Extra" option for any
  Object type. This feature just moves drawing to the end, after clearing
  the zbuffer again.
- Solid draw mode now displays materials with Alpha, with the new
  "Draw extra" option "Transp" set. This also moves drawing transparent to
  the end, but it doesn't sort the transparent faces. Still looks OK.
  Note: this is not enabled in mesh editmode. Here all the fancy extra
  drawing just makes it nearly impossible to do OK.
- Re-ordered Object Buttons -> "Draw" panel

Fixes:

- do_versions had check for the UserDef in it (new ogl texture cache).
  that can't be there, should be in usiblender.c (stupid exception).
- same error caused reading older files to not always fix version
  changes on armatures (commit yesterday).
- Outline select drawing happened also on picking-select draw, needless
  slowdown.
This commit is contained in:
2005-07-14 12:44:33 +00:00
parent 256a5cd2c0
commit e5a639a161
9 changed files with 212 additions and 115 deletions

View File

@@ -2918,6 +2918,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
View3D *v3d= (View3D*) sl;
v3d->bgpic= newdataadr(fd, v3d->bgpic);
v3d->localvd= newdataadr(fd, v3d->localvd);
v3d->afterdraw.first= v3d->afterdraw.last= NULL;
}
else if (sl->spacetype==SPACE_OOPS) {
SpaceOops *soops= (SpaceOops*) sl;
@@ -4696,17 +4697,24 @@ static void do_versions(FileData *fd, Main *main)
bConstraint *con;
Object *ob;
if(U.texcollectrate==0) { // this makes sure we don't have a recent saved file... hackish
// armature recode checks
for(arm= main->armature.first; arm; arm= arm->id.next) {
where_is_armature(arm);
}
for(ob= main->object.first; ob; ob= ob->id.next) {
// btw. armature_rebuild_pose is further only called on leave editmode
if(ob->type==OB_ARMATURE) {
if(ob->pose) {
ob->pose->flag |= POSE_RECALC;
ob->recalc |= OB_RECALC;
}
/* new generic xray option */
arm= newlibadr(fd, NULL, ob->data);
if(arm->flag & ARM_DRAWXRAY) {
arm->flag &= ~ARM_DRAWXRAY;
ob->dtx |= OB_DRAWXRAY;
}
}
// follow path constraint needs to set the 'path' option in curves...
for(con=ob->constraints.first; con; con= con->next) {
if(con->type==CONSTRAINT_TYPE_FOLLOWPATH) {
@@ -4721,13 +4729,9 @@ static void do_versions(FileData *fd, Main *main)
}
}
}
/* GL Texture Garbage Collection (variable abused above!) */
U.texcollectrate = 60;
U.textimeout = 120;
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
/* don't forget to set version number in blender.c! */
}

View File

@@ -79,7 +79,7 @@ typedef struct bArmature {
/* armature->flag */
#define ARM_RESTPOSBIT 0
#define ARM_DRAWXRAYBIT 1
#define ARM_DRAWAXESBIT 2
#define ARM_DRAWNAMESBIT 3
#define ARM_POSEBIT 4
@@ -90,6 +90,7 @@ typedef struct bArmature {
/* armature->flag */
#define ARM_RESTPOS 0x0001
/* XRAY is here only for backwards converting */
#define ARM_DRAWXRAY 0x0002
#define ARM_DRAWAXES 0x0004
#define ARM_DRAWNAMES 0x0008

View File

@@ -290,18 +290,18 @@ extern Object workob;
#define OB_SOLID 3
#define OB_SHADED 4
#define OB_TEXTURE 5
#define OB_TOON_MONO 6
#define OB_TOON_COLOR 7
#define OB_TOON_TRANSP 8
#define OB_TOON_FLAT 9
#define OB_TOON_SMOOTH 10
/* dtx: flags */
/* dtx: flags, char! */
#define OB_AXIS 2
#define OB_TEXSPACE 4
#define OB_DRAWNAME 8
#define OB_DRAWIMAGE 16
#define OB_DRAWWIRE 32 /* for solid+wire display */
/* for solid+wire display */
#define OB_DRAWWIRE 32
/* for overdraw */
#define OB_DRAWXRAY 64
/* enable transparent draw */
#define OB_DRAWTRANSP 128
/* boundtype */
#define OB_BOUND_BOX 0

View File

@@ -1794,7 +1794,7 @@ static void editing_panel_armature_type(Object *ob, bArmature *arm)
uiBlockBeginAlign(block);
uiDefButI(block, TOG|BIT|ARM_DRAWAXESBIT,REDRAWVIEW3D, "Draw Axes", bx,by-46,97,20, &arm->flag, 0, 0, 0, 0, "Draw bone axes");
uiDefButI(block, TOG|BIT|ARM_DRAWNAMESBIT,REDRAWVIEW3D, "Draw Names", bx,by-69,97,20, &arm->flag, 0, 0, 0, 0, "Draw bone names");
uiDefButI(block, TOG|BIT|ARM_DRAWXRAYBIT,REDRAWVIEW3D, "X-Ray", bx,by-92,97,20, &arm->flag, 0, 0, 0, 0, "Draw armature in front of shaded objects");
uiDefButBitC(block, TOG, OB_DRAWXRAY,REDRAWVIEW3D, "X-Ray", bx,by-92,97,20, &ob->dtx, 0, 0, 0, 0, "Draw armature in front of solid objects");
uiDefButI(block, TOG|BIT|ARM_DELAYBIT,REDRAWVIEW3D,
"Delay Deform", bx,by-115,97,20, &arm->flag, 0, 0, 0, 0,
"Don't deform children when manipulating bones in pose mode");

View File

@@ -981,17 +981,19 @@ void object_panel_draw(Object *ob)
if(uiNewPanel(curarea, block, "Draw", "Object", 320, 0, 318, 204)==0) return;
/* LAYERS */
xco= 151;
dx= 32;
xco= 120;
dx= 35;
dy= 30;
uiDefBut(block, LABEL, 0, "Layers", 10,170,100,20, NULL, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
for(a=0; a<5; a++)
uiDefButI(block, TOG|BIT|(a), B_OBLAY+a, "", (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
for(a=0; a<5; a++)
uiDefButI(block, TOG|BIT|(a+10), B_OBLAY+a+10, "", (short)(xco+a*(dx/2)), 165, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
xco+= 5;
xco+= 7;
uiBlockBeginAlign(block);
for(a=5; a<10; a++)
uiDefButI(block, TOG|BIT|(a), B_OBLAY+a, "", (short)(xco+a*(dx/2)), 180, (short)(dx/2), (short)(dy/2), &(BASACT->lay), 0, 0, 0, 0, "");
@@ -1000,19 +1002,30 @@ void object_panel_draw(Object *ob)
uiBlockEndAlign(block);
uiDefBut(block, LABEL, 0, "Drawtype", 28,200,100,18, NULL, 0, 0, 0, 0, "");
uiDefButC(block, MENU, REDRAWVIEW3D, "Drawtype%t|Bounds %x1|Wire %x2|Solid %x3|Shaded %x4",
28,180,100,18, &ob->dt, 0, 0, 0, 0, "Sets the drawing type of the active object");
uiDefBut(block, LABEL, 0, "Draw Extra", 28,160,100,18, NULL, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButC(block, TOG|BIT|0, REDRAWVIEW3D, "Bounds", 28, 140, 100, 18, &ob->dtx, 0, 0, 0, 0, "Displays the active object's bounds");
uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Polyheder%x4",
28, 120, 100, 18, &ob->boundtype, 0, 0, 0, 0, "Selects the boundary display type");
uiDefButBitC(block, TOG, OB_DRAWWIRE, REDRAWVIEW3D, "Wire", 28, 100, 100, 18, &ob->dtx, 0, 0, 0, 0, "Displays the active object's wireframe in shaded drawing modes");
uiDefButBitC(block, TOG, OB_AXIS, REDRAWVIEW3D, "Axis", 28, 80, 100, 18, &ob->dtx, 0, 0, 0, 0, "Displays the active object's centre and axis");
uiDefButBitC(block, TOG, OB_TEXSPACE, REDRAWVIEW3D, "TexSpace", 28, 60, 100, 18, &ob->dtx, 0, 0, 0, 0, "Displays the active object's texture space");
uiDefButBitC(block, TOG, OB_DRAWNAME, REDRAWVIEW3D, "Name", 28, 40, 100, 18, &ob->dtx, 0, 0, 0, 0, "Displays the active object's name");
uiDefBut(block, LABEL, 0, "Drawtype", 10,120,100,20, NULL, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButC(block, ROW, REDRAWVIEW3D, "Shaded", 10,100,100, 20, &ob->dt, 0, OB_SHADED, 0, 0, "Draw active object shaded or textured");
uiDefButC(block, ROW, REDRAWVIEW3D, "Solid", 10,80,100, 20, &ob->dt, 0, OB_SOLID, 0, 0, "Draw active object in solid");
uiDefButC(block, ROW, REDRAWVIEW3D, "Wire", 10,60, 100, 20, &ob->dt, 0, OB_WIRE, 0, 0, "Draw active object in wireframe");
uiDefButC(block, ROW, REDRAWVIEW3D, "Bounds", 10,40, 100, 20, &ob->dt, 0, OB_BOUNDBOX, 0, 0, "Only draw object with bounding box");
uiBlockEndAlign(block);
uiDefBut(block, LABEL, 0, "Draw Extra", 120,120,90,20, NULL, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButC(block, TOG|BIT|0, REDRAWVIEW3D, "Bounds", 120, 100, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's bounds");
uiDefButBitC(block, TOG, OB_DRAWNAME, REDRAWVIEW3D, "Name", 210, 100, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's name");
uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Polyheder%x4",
120, 80, 90, 20, &ob->boundtype, 0, 0, 0, 0, "Selects the boundary display type");
uiDefButBitC(block, TOG, OB_AXIS, REDRAWVIEW3D, "Axis", 210, 80, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's centre and axis");
uiDefButBitC(block, TOG, OB_TEXSPACE, REDRAWVIEW3D, "TexSpace", 120, 60, 90, 20, &ob->dtx, 0, 0, 0, 0, "Displays the active object's texture space");
uiDefButBitC(block, TOG, OB_DRAWWIRE, REDRAWVIEW3D, "Wire", 210, 60, 90, 20, &ob->dtx, 0, 0, 0, 0, "Adds the active object's wireframe over solid drawing");
uiDefButBitC(block, TOG, OB_DRAWTRANSP, REDRAWVIEW3D, "Transp", 120, 40, 90, 20, &ob->dtx, 0, 0, 0, 0, "Enables transparent materials for the active object (Mesh only)");
uiDefButBitC(block, TOG, OB_DRAWXRAY, REDRAWVIEW3D, "X-ray", 210, 40, 90, 20, &ob->dtx, 0, 0, 0, 0, "Makes the active object draw in front of others");
}

View File

@@ -559,7 +559,7 @@ void draw_armature(Object *ob, int dt)
arm->flag &= ~ARM_POSEMODE;
}
}
/* resore */
/* restore */
glFrontFace(GL_CCW);
}

View File

@@ -120,18 +120,46 @@ extern ListBase editelems;
static void draw_bounding_volume(Object *ob);
/***/
/* ************* Setting OpenGL Material ************ */
// Materials start counting at # one....
#define MAXMATBUF (MAXMAT + 1)
static float matbuf[MAXMATBUF][2][4];
static int last_gl_matnr=-1;
static void init_gl_materials(Object *ob)
static int set_gl_material(int nr)
{
static int last_gl_matnr= -1;
static int last_ret_val= 1;
if(nr<0) {
last_gl_matnr= -1;
last_ret_val= 1;
}
else if(nr<MAXMATBUF && nr!=last_gl_matnr) {
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matbuf[nr][0]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matbuf[nr][1]);
last_gl_matnr = nr;
last_ret_val= matbuf[nr][0][3]!=0.0;
/* matbuf alpha: 0.0 = skip draw, 1.0 = no blending, else blend */
if(matbuf[nr][0][3]!= 0.0 && matbuf[nr][0][3]!= 1.0) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
}
else
glDisable(GL_BLEND);
}
return last_ret_val;
}
/* returns 1: when there's alpha needed to be drawn in a 2nd pass */
static int init_gl_materials(Object *ob)
{
extern Material defmaterial; // render module abuse...
Material *ma;
int a;
int a, has_alpha= 0;
if(ob->totcol==0) {
matbuf[0][0][0]= defmaterial.r;
@@ -145,8 +173,8 @@ static void init_gl_materials(Object *ob)
matbuf[0][1][3]= 1.0;
/* do material 1 too, for displists! */
VECCOPY(matbuf[1][0], matbuf[0][0]);
VECCOPY(matbuf[1][1], matbuf[0][1]);
QUATCOPY(matbuf[1][0], matbuf[0][0]);
QUATCOPY(matbuf[1][1], matbuf[0][1]);
}
for(a=1; a<=ob->totcol; a++) {
@@ -156,6 +184,22 @@ static void init_gl_materials(Object *ob)
matbuf[a][0][0]= (ma->ref+ma->emit)*ma->r;
matbuf[a][0][1]= (ma->ref+ma->emit)*ma->g;
matbuf[a][0][2]= (ma->ref+ma->emit)*ma->b;
/* draw transparent, not in pick-select, nor editmode */
if(!(G.f & G_PICKSEL) && (ob->dtx & OB_DRAWTRANSP) && !(G.obedit && G.obedit->data==ob->data)) {
if(G.vd->transp) { // drawing the transparent pass
if(ma->alpha==1.0) matbuf[a][0][3]= 0.0; // means skip solid
else matbuf[a][0][3]= ma->alpha;
}
else { // normal pass
if(ma->alpha==1.0) matbuf[a][0][3]= 1.0;
else {
matbuf[a][0][3]= 0.0; // means skip transparent
has_alpha= 1; // return value, to indicate adding to after-draw queue
}
}
}
else
matbuf[a][0][3]= 1.0;
matbuf[a][1][0]= ma->spec*ma->specr;
@@ -165,19 +209,10 @@ static void init_gl_materials(Object *ob)
}
}
last_gl_matnr = -1;
set_gl_material(-1); // signal for static variable
return has_alpha;
}
static int set_gl_material(int nr)
{
if(nr<MAXMATBUF && nr!=last_gl_matnr) {
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matbuf[nr][0]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matbuf[nr][1]);
last_gl_matnr = nr;
}
return 1;
}
/***/
@@ -1636,7 +1671,6 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *baseDM, Derived
}
if(dt>OB_WIRE) {
init_gl_materials(ob);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED);
glEnable(GL_LIGHTING);
@@ -1657,7 +1691,8 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *baseDM, Derived
bglPolygonOffset(1.0);
glDepthMask(0);
} else {
}
else {
if (realDM && !(me->flag&ME_OPT_EDGES)) {
BIF_ThemeColorBlend(TH_WIRE, TH_BACK, 0.7);
realDM->drawEdges(realDM);
@@ -1719,15 +1754,26 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *baseDM, Derived
/* Mesh drawing routines */
static void draw_mesh_object_outline(DerivedMesh *dm)
static void draw_mesh_object_outline(Object *ob, DerivedMesh *dm)
{
if(G.vd->transp==0) { // not when we draw the transparent pass
glLineWidth(2.0);
glDepthMask(0);
/* if transparent, we cannot draw the edges for solid select... edges have no material info.
drawFacesSolid() doesn't draw the transparent faces */
if(ob->dtx & OB_DRAWTRANSP) {
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
dm->drawFacesSolid(dm, set_gl_material);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
else
dm->drawEdges(dm);
glLineWidth(1.0);
glDepthMask(1);
}
}
static void draw_mesh_fancy(Object *ob, DerivedMesh *baseDM, DerivedMesh *realDM, int dt)
@@ -1781,18 +1827,19 @@ static void draw_mesh_fancy(Object *ob, DerivedMesh *baseDM, DerivedMesh *realDM
draw_wire = 1;
}
else if( (ob==OBACT && (G.f & G_FACESELECT)) || (G.vd->drawtype==OB_TEXTURE && dt>OB_SOLID)) {
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (ob->flag&SELECT) && !(G.f&G_FACESELECT) && !draw_wire) {
draw_mesh_object_outline(dm);
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (ob->flag&SELECT) && !(G.f&(G_FACESELECT|G_PICKSEL)) && !draw_wire) {
draw_mesh_object_outline(ob, dm);
}
draw_tface_mesh(ob, ob->data, dt);
}
else if(dt==OB_SOLID ) {
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (ob->flag&SELECT) && !draw_wire) {
draw_mesh_object_outline(dm);
draw_mesh_object_outline(ob, dm);
}
init_gl_materials(ob);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED );
glEnable(GL_LIGHTING);
@@ -1833,7 +1880,7 @@ static void draw_mesh_fancy(Object *ob, DerivedMesh *baseDM, DerivedMesh *realDM
obCol2 = dl->col2;
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (ob->flag&SELECT) && !draw_wire) {
draw_mesh_object_outline(dm);
draw_mesh_object_outline(ob, dm);
}
dm->drawFacesColored(dm, me->flag&ME_TWOSIDED, (unsigned char*) obCol1, (unsigned char*) obCol2);
@@ -1869,22 +1916,29 @@ static void draw_mesh_fancy(Object *ob, DerivedMesh *baseDM, DerivedMesh *realDM
}
}
static void draw_mesh_object(Object *ob, int dt)
static void draw_mesh_object(Base *base, int dt)
{
Object *ob= base->object;
Mesh *me= ob->data;
DerivedMesh *baseDM = mesh_get_base_derived(ob);
DerivedMesh *realDM = mesh_get_derived(ob);
int has_alpha= 0;
if(G.obedit && ob->data==G.obedit->data) {
if(dt>OB_WIRE) init_gl_materials(ob); // no transp in editmode, the fancy draw over goes bad then
draw_em_fancy(ob, G.editMesh, baseDM, realDM, dt);
}
else {
if(me->bb==NULL) tex_space_mesh(me);
if(me->totface<=4 || boundbox_clip(ob->obmat, me->bb)) {
if(dt==OB_SOLID) has_alpha= init_gl_materials(ob);
draw_mesh_fancy(ob, baseDM, realDM, dt);
}
}
/* init_gl_materials did the proper checking if this is needed */
if(has_alpha) add_view3d_after(G.vd, base, V3D_TRANSP);
baseDM->release(baseDM);
}
@@ -3343,9 +3397,6 @@ static void drawSolidSelect(Object *ob)
}
else if(ob->type==OB_ARMATURE) {
if(ob!=G.obpose) {
bArmature *arm= ob->data;
if(G.vd->xray || (arm->flag & ARM_DRAWXRAY)==0)
draw_armature(ob, OB_WIRE);
}
}
@@ -3427,6 +3478,14 @@ void draw_object(Base *base)
ob= base->object;
/* xray delay? */
if(!(G.f & G_PICKSEL)) {
if(!G.vd->xray && (ob->dtx & OB_DRAWXRAY)) {
add_view3d_after(G.vd, base, V3D_XRAY);
return;
}
}
/* draw keys? */
if(base==(G.scene->basact) || (base->flag & (SELECT+BA_WAS_SEL))) {
if(warning_recursive==0 && ob!=G.obedit) {
@@ -3579,7 +3638,7 @@ void draw_object(Base *base)
/* draw outline for selected solid objects, mesh does itself */
if((G.vd->flag & V3D_SELECT_OUTLINE) && ob->type!=OB_MESH) {
if(dt>OB_WIRE && dt<OB_TEXTURE && ob!=G.obedit) {
if (!(ob->dtx&OB_DRAWWIRE) && (ob->flag&SELECT)) {
if (!(ob->dtx&OB_DRAWWIRE) && (ob->flag&SELECT) && !(G.f&G_PICKSEL)) {
drawSolidSelect(ob);
}
}
@@ -3588,7 +3647,7 @@ void draw_object(Base *base)
switch( ob->type) {
case OB_MESH:
if (!(base->flag&OB_RADIO)) {
draw_mesh_object(ob, dt);
draw_mesh_object(base, dt);
dtx &= ~OB_DRAWWIRE; // mesh draws wire itself
if(G.obedit!=ob && warning_recursive==0) {
@@ -3715,15 +3774,7 @@ void draw_object(Base *base)
drawlattice(ob);
break;
case OB_ARMATURE:
if(G.f & G_PICKSEL) // no xray delay in picking select
draw_armature(ob, dt);
else {
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);

View File

@@ -1858,18 +1858,18 @@ static void view3d_draw_xray(View3D *v3d)
View3DAfter *v3da, *next;
int doit= 0;
for(v3da= G.vd->afterdraw.first; v3da; v3da= v3da->next)
for(v3da= v3d->afterdraw.first; v3da; v3da= v3da->next)
if(v3da->type==V3D_XRAY) doit= 1;
if(doit) {
if(v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT);
v3d->xray= TRUE;
for(v3da= G.vd->afterdraw.first; v3da; v3da= next) {
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
next= v3da->next;
if(v3da->type==V3D_XRAY) {
draw_object(v3da->base);
BLI_remlink(&G.vd->afterdraw, v3da);
BLI_remlink(&v3d->afterdraw, v3da);
MEM_freeN(v3da);
}
}
@@ -1877,6 +1877,28 @@ static void view3d_draw_xray(View3D *v3d)
}
}
/* disables write in zbuffer and draws it over */
static void view3d_draw_transp(View3D *v3d)
{
View3DAfter *v3da, *next;
glDepthMask(0);
v3d->transp= TRUE;
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
next= v3da->next;
if(v3da->type==V3D_TRANSP) {
draw_object(v3da->base);
BLI_remlink(&v3d->afterdraw, v3da);
MEM_freeN(v3da);
}
}
v3d->transp= FALSE;
glDepthMask(1);
}
void drawview3dspace(ScrArea *sa, void *spacedata)
{
View3D *v3d= spacedata;
@@ -1891,7 +1913,7 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
Mat4Invert(v3d->viewinv, v3d->viewmat);
if(v3d->drawtype > OB_WIRE) {
G.vd->zbuf= TRUE;
v3d->zbuf= TRUE;
glEnable(GL_DEPTH_TEST);
if(G.f & G_SIMULATION) {
glClearColor(0.0, 0.0, 0.0, 0.0);
@@ -2072,13 +2094,14 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID);
/* XRAY afterdraw stuff */
view3d_draw_xray(G.vd);
/* Transp and X-ray afterdraw stuff */
if(v3d->zbuf) view3d_draw_transp(v3d);
view3d_draw_xray(v3d); // clears zbuffer if it is used!
BIF_draw_manipulator(sa);
if(G.vd->zbuf) {
G.vd->zbuf= FALSE;
if(v3d->zbuf) {
v3d->zbuf= FALSE;
glDisable(GL_DEPTH_TEST);
}
@@ -2151,7 +2174,7 @@ void drawview3d_render(struct View3D *v3d)
Mat4Invert(v3d->viewinv, v3d->viewmat);
if(v3d->drawtype > OB_WIRE) {
G.vd->zbuf= TRUE;
v3d->zbuf= TRUE;
glEnable(GL_DEPTH_TEST);
}
@@ -2262,13 +2285,14 @@ void drawview3d_render(struct View3D *v3d)
base= base->next;
}
if(G.scene->radio) RAD_drawall(G.vd->drawtype>=OB_SOLID);
if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID);
/* XRAY afterdraw stuff */
view3d_draw_xray(G.vd);
/* Transp and X-ray afterdraw stuff */
if(v3d->zbuf) view3d_draw_transp(v3d);
view3d_draw_xray(v3d); // clears zbuffer if it is used!
if(G.vd->zbuf) {
G.vd->zbuf= FALSE;
if(v3d->zbuf) {
v3d->zbuf= FALSE;
glDisable(GL_DEPTH_TEST);
}

View File

@@ -239,6 +239,10 @@ static void init_userdef_file(void)
if (U.undosteps==0) U.undosteps=32;
/* GL Texture Garbage Collection (variable abused above!) */
U.texcollectrate = 60;
U.textimeout = 120;
reset_autosave();
#ifdef INTERNATIONAL