Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/Effect/StockEffects/HLSL/AlphaTestEffect.fx
194 lines | 4.2 KiB | text/plain | TextLexer
194 lines | 4.2 KiB | text/plain | TextLexer
r0 | //----------------------------------------------------------------------------- | |||
// AlphaTestEffect.fx | ||||
// | ||||
// Microsoft XNA Community Game Platform | ||||
// Copyright (C) Microsoft Corporation. All rights reserved. | ||||
//----------------------------------------------------------------------------- | ||||
#include "Macros.fxh" | ||||
DECLARE_TEXTURE(Texture, 0); | ||||
BEGIN_CONSTANTS | ||||
float4 DiffuseColor _vs(c0) _cb(c0); | ||||
float4 AlphaTest _ps(c0) _cb(c1); | ||||
float3 FogColor _ps(c1) _cb(c2); | ||||
float4 FogVector _vs(c5) _cb(c3); | ||||
MATRIX_CONSTANTS | ||||
float4x4 WorldViewProj _vs(c1) _cb(c0); | ||||
END_CONSTANTS | ||||
#include "Structures.fxh" | ||||
#include "Common.fxh" | ||||
// Vertex shader: basic. | ||||
VSOutputTx VSAlphaTest(VSInputTx vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: no fog. | ||||
VSOutputTxNoFog VSAlphaTestNoFog(VSInputTx vin) | ||||
{ | ||||
VSOutputTxNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex color. | ||||
VSOutputTx VSAlphaTestVc(VSInputTxVc vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex color, no fog. | ||||
VSOutputTxNoFog VSAlphaTestVcNoFog(VSInputTxVc vin) | ||||
{ | ||||
VSOutputTxNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Pixel shader: less/greater compare function. | ||||
float4 PSAlphaTestLtGt(PSInputTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w); | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: less/greater compare function, no fog. | ||||
float4 PSAlphaTestLtGtNoFog(PSInputTxNoFog pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: equal/notequal compare function. | ||||
float4 PSAlphaTestEqNe(PSInputTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w); | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: equal/notequal compare function, no fog. | ||||
float4 PSAlphaTestEqNeNoFog(PSInputTxNoFog pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w); | ||||
return color; | ||||
} | ||||
VertexShader VSArray[4] = | ||||
{ | ||||
compile vs_2_0 VSAlphaTest(), | ||||
compile vs_2_0 VSAlphaTestNoFog(), | ||||
compile vs_2_0 VSAlphaTestVc(), | ||||
compile vs_2_0 VSAlphaTestVcNoFog(), | ||||
}; | ||||
int VSIndices[8] = | ||||
{ | ||||
0, // lt/gt | ||||
1, // lt/gt, no fog | ||||
2, // lt/gt, vertex color | ||||
3, // lt/gt, vertex color, no fog | ||||
0, // eq/ne | ||||
1, // eq/ne, no fog | ||||
2, // eq/ne, vertex color | ||||
3, // eq/ne, vertex color, no fog | ||||
}; | ||||
PixelShader PSArray[4] = | ||||
{ | ||||
compile ps_2_0 PSAlphaTestLtGt(), | ||||
compile ps_2_0 PSAlphaTestLtGtNoFog(), | ||||
compile ps_2_0 PSAlphaTestEqNe(), | ||||
compile ps_2_0 PSAlphaTestEqNeNoFog(), | ||||
}; | ||||
int PSIndices[8] = | ||||
{ | ||||
0, // lt/gt | ||||
1, // lt/gt, no fog | ||||
0, // lt/gt, vertex color | ||||
1, // lt/gt, vertex color, no fog | ||||
2, // eq/ne | ||||
3, // eq/ne, no fog | ||||
2, // eq/ne, vertex color | ||||
3, // eq/ne, vertex color, no fog | ||||
}; | ||||
int ShaderIndex = 0; | ||||
Technique AlphaTestEffect | ||||
{ | ||||
Pass | ||||
{ | ||||
VertexShader = (VSArray[VSIndices[ShaderIndex]]); | ||||
PixelShader = (PSArray[PSIndices[ShaderIndex]]); | ||||
} | ||||
} | ||||