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: case kRenderNormal:
default: default:
R_AllowFog( true );
pglDisable( GL_BLEND ); pglDisable( GL_BLEND );
pglDisable( GL_ALPHA_TEST ); pglDisable( GL_ALPHA_TEST );
break; break;
case kRenderTransColor: case kRenderTransColor:
case kRenderTransTexture: case kRenderTransTexture:
R_AllowFog( true );
pglEnable( GL_BLEND ); pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST ); pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); pglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
break; break;
case kRenderTransAlpha: case kRenderTransAlpha:
R_AllowFog( true );
pglDisable( GL_BLEND ); pglDisable( GL_BLEND );
pglEnable( GL_ALPHA_TEST ); pglEnable( GL_ALPHA_TEST );
break; break;
case kRenderGlow: case kRenderGlow:
case kRenderTransAdd: case kRenderTransAdd:
R_AllowFog( false );
pglEnable( GL_BLEND ); pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST ); pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE ); pglBlendFunc( GL_SRC_ALPHA, GL_ONE );
break; break;
case kRenderScreenFadeModulate: case kRenderScreenFadeModulate:
R_AllowFog( true );
pglEnable( GL_BLEND ); pglEnable( GL_BLEND );
pglDisable( GL_ALPHA_TEST ); pglDisable( GL_ALPHA_TEST );
pglBlendFunc( GL_ZERO, GL_SRC_COLOR ); 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 )) if( !TriSpriteTexture( gEngfuncs.GetDefaultSprite( REF_DOT_SPRITE ), 0 ))
return; return;
R_AllowFog( false );
pglEnable( GL_BLEND ); pglEnable( GL_BLEND );
pglBlendFunc( GL_SRC_ALPHA, GL_ONE ); pglBlendFunc( GL_SRC_ALPHA, GL_ONE );
pglDisable( GL_ALPHA_TEST ); pglDisable( GL_ALPHA_TEST );
@@ -267,6 +268,7 @@ void CL_DrawTracers( double frametime, particle_t *cl_active_tracers )
pglEnd(); pglEnd();
pglDepthMask( GL_TRUE ); pglDepthMask( GL_TRUE );
R_AllowFog( true );
} }
/* /*

View File

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

View File

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