ProjectArcade
37 строк · 1.0 Кб
1// Retro (CRT) shader, created to use in PPSSPP.
2
3#ifdef GL_ES
4precision mediump float;
5precision mediump int;
6#endif
7
8uniform sampler2D sampler0;
9varying vec2 v_texcoord0;
10uniform vec4 u_time;
11uniform vec4 u_setting;
12
13void main()
14{
15// scanlines
16int vPos = int( ( v_texcoord0.y + u_time.x * u_setting.x * 0.5 ) * 272.0 );
17float line_intensity = mod( float(vPos), 2.0 );
18
19// color shift
20float off = line_intensity * 0.0005;
21vec2 shift = vec2( off, 0 );
22
23// shift R and G channels to simulate NTSC color bleed
24vec2 colorShift = vec2( 0.001, 0 );
25float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
26float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
27float b = texture2D( sampler0, v_texcoord0 ).z;
28
29vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 );
30
31if (u_setting.x > 0.0) {
32float rollbar = sin( ( v_texcoord0.y + u_time.x * u_setting.x ) * 4.0 );
33c += rollbar * 0.02;
34}
35
36gl_FragColor.rgba = c;
37}
38