1 <?xml version=
"1.0" encoding=
"UTF-8"?>
3 Plain (and obviously inaccurate) phosphor.
7 <shader language=
"GLSL">
8 <fragment filter=
"linear"><![CDATA[
9 uniform sampler2D rubyTexture;
10 uniform vec2 rubyTextureSize;
12 vec3 to_focus(float pixel)
14 pixel = mod(pixel +
3.0,
3.0);
15 if (pixel
>=
2.0) // Blue
16 return vec3(pixel -
2.0,
0.0,
3.0 - pixel);
17 else if (pixel
>=
1.0) // Green
18 return vec3(
0.0,
2.0 - pixel, pixel -
1.0);
20 return vec3(
1.0 - pixel, pixel,
0.0);
25 float y = mod(gl_TexCoord[
0].y * rubyTextureSize.y,
1.0);
26 float intensity = exp(-
0.2 * y);
28 vec2 one_x = vec2(
1.0 / (
3.0 * rubyTextureSize.x),
0.0);
30 vec3 color = texture2D(rubyTexture, gl_TexCoord[
0].xy -
0.0 * one_x).rgb;
31 vec3 color_prev = texture2D(rubyTexture, gl_TexCoord[
0].xy -
1.0 * one_x).rgb;
32 vec3 color_prev_prev = texture2D(rubyTexture, gl_TexCoord[
0].xy -
2.0 * one_x).rgb;
34 float pixel_x =
3.0 * gl_TexCoord[
0].x * rubyTextureSize.x;
36 vec3 focus = to_focus(pixel_x -
0.0);
37 vec3 focus_prev = to_focus(pixel_x -
1.0);
38 vec3 focus_prev_prev = to_focus(pixel_x -
2.0);
42 0.6 * color_prev * focus_prev +
43 0.3 * color_prev_prev * focus_prev_prev;
45 result =
2.3 * pow(result, vec3(
1.4));
47 gl_FragColor = vec4(intensity * result,
1.0);