diff --git a/code/renderer/tr_backend.c b/code/renderer/tr_backend.c index fa00f379..a8c411e1 100644 --- a/code/renderer/tr_backend.c +++ b/code/renderer/tr_backend.c @@ -402,31 +402,45 @@ void GL_State( unsigned long stateBits ) // if ( diff & GLS_ATEST_BITS ) { - switch ( stateBits & GLS_ATEST_BITS ) + switch (stateBits & GLS_ATEST_BITS) { case 0: - qglDisable( GL_ALPHA_TEST ); + qglDisable(GL_ALPHA_TEST); break; case GLS_ATEST_GT_0: - qglEnable( GL_ALPHA_TEST ); - qglAlphaFunc( GL_GREATER, 0.0f ); + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_GREATER, 0.05f); break; case GLS_ATEST_LT_80: - qglEnable( GL_ALPHA_TEST ); - qglAlphaFunc( GL_LESS, 0.5f ); + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_LESS, 0.5f); break; case GLS_ATEST_GE_80: - qglEnable( GL_ALPHA_TEST ); - qglAlphaFunc( GL_GEQUAL, 0.5f ); + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_GEQUAL, 0.5f); + break; + case GLS_ATEST_LT_FOLIAGE1: + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_LESS, r_alpha_foliage1->value); + break; + case GLS_ATEST_GE_FOLIAGE1: + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_GEQUAL, r_alpha_foliage1->value); + break; + case GLS_ATEST_LT_FOLIAGE2: + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_LESS, r_alpha_foliage2->value); + break; + case GLS_ATEST_GE_FOLIAGE2: + qglEnable(GL_ALPHA_TEST); + qglAlphaFunc(GL_GEQUAL, r_alpha_foliage2->value); break; default: - assert( 0 ); + assert(0); break; } } - - if (diff & GLS_CLAMP_EDGE) { float clampValue; @@ -471,7 +485,7 @@ void GL_State( unsigned long stateBits ) qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clampValue); } } - + if (diff & GLS_FOG) { if (glState.externalSetState & GLS_FOG) diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 2f389d34..4ba898c0 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -1690,8 +1690,12 @@ void GL_Cull( int cullType ); #define GLS_ATEST_GT_0 0x10000000 #define GLS_ATEST_LT_80 0x20000000 -#define GLS_ATEST_GE_80 0x40000000 -#define GLS_ATEST_BITS 0x70000000 +#define GLS_ATEST_GE_80 0x30000000 +#define GLS_ATEST_LT_FOLIAGE1 0x40000000 +#define GLS_ATEST_GE_FOLIAGE1 0x50000000 +#define GLS_ATEST_LT_FOLIAGE2 0x60000000 +#define GLS_ATEST_GE_FOLIAGE2 0x70000000 +#define GLS_ATEST_BITS 0x70000000 #define GLS_DEFAULT GLS_DEPTHMASK_TRUE diff --git a/code/renderer/tr_shader.c b/code/renderer/tr_shader.c index 8cd95e2f..9aa804c9 100644 --- a/code/renderer/tr_shader.c +++ b/code/renderer/tr_shader.c @@ -200,6 +200,22 @@ static unsigned NameToAFunc( const char *funcname ) { return GLS_ATEST_GE_80; } + else if ( !Q_stricmp( funcname, "LT_FOLIAGE1" ) ) + { + return GLS_ATEST_LT_FOLIAGE1; + } + else if ( !Q_stricmp( funcname, "GE_FOLIAGE1" ) ) + { + return GLS_ATEST_GE_FOLIAGE1; + } + else if ( !Q_stricmp( funcname, "LT_FOLIAGE2" ) ) + { + return GLS_ATEST_LT_FOLIAGE2; + } + else if ( !Q_stricmp( funcname, "GE_FOLIAGE2" ) ) + { + return GLS_ATEST_GE_FOLIAGE2; + } ri.Printf( PRINT_WARNING, "WARNING: invalid alphaFunc name '%s' in shader '%s'\n", funcname, shader.name ); return 0;