46 lines
1.3 KiB
GLSL
46 lines
1.3 KiB
GLSL
//-----------------------------------------------------------------------------
|
|
// Program Name: FFPLib_AlphaTest
|
|
// Program Desc: Alpha test function.
|
|
// Program Type: Vertex/Pixel shader
|
|
// Language: GLSL
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#define CMPF_ALWAYS_FAIL 0
|
|
#define CMPF_ALWAYS_PASS 1
|
|
#define CMPF_LESS 2
|
|
#define CMPF_LESS_EQUAL 3
|
|
#define CMPF_EQUAL 4
|
|
#define CMPF_NOT_EQUAL 5
|
|
#define CMPF_GREATER_EQUAL 6
|
|
#define CMPF_GREATER 7
|
|
|
|
bool Alpha_Func(in int func, in float alphaRef, in float alphaValue)
|
|
{
|
|
// ES2 does not have switch
|
|
if(func == CMPF_ALWAYS_PASS)
|
|
return true;
|
|
else if(func == CMPF_LESS)
|
|
return alphaValue < alphaRef;
|
|
else if(func == CMPF_LESS_EQUAL)
|
|
return alphaValue <= alphaRef;
|
|
else if(func == CMPF_EQUAL)
|
|
return alphaValue == alphaRef;
|
|
else if(func == CMPF_NOT_EQUAL)
|
|
return alphaValue != alphaRef;
|
|
else if(func == CMPF_GREATER_EQUAL)
|
|
return alphaValue >= alphaRef;
|
|
else if(func == CMPF_GREATER)
|
|
return alphaValue > alphaRef;
|
|
|
|
// CMPF_ALWAYS_FAIL and default
|
|
return false;
|
|
}
|
|
|
|
|
|
void FFP_Alpha_Test(in float func, in float alphaRef, in vec4 texel)
|
|
{
|
|
bool pass_ = Alpha_Func(int(func), alphaRef, texel.a);
|
|
if (!pass_)
|
|
discard;
|
|
}
|