improved DepthTest, fixing Clipping bugs
This commit is contained in:
parent
9e46ec19c8
commit
09ea33ca94
|
@ -26,6 +26,7 @@
|
|||
#include "polyobj.h"
|
||||
#include "gamefont.h"
|
||||
#include "laser.h"
|
||||
#include "endlevel.h"
|
||||
|
||||
//change to 1 for lots of spew.
|
||||
#if 0
|
||||
|
@ -74,7 +75,6 @@ int circleh10=0;
|
|||
int cross_lh[2]={0,0};
|
||||
int primary_lh[3]={0,0,0};
|
||||
int secondary_lh[5]={0,0,0,0,0};
|
||||
int bNoDepthTest=0;
|
||||
extern int glalpha_effects;
|
||||
extern GLubyte *pixels;
|
||||
extern GLubyte *texbuf;
|
||||
|
@ -584,11 +584,12 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
|
|||
int c;
|
||||
r_polyc++;
|
||||
c=grd_curcanv->cv_color;
|
||||
|
||||
OGL_DISABLE(TEXTURE_2D);
|
||||
if (Gr_scanline_darkening_level >= GR_FADE_LEVELS) {
|
||||
glColor3f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c));
|
||||
glDisable(GL_DEPTH_TEST); // ZICO - disable to show lasers correctly
|
||||
}else{
|
||||
glDepthMask(GL_FALSE);
|
||||
glColor4f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c), 1.0 - (float)Gr_scanline_darkening_level / ((float)GR_FADE_LEVELS - 1.0));
|
||||
}
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
|
@ -596,7 +597,7 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
|
|||
glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),-f2glf(pointlist[c]->p3_vec.z));
|
||||
}
|
||||
glEnd();
|
||||
glEnable(GL_DEPTH_TEST); // ZICO - enable it again to stay correct
|
||||
glDepthMask(GL_TRUE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -639,8 +640,6 @@ bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bm)
|
|||
}else{
|
||||
mprintf((0,"g3_draw_tmap: unhandled tmap_drawer %p\n",tmap_drawer_ptr));
|
||||
}
|
||||
if (!bNoDepthTest)
|
||||
glEnable(GL_DEPTH_TEST); // ZICO - we need this so we do not run into any problems if lasers or sprites show up
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -822,9 +821,11 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
|
|||
ogl_bindbmtex(bm);
|
||||
ogl_texwrap(bm->gltexture,GL_CLAMP);
|
||||
|
||||
glDisable(GL_DEPTH_TEST); // ZICO - disable to prevent sprites get cutted by polygons
|
||||
if (Endlevel_sequence)
|
||||
glDepthFunc(GL_ALWAYS);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
// Define alpha by looking for object TYPE or ID. We do this here so we have it seperated from the rest of the code.
|
||||
if (glalpha_effects && // if -gl_transparency draw following bitmaps
|
||||
(obj->type==OBJ_FIREBALL || // all types of explosions and energy-effects
|
||||
|
@ -837,8 +838,9 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
|
|||
glColor4f(1.0,1.0,1.0,0.6); // ... with 0.6 alpha
|
||||
else
|
||||
glColor3f(1.0,1.0,1.0);
|
||||
width = fixmul(width,Matrix_scale.x);
|
||||
height = fixmul(height,Matrix_scale.y);
|
||||
|
||||
width = fixmul(width,Matrix_scale.x);
|
||||
height = fixmul(height,Matrix_scale.y);
|
||||
for (i=0;i<4;i++){
|
||||
vm_vec_sub(&v1,pos,&View_position);
|
||||
vm_vec_rotate(&pv,&v1,&View_matrix);
|
||||
|
@ -864,11 +866,14 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
|
|||
pv.y+=-height;
|
||||
break;
|
||||
}
|
||||
|
||||
if (obj->id == 5 && obj->type == 1) // create small z-Offset for missile explodihg effect - prevents ugly wall-clipping
|
||||
pv.z -= F1_0;
|
||||
|
||||
glVertex3f(f2glf(pv.x),f2glf(pv.y),-f2glf(pv.z));
|
||||
}
|
||||
glEnd();
|
||||
if (!bNoDepthTest) // ZICO - need this for escape seq
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
return 0;
|
||||
}
|
||||
bool ogl_ubitmapm_c(int x, int y,grs_bitmap *bm,int c)
|
||||
|
@ -1167,7 +1172,6 @@ void ogl_start_frame(void){
|
|||
gluPerspective(90.0,1.0,0.01,1000000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();//clear matrix
|
||||
// printf("bNoDepthTest: %i\n", bNoDepthTest);
|
||||
}
|
||||
|
||||
#ifndef NMONO
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
D1X-Rebirth Changelog
|
||||
|
||||
20070226
|
||||
--------
|
||||
arch/ogl/ogl.c, main/endlevel.c, main/object.c: improved DepthTest, fixing Clipping bugs
|
||||
|
||||
20070220
|
||||
--------
|
||||
arch/sdl/key.c: Added ENTER as Game key
|
||||
|
|
|
@ -415,9 +415,6 @@ vms_angvec exit_angles={-0xa00,0,0};
|
|||
vms_matrix surface_orient;
|
||||
|
||||
int endlevel_data_loaded=0;
|
||||
#ifdef OGL
|
||||
extern int bNoDepthTest;
|
||||
#endif
|
||||
|
||||
void start_endlevel_sequence()
|
||||
{
|
||||
|
@ -509,9 +506,7 @@ void start_endlevel_sequence()
|
|||
#endif
|
||||
|
||||
Endlevel_sequence = EL_FLYTHROUGH;
|
||||
#ifdef OGL
|
||||
bNoDepthTest=1;
|
||||
#endif
|
||||
|
||||
ConsoleObject->movement_type = MT_NONE; //movement handled by flythrough
|
||||
ConsoleObject->control_type = CT_NONE;
|
||||
|
||||
|
@ -626,9 +621,6 @@ void stop_endlevel_sequence()
|
|||
Endlevel_sequence = EL_OFF;
|
||||
|
||||
PlayerFinishedLevel(0);
|
||||
#ifdef OGL
|
||||
bNoDepthTest=0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define VCLIP_BIG_PLAYER_EXPLOSION 58
|
||||
|
|
|
@ -698,7 +698,14 @@ void draw_polygon_object(object *obj)
|
|||
else
|
||||
draw_cloaked_object(obj,light,&engine_glow_value, GameTime-F1_0*10, GameTime+F1_0*10,alt_textures);
|
||||
} else {
|
||||
#ifdef OGL
|
||||
if (obj->type == OBJ_WEAPON && (Weapon_info[obj->id].model_num_inner > -1 ))
|
||||
Gr_scanline_darkening_level = 1;
|
||||
#endif
|
||||
draw_polygon_model(&obj->pos,&obj->orient,obj->rtype.pobj_info.anim_angles,obj->rtype.pobj_info.model_num,obj->rtype.pobj_info.subobj_flags,light,&engine_glow_value,alt_textures);
|
||||
#ifdef OGL
|
||||
Gr_scanline_darkening_level = GR_FADE_LEVELS;
|
||||
#endif
|
||||
if (obj->type == OBJ_WEAPON && (Weapon_info[obj->id].model_num_inner > -1 )) {
|
||||
fix dist_to_eye = vm_vec_dist_quick(&Viewer->pos, &obj->pos);
|
||||
if (dist_to_eye < Simple_model_threshhold_scale * F1_0*2)
|
||||
|
@ -708,7 +715,6 @@ void draw_polygon_object(object *obj)
|
|||
}
|
||||
|
||||
Interpolation_method = imsave;
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue