r_wateralpha for software rendering

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2278 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
TimeServ 2006-05-14 21:43:35 +00:00
parent 0634baab20
commit ccf48364b1
4 changed files with 35 additions and 6 deletions

View file

@ -279,7 +279,6 @@ void GLRenderer_Init(void)
//renderer //renderer
Cvar_Register (&r_novis, GLRENDEREROPTIONS); Cvar_Register (&r_novis, GLRENDEREROPTIONS);
Cvar_Register (&r_wateralpha, GLRENDEREROPTIONS);
Cvar_Register (&r_mirroralpha, GLRENDEREROPTIONS); Cvar_Register (&r_mirroralpha, GLRENDEREROPTIONS);
Cvar_Register (&r_norefresh, GLRENDEREROPTIONS); Cvar_Register (&r_norefresh, GLRENDEREROPTIONS);
@ -564,6 +563,7 @@ void Renderer_Init(void)
Cvar_Register (&r_fastsky, GRAPHICALNICETIES); Cvar_Register (&r_fastsky, GRAPHICALNICETIES);
Cvar_Register (&r_fastskycolour, GRAPHICALNICETIES); Cvar_Register (&r_fastskycolour, GRAPHICALNICETIES);
Cvar_Register (&r_wateralpha, GRAPHICALNICETIES);
Cvar_Register (&r_drawflat, GRAPHICALNICETIES); Cvar_Register (&r_drawflat, GRAPHICALNICETIES);
Cvar_Register (&r_menutint, GRAPHICALNICETIES); Cvar_Register (&r_menutint, GRAPHICALNICETIES);

View file

@ -632,6 +632,7 @@ R_RenderFace
*/ */
void R_RenderFace (msurface_t *fa, int clipflags) void R_RenderFace (msurface_t *fa, int clipflags)
{ {
extern float r_wateralphaval;
int i, lindex; int i, lindex;
unsigned mask; unsigned mask;
mplane_t *pplane; mplane_t *pplane;
@ -650,6 +651,16 @@ void R_RenderFace (msurface_t *fa, int clipflags)
return; return;
} }
if (r_wateralphaval != 1.0 && fa->flags & SURF_DRAWTURB)
{
if (fa->nextalphasurface)
return;
fa->nextalphasurface = r_alpha_surfaces;
r_alpha_surfaces = fa;
return;
}
if ( fa->texinfo->flags & SURF_SKY) if ( fa->texinfo->flags & SURF_SKY)
{ {
if (R_EmitSkyBox ()) if (R_EmitSkyBox ())
@ -1351,7 +1362,7 @@ void R_8DrawSpanletAlphaBlend( void ) //8 bit rendering only
{ {
unsigned btemp; unsigned btemp;
D_SetTransLevel(r_q2polydesc.alpha*255.0, BM_BLEND); D_SetTransLevel(r_q2polydesc.alpha/255.0, BM_BLEND);
do do
{ {
@ -1383,7 +1394,7 @@ void R_8DrawSpanletTurbulentAlphaBlend( void )
extern int *r_turb_turb; extern int *r_turb_turb;
unsigned btemp; unsigned btemp;
D_SetTransLevel(r_q2polydesc.alpha*255.0, BM_BLEND); D_SetTransLevel(r_q2polydesc.alpha/255.0, BM_BLEND);
do do
{ {
@ -2099,6 +2110,8 @@ void R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured )
{ {
if (alpha == 1 && !isturbulent) if (alpha == 1 && !isturbulent)
r_q2polydesc.drawspanlet = R_32DrawSpanletAlphaTest; r_q2polydesc.drawspanlet = R_32DrawSpanletAlphaTest;
else if (alpha <= 0)
return;
else else
{ {
r_q2polydesc.alpha = alpha*255; r_q2polydesc.alpha = alpha*255;
@ -2110,7 +2123,9 @@ void R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured )
} }
else if (r_pixbytes == 2) else if (r_pixbytes == 2)
{ {
if (alpha < 0.5) if (alpha < 0.2)
return;
else if (alpha < 0.5)
r_q2polydesc.drawspanlet = R_16DrawSpanlet33Stipple; r_q2polydesc.drawspanlet = R_16DrawSpanlet33Stipple;
else if (alpha < 0.9) else if (alpha < 0.9)
r_q2polydesc.drawspanlet = R_16DrawSpanlet66Stipple; r_q2polydesc.drawspanlet = R_16DrawSpanlet66Stipple;
@ -2121,6 +2136,8 @@ void R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured )
{ {
if (alpha >= TRANS_UPPER_CAP) if (alpha >= TRANS_UPPER_CAP)
r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaTest; r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaTest;
else if (alpha <= TRANS_LOWER_CAP)
return;
else if (isturbulent) else if (isturbulent)
{ {
r_q2polydesc.alpha = alpha*255; r_q2polydesc.alpha = alpha*255;
@ -2227,7 +2244,7 @@ void R_BuildPolygonFromSurface(msurface_t *fa)
} }
// PGM 09/16/98 // PGM 09/16/98
if ( fa->texinfo->flags & (SURF_WARP|SURF_FLOWING) ) if ( fa->texinfo->flags & (SURF_WARP|SURF_FLOWING) || (fa->flags & SURF_DRAWTURB) )
{ {
r_q2polydesc.pixels = (qbyte *)fa->texinfo->texture + fa->texinfo->texture->offsets[0]; r_q2polydesc.pixels = (qbyte *)fa->texinfo->texture + fa->texinfo->texture->offsets[0];
r_q2polydesc.pixel_width = fa->texinfo->texture->width; r_q2polydesc.pixel_width = fa->texinfo->texture->width;
@ -2278,7 +2295,12 @@ void SWR_DrawAlphaSurfaces( void )
{ {
R_BuildPolygonFromSurface( s ); R_BuildPolygonFromSurface( s );
if (s->texinfo->flags & SURF_TRANS66) if (s->flags & SURF_DRAWTURB)
{
extern float r_wateralphaval;
R_ClipAndDrawPoly( r_wateralphaval, true, true );
}
else if (s->texinfo->flags & SURF_TRANS66)
{ {
R_ClipAndDrawPoly( 0.66f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), true ); R_ClipAndDrawPoly( 0.66f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), true );
} }

View file

@ -89,6 +89,8 @@ float screenAspect;
float verticalFieldOfView; float verticalFieldOfView;
float xOrigin, yOrigin; float xOrigin, yOrigin;
float r_wateralphaval;
mplane_t screenedge[4]; mplane_t screenedge[4];
//colour bits (for 16 bit rendering) //colour bits (for 16 bit rendering)

View file

@ -457,12 +457,17 @@ void SWR_SetupFrame (void)
extern int r_dosirds; extern int r_dosirds;
extern int scr_chatmode; extern int scr_chatmode;
extern float r_wateralphaval;
int edgecount; int edgecount;
vrect_t vrect; vrect_t vrect;
float w, h; float w, h;
// don't allow cheats in multiplayer // don't allow cheats in multiplayer
r_wateralphaval = r_wateralpha.value;
if (!cls.allow_watervis)
r_wateralphaval = 1;
if (r_numsurfs.value) if (r_numsurfs.value)
{ {