From 56ef16b0f9fc6663b5c2954c7f8361eb8298950d Mon Sep 17 00:00:00 2001 From: mittorn Date: Fri, 29 Mar 2019 03:52:08 +0700 Subject: [PATCH] ref_soft: enable stiple alpha by default, cache conveyors --- r_edge.c | 25 ++++++++++++++++--------- r_main.c | 2 +- r_poly.c | 16 ++++++++-------- r_surf.c | 22 ++++++++++++++++++++++ 4 files changed, 47 insertions(+), 18 deletions(-) diff --git a/r_edge.c b/r_edge.c index 59443524..c5b4b006 100644 --- a/r_edge.c +++ b/r_edge.c @@ -847,14 +847,15 @@ void D_CalcGradients (msurface_t *pface) tadjust = ((fixed16_t)(DotProduct (p_temp1, p_taxis) * 0x10000 + 0.5)) - ((pface->texturemins[1] << 16) >> miplevel) + pface->texinfo->vecs[1][3]*t; -#if 0 +#if 1 // PGM - changing flow speed for non-warping textures. - if (pface->texinfo->flags & SURF_FLOWING) + if (pface->flags & SURF_CONVEYOR) { - if(pface->texinfo->flags & SURF_WARP) - sadjust += 0x10000 * (-128 * ( (r_newrefdef.time * 0.25) - (int)(r_newrefdef.time * 0.25) )); + + if(pface->flags & SURF_DRAWTURB) + sadjust += 0x10000 * (-128 * ( (gpGlobals->time * 0.25) - (int)(gpGlobals->time * 0.25) )); else - sadjust += 0x10000 * (-128 * ( (r_newrefdef.time * 0.77) - (int)(r_newrefdef.time * 0.77) )); + sadjust += 0x10000 * (-128 * ( (gpGlobals->time * 0.77) - (int)(gpGlobals->time * 0.77) )); } // PGM #endif @@ -1010,8 +1011,16 @@ void D_SolidSurf (surf_t *s) RI.currententity = gEngfuncs.GetEntityByIndex(0); //r_worldentity; pface = s->msurf; + + + if( !pface ) + return; #if 1 - miplevel = D_MipLevelForScale(s->nearzi * scale_for_mip ); + + if( pface->flags & SURF_CONVEYOR ) + miplevel = 1; + else + miplevel = D_MipLevelForScale(s->nearzi * scale_for_mip ); #else { float dot; @@ -1039,8 +1048,6 @@ void D_SolidSurf (surf_t *s) } #endif - if( !pface ) - return; // FIXME: make this passed in to D_CacheSurface pcurrentcache = D_CacheSurface (pface, miplevel); @@ -1125,7 +1132,7 @@ void D_DrawSurfaces (void) #if 1 if(s->flags & SURF_DRAWSKY) D_BackgroundSurf (s); - else if (s->flags & SURF_DRAWTURB) + else if (s->flags & SURF_DRAWTURB ) D_TurbulentSurf (s); else D_SolidSurf (s); diff --git a/r_main.c b/r_main.c index f606d33e..12fbf87b 100644 --- a/r_main.c +++ b/r_main.c @@ -1945,7 +1945,7 @@ qboolean R_Init() sw_mipscale = gEngfuncs.Cvar_Get ("sw_mipscale", "1", 0, ""); sw_reportedgeout = gEngfuncs.Cvar_Get ("sw_reportedgeout", "0", 0, ""); sw_reportsurfout = gEngfuncs.Cvar_Get ("sw_reportsurfout", "0", 0, ""); - sw_stipplealpha = gEngfuncs.Cvar_Get( "sw_stipplealpha", "0", FCVAR_ARCHIVE, "" ); + sw_stipplealpha = gEngfuncs.Cvar_Get( "sw_stipplealpha", "1", FCVAR_ARCHIVE, "" ); sw_surfcacheoverride = gEngfuncs.Cvar_Get ("sw_surfcacheoverride", "0", 0, ""); sw_waterwarp = gEngfuncs.Cvar_Get ("sw_waterwarp", "1", 0, ""); sw_mode = gEngfuncs.Cvar_Get( "sw_mode", "0", FCVAR_ARCHIVE, ""); diff --git a/r_poly.c b/r_poly.c index 129793bf..7237aaf4 100644 --- a/r_poly.c +++ b/r_poly.c @@ -252,8 +252,8 @@ void R_DrawSpanletTurbulentBlended66( void ) { pixel_t screen = *s_spanletvars.pdest; pixel_t src = btemp; - byte alpha = 4; - *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0x7f) >> 3 | ((src & 0xff)); + byte alpha = 5; + *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0xff) | ((src & 0xff)); } s_spanletvars.izi += s_spanletvars.izistep; @@ -281,8 +281,8 @@ void R_DrawSpanletTurbulentBlended33( void ) { pixel_t screen = *s_spanletvars.pdest; pixel_t src = btemp; - byte alpha = 4; - *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0x7f) >> 3 | ((src & 0xff)); + byte alpha = 2; + *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0xff)| ((src & 0xff)); } s_spanletvars.izi += s_spanletvars.izistep; @@ -316,8 +316,8 @@ void R_DrawSpanlet33( void ) { pixel_t screen = *s_spanletvars.pdest; pixel_t src = btemp; - byte alpha = 4; - *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0x7f) >> 3 | ((src & 0xff)); + byte alpha = 2; + *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0xff)| ((src & 0xff)); } } @@ -367,8 +367,8 @@ void R_DrawSpanlet66( void ) { pixel_t screen = *s_spanletvars.pdest; pixel_t src = btemp; - byte alpha = 4; - *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0x7f) >> 3 | ((src & 0xff)); + byte alpha = 5; + *s_spanletvars.pdest = vid.alphamap[( alpha << 16)|(src & 0xff00)|(screen>>8)] << 8 | (screen & 0xff)| ((src & 0xff)); } } diff --git a/r_surf.c b/r_surf.c index 65011ae1..37bd53f8 100644 --- a/r_surf.c +++ b/r_surf.c @@ -187,6 +187,14 @@ static void R_BuildLightMap( ) size = smax * tmax; + if( surf->flags & SURF_CONVEYOR ) + { + smax = ( info->lightextents[0] * 3 / sample_size ) + 1; + size = smax * tmax; + memset( blocklights, 0xff, sizeof( uint ) * size ); + return; + } + lm = surf->samples; memset( blocklights, 0, sizeof( uint ) * size ); @@ -1101,6 +1109,19 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) // r_drawsurf.image = R_GetTexture(R_TextureAnimation (surface)->gl_texturenum); + if( surface->flags & SURF_CONVEYOR ) + { + if( miplevel >= 1) + { + surface->extents[0] = surface->info->lightextents[0] * gEngfuncs.Mod_SampleSizeForFace( r_drawsurf.surf ) * 2 ; + surface->texturemins[0] = -surface->info->lightextents[0] * gEngfuncs.Mod_SampleSizeForFace( r_drawsurf.surf ); + } + else + { + surface->extents[0] = surface->info->lightextents[0] * gEngfuncs.Mod_SampleSizeForFace( r_drawsurf.surf ) ; + surface->texturemins[0] = -surface->info->lightextents[0] * gEngfuncs.Mod_SampleSizeForFace( r_drawsurf.surf )/2; + } + } /// todo: port this //r_drawsurf.lightadj[0] = r_newrefdef.lightstyles[surface->styles[0]].white*128; //r_drawsurf.lightadj[1] = r_newrefdef.lightstyles[surface->styles[1]].white*128; @@ -1138,6 +1159,7 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) r_drawsurf.surfwidth = surface->extents[0] >> miplevel; r_drawsurf.rowbytes = r_drawsurf.surfwidth; r_drawsurf.surfheight = surface->extents[1] >> miplevel; + // // allocate memory if needed