Mercurial > repos > blastem
annotate shaders/crt.f.glsl @ 1971:80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 08 May 2020 11:40:30 -0700 |
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 } |