librw/src/d3d/shaders/matfx_env_PS.hlsl

37 lines
870 B
HLSL
Raw Normal View History

2020-04-20 15:42:07 +02:00
struct VS_out {
float4 Position : POSITION;
2020-04-20 19:18:28 +02:00
float3 TexCoord0 : TEXCOORD0;
2020-04-20 15:42:07 +02:00
float2 TexCoord1 : TEXCOORD1;
float4 Color : COLOR0;
};
sampler2D diffTex : register(s0);
sampler2D envTex : register(s1);
2020-04-20 19:18:28 +02:00
float4 fogColor : register(c0);
float shininess : register(c1);
float4 colorClamp : register(c2);
2020-04-20 15:42:07 +02:00
float4 main(VS_out input) : COLOR
{
float4 pass1 = input.Color;
#ifdef TEX
pass1 *= tex2D(diffTex, input.TexCoord0.xy);
#endif
float4 envColor = max(pass1, colorClamp);
float4 pass2 = envColor*shininess*tex2D(envTex, input.TexCoord1.xy);
2020-04-20 19:18:28 +02:00
pass1.rgb = lerp(fogColor.rgb, pass1.rgb, input.TexCoord0.z);
2020-04-20 15:42:07 +02:00
// We simulate drawing this in two passes.
// First pass with standard blending, second with addition
// We premultiply alpha so render state should be one.
float4 color;
color.rgb = pass1.rgb*pass1.a + pass2.rgb;
color.a = pass1.a;
return color;
}