Mercurial > repos > blastem
annotate shaders/crt.f.glsl @ 1483:001120e91fed nuklear_ui
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 25 Nov 2017 20:43:20 -0800 |
parents | 7da675d0c512 |
children | f3cca4b3f17a |
rev | line source |
---|---|
1392
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #version 110 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 /* Subtle CRT shader usable in fullscreen - Anaël Seghezzi [anael(at)maratis3d.com] |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 This shader is free software distributed under the terms of the GNU General Public |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 License version 3 or higher. This gives you the right to redistribute and/or |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 modify the program as long as you follow the terms of the license. See the file |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 COPYING for full license details. |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 */ |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 #define M_PI 3.14159265358979323846 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 uniform sampler2D textures[2]; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 uniform float width, height; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 varying vec2 texcoord; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 varying vec2 screencoord; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 float nrand(vec2 n) { |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 return fract(sin(dot(n.xy, vec2(12.9898, 78.233))) * 43758.5453); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 } |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 float scanline(vec2 texco) |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 { |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 return (1.0 - abs(cos(texco.y * 512.0 * M_PI))); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 vec2 sharp_coord(vec2 texco, vec2 dim, vec2 sharpness) |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 { |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 vec2 texcoif = texco * dim; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 vec2 texcoi = floor(texcoif); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 vec2 mu = (texcoif - 0.5) - texcoi; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 vec2 mub = pow(abs(mu) * 2.0, sharpness) * sign(mu) * 0.5; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 return (texcoi + mub + 0.5) / dim; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 } |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 void main() |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 { |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 float v = 1.0 / 512.0; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 float yforce = 0.175; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 float vign = length(screencoord); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 // monitor deformation |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 vec2 monitorcoord = (screencoord + screencoord * vign * 0.025); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 if (monitorcoord.x < -1.0 || monitorcoord.y < -1.0 || monitorcoord.x > 1.0 || monitorcoord.y > 1.0) { |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 gl_FragColor = vec4(0.0); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 return; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 } |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 vec2 texco = monitorcoord * vec2(width/1024.0, height/-1024.0) + vec2(width/1024.0, height/1024.0); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 // mask |
1439
7da675d0c512
Small fix submitted by Anaël Seghezzi to his subtle crt shader
Michael Pavone <pavone@retrodev.com>
parents:
1392
diff
changeset
|
53 float maskx = 1.0 - pow(abs(monitorcoord.x), 200.0); |
7da675d0c512
Small fix submitted by Anaël Seghezzi to his subtle crt shader
Michael Pavone <pavone@retrodev.com>
parents:
1392
diff
changeset
|
54 float masky = 1.0 - pow(abs(-monitorcoord.y), 200.0); |
1392
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 float mask = clamp(maskx * masky, 0.0, 1.0); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 // sharp texcoord |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 vec2 texco_sharp0 = sharp_coord(texco, vec2(512.0, 512.0), vec2(4.0, 8.0)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 vec2 texco_sharp1 = sharp_coord(texco - vec2(0.0, 1.0 / 1024.0), vec2(512.0, 512.0), vec2(4.0, 8.0)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 vec4 src0 = texture2D(textures[0], texco_sharp0); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 vec4 src1 = texture2D(textures[1], texco_sharp1); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 // interlace mix |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 float interlace = cos((texco.y * 1024.0) * M_PI); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 vec4 src_mix = mix(src0, src1, interlace * 0.5 + 0.5); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 // blur |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 vec4 src_blur = mix(texture2D(textures[0], texco), texture2D(textures[1], texco), 0.5); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 #ifdef NO_SCANLINE |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 gl_FragColor = (src_mix * 0.95 + (src_blur * (1.6 - vign * 0.4) * 0.1)) * mask; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 #else |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 // multisample scanline with grain |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 // TODO: offset grain with time (needs a "frame" uniform) |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 float cosy; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 cosy = scanline(texco + vec2(0.125, v * (nrand(texcoord + vec2(0.0, 1.0)) * 0.25) + 0.3333)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 cosy += scanline(texco + vec2(0.25, v * (nrand(texcoord + vec2(0.0, 2.0)) * 0.25) + 0.25)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 cosy += scanline(texco + vec2(0.50, v * (nrand(texcoord + vec2(0.0, 3.0)) * 0.25) + 0.6666)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 cosy += scanline(texco + vec2(0.75, v * (nrand(texcoord + vec2(0.0, 4.0)) * 0.25) + 0.75)); |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 cosy *= 0.25; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 // final scanline + burn |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 gl_FragColor = ((src_mix * ((1.0 - yforce) + cosy * yforce)) + (src_blur * (1.6 - vign * 0.4) * 0.1)) * mask; |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 #endif |
4942da159194
Added a "subtle" CRT shader contributed by Anael Seghezzi
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 } |