stk-code_catmod/data/shaders/displace.frag

47 lines
1.1 KiB
GLSL
Raw Normal View History

2014-03-03 17:58:01 -05:00
uniform sampler2D displacement_tex;
uniform sampler2D mask_tex;
uniform sampler2D color_tex;
2014-07-08 21:41:08 -04:00
uniform sampler2D tex;
uniform vec2 dir;
uniform vec2 dir2;
in vec2 uv;
in float camdist;
out vec4 FragColor;
2014-01-20 19:18:26 -05:00
const float maxlen = 0.02;
void main()
{
2014-03-03 17:58:01 -05:00
float horiz = texture(displacement_tex, uv + dir).x;
float vert = texture(displacement_tex, (uv.yx + dir2) * vec2(0.9)).x;
vec2 offset = vec2(horiz, vert);
offset *= 2.0;
offset -= 1.0;
// Fade according to distance to cam
float fade = 1.0 - smoothstep(1.0, 100.0, camdist);
2014-03-03 17:58:01 -05:00
vec4 shiftval;
shiftval.r = step(offset.x, 0.0) * -offset.x;
shiftval.g = step(0.0, offset.x) * offset.x;
shiftval.b = step(offset.y, 0.0) * -offset.y;
shiftval.a = step(0.0, offset.y) * offset.y;
2014-03-03 17:58:01 -05:00
vec2 shift;
shift.x = -shiftval.x + shiftval.y;
shift.y = -shiftval.z + shiftval.w;
shift /= 50.;
vec2 tc = gl_FragCoord.xy / u_screen;
2014-03-03 17:58:01 -05:00
float mask = texture(mask_tex, tc + shift).x;
tc += (mask < 1.) ? vec2(0.) : shift;
2014-07-08 21:41:08 -04:00
vec4 col = texture(color_tex, tc);
vec4 blend_tex = texture(tex, uv);
col.rgb = blend_tex.rgb * blend_tex.a + (1. - blend_tex.a) * col.rgb;
FragColor = vec4(col.rgb, 1.);
}