properly render cloaked walls in OpenGL (fixes #1608)

This commit is contained in:
Bradley Bell 2004-05-11 01:53:34 +00:00
parent 5338acbdcc
commit 8a2ae9e813
4 changed files with 40 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2004-05-10 Dietfrid Mali <dietfrid.mali@q-dial.de>
* arch/ogl/ogl.c, include/3d.h: added g3_draw_transp_poly() for
rendering transparent (e.g. cloaked) walls
* main/render.c: render_face now calls g3_draw_transp_poly() for
cloaked walls in OpenGL
2004-05-08 Martin Schaffner <maschaffner@gmx.ch>
* arch/sdl/digi.c: fix bug on Mac OS X where all sound, including

View file

@ -1,4 +1,4 @@
/* $Id: ogl.c,v 1.11 2003-11-27 00:21:04 btb Exp $ */
/* $Id: ogl.c,v 1.12 2004-05-11 01:53:34 btb Exp $ */
/*
*
* Graphics support functions for OpenGL.
@ -619,6 +619,22 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
return 0;
}
bool g3_draw_transp_poly(int nv, g3s_point **pointlist)
{
int c;
r_polyc++;
OGL_DISABLE(TEXTURE_2D);
glColor4f(0, 0, 0, (float)Gr_scanline_darkening_level / 31.0);
glBegin(GL_TRIANGLE_FAN);
for (c = 0; c < nv; c++)
{
glVertex3f(f2glf(pointlist[c]->p3_vec.x), f2glf(pointlist[c]->p3_vec.y), -f2glf(pointlist[c]->p3_vec.z));
}
glEnd();
return 0;
}
void gr_upoly_tmap(int nverts, int *vert ){
mprintf((0,"gr_upoly_tmap: unhandled\n"));//should never get called
}

View file

@ -1,4 +1,4 @@
/* $Id: 3d.h,v 1.9 2003-01-02 23:13:21 btb Exp $ */
/* $Id: 3d.h,v 1.10 2004-05-11 01:53:34 btb Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
@ -291,6 +291,13 @@ ubyte g3_add_delta_vec(g3s_point *dest,g3s_point *src,vms_vector *deltav);
//returns 1 if off screen, 0 if drew
bool g3_draw_poly(int nv,g3s_point **pointlist);
#ifdef OGL
// draw a transparent face.
// returns 1 if off screen, 0 if drew
// Currently implemented only for OpenGL, always returns 0.
bool g3_draw_transp_poly(int nv, g3s_point **pointlist);
#endif
//draw a texture-mapped face.
//returns 1 if off screen, 0 if drew
bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bm);

View file

@ -1,4 +1,4 @@
/* $Id: render.c,v 1.18 2003-10-10 09:36:35 btb Exp $ */
/* $Id: render.c,v 1.19 2004-05-11 01:53:34 btb Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
@ -619,9 +619,13 @@ void render_face(int segnum, int sidenum, int nv, short *vp, int tmap1, int tmap
int wall_num = Segments[segnum].sides[sidenum].wall_num;
Assert(wall_num != -1);
Gr_scanline_darkening_level = Walls[wall_num].cloak_value;
gr_setcolor(BM_XRGB(0,0,0)); //set to black (matters for s3)
#ifdef OGL
g3_draw_transp_poly(nv,pointlist); // draw as flat poly
#else
gr_setcolor(BM_XRGB(0,0,0)); // set to black (matters for s3)
g3_draw_poly(nv,pointlist); //draw as flat poly
g3_draw_poly(nv,pointlist); // draw as flat poly
#endif
Gr_scanline_darkening_level = GR_FADE_LEVELS;