ref: gl: fix opacity of additive sprites and textures in fog

This commit is contained in:
Владислав Сухов
2026-01-29 22:37:49 +00:00
committed by a1batross
parent cca6f8da2d
commit e9ffe12481
4 changed files with 17 additions and 0 deletions

View File

@@ -438,26 +438,31 @@ void GL_SetRenderMode( int mode )
{
case kRenderNormal:
default:
R_AllowFog( true );
pglDisable( GL_BLEND );
pglDisable( GL_ALPHA_TEST );
break;
case kRenderTransColor:
case kRenderTransTexture:
R_AllowFog( true );
pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
break;
case kRenderTransAlpha:
R_AllowFog( true );
pglDisable( GL_BLEND );
pglEnable( GL_ALPHA_TEST );
break;
case kRenderGlow:
case kRenderTransAdd:
R_AllowFog( false );
pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE );
break;
case kRenderScreenFadeModulate:
R_AllowFog( true );
pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_ZERO, GL_SRC_COLOR );

View File

@@ -181,6 +181,7 @@ void CL_DrawTracers( double frametime, particle_t *cl_active_tracers )
if( !TriSpriteTexture( gEngfuncs.GetDefaultSprite( REF_DOT_SPRITE ), 0 ))
return;
R_AllowFog( false );
pglEnable( GL_BLEND );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE );
pglDisable( GL_ALPHA_TEST );
@@ -267,6 +268,7 @@ void CL_DrawTracers( double frametime, particle_t *cl_active_tracers )
pglEnd();
pglDepthMask( GL_TRUE );
R_AllowFog( true );
}
/*

View File

@@ -2866,6 +2866,9 @@ static void R_StudioSetupRenderer( int rendermode )
if( rendermode > kRenderTransAdd ) rendermode = 0;
g_studio.rendermode = bound( 0, rendermode, kRenderTransAdd );
if( g_studio.rendermode == kRenderTransAdd || g_studio.rendermode == kRenderGlow )
R_AllowFog( false );
pglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
pglDisable( GL_ALPHA_TEST );
pglShadeModel( GL_SMOOTH );
@@ -2892,6 +2895,9 @@ static void R_StudioRestoreRenderer( void )
if( g_studio.rendermode != kRenderNormal )
pglDisable( GL_BLEND );
if( g_studio.rendermode == kRenderTransAdd || g_studio.rendermode == kRenderGlow )
R_AllowFog( true );
pglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
pglShadeModel( GL_FLAT );
m_fDoRemap = false;

View File

@@ -45,21 +45,25 @@ void TriRenderMode( int mode )
switch( mode )
{
case kRenderNormal:
R_AllowFog( true );
pglDisable( GL_BLEND );
pglDepthMask( GL_TRUE );
break;
case kRenderTransAlpha:
R_AllowFog( true );
pglEnable( GL_BLEND );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
pglDepthMask( GL_FALSE );
break;
case kRenderTransColor:
case kRenderTransTexture:
R_AllowFog( true );
pglEnable( GL_BLEND );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
break;
case kRenderGlow:
case kRenderTransAdd:
R_AllowFog( false );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE );
pglEnable( GL_BLEND );
pglDepthMask( GL_FALSE );