1#property description CRT-style effect
2
3void main(void) {
4    float pulse = pow(defaultPulse, 0.5);
5    vec2 separate = iIntensity * vec2(0.005, 0.0) * pulse;
6    vec2 normCoord = (uv - 0.5) * aspectCorrection;
7    vec2 redOffset = normCoord - separate;
8    vec2 greenOffset = normCoord;
9    vec2 blueOffset = normCoord + separate;
10
11    vec4 redImage = texture(iInput, redOffset / aspectCorrection + 0.5);
12    vec4 greenImage = texture(iInput, greenOffset / aspectCorrection + 0.5);
13    vec4 blueImage = texture(iInput, blueOffset / aspectCorrection + 0.5);
14
15    vec3 rgb = vec3(redImage.r, greenImage.g, blueImage.b);
16    rgb *= mix(1.0, 1.0 - pow(abs(sin(greenOffset.y * 160.0)), 16.), iIntensity * pulse / 3.0);
17    rgb.r *= mix(1.0, 1.0 - pow(abs(sin(redOffset.x * 200.0)), 6.), iIntensity * pulse);
18    rgb.g *= mix(1.0, 1.0 - pow(abs(sin(greenOffset.x * 200.0)), 6.), iIntensity * pulse);
19    rgb.b *= mix(1.0, 1.0 - pow(abs(sin(blueOffset.x * 200.0)), 6.), iIntensity * pulse);
20    float a_out = max(max(greenImage.a, rgb.r), max(rgb.g, rgb.b));
21    fragColor = vec4(rgb, a_out);
22}
23