Mercurial > repos > blastem
annotate shaders/ntsc.f.glsl @ 2335:c05b7c5e6f11
Automatically format Sega CD backup RAM
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 26 Aug 2023 20:32:53 -0700 |
parents | 06d5e9b08bdb |
children | 49bd818ec9d8 |
rev | line source |
---|---|
2329
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 //****************************************************************************** |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 // NTSC composite simulator for BlastEm |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 // Shader by Sik, based on BlastEm's default shader |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 // It works by converting from RGB to YIQ and then encoding it into NTSC, then |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 // trying to decode it back. The lossy nature of the encoding process results in |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 // the rainbow effect. It also accounts for the differences between H40 and H32 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 // mode as it computes the exact colorburst cycle length. |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 // This shader tries to work around the inability to keep track of previous |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 // pixels by sampling seven points (in 0.25 colorburst cycle intervals), that |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 // seems to be enough to give decent filtering (four samples are used for |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 // low-pass filtering, but we need seven because decoding chroma also requires |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 // four samples so we're filtering over overlapping samples... just see the |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 // comments in the I/Q code to understand). |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 //****************************************************************************** |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 uniform mediump float width; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 uniform sampler2D textures[2]; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 uniform mediump vec2 texsize; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 varying mediump vec2 texcoord; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 // Converts from RGB to YIQ |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 mediump vec3 rgba2yiq(vec4 rgba) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 { |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 return vec3( |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 rgba[0] * 0.3 + rgba[1] * 0.59 + rgba[2] * 0.11, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 rgba[0] * 0.599 + rgba[1] * -0.2773 + rgba[2] * -0.3217, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 rgba[0] * 0.213 + rgba[1] * -0.5251 + rgba[2] * 0.3121 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 ); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 } |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 // Encodes YIQ into composite |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 mediump float yiq2raw(vec3 yiq, float phase) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 { |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 return yiq[0] + yiq[1] * sin(phase) + yiq[2] * cos(phase); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 } |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 // Converts from YIQ to RGB |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 mediump vec4 yiq2rgba(vec3 yiq) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 { |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 return vec4( |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 yiq[0] + yiq[1] * 0.9469 + yiq[2] * 0.6236, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 yiq[0] - yiq[1] * 0.2748 - yiq[2] * 0.6357, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 yiq[0] - yiq[1] * 1.1 + yiq[2] * 1.7, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 1.0 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 ); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 } |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 void main() |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 { |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 // Use first pair of lines for hard line edges |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 // Use second pair of lines for soft line edges |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 mediump float modifiedY0 = (floor(texcoord.y * texsize.y + 0.25) + 0.5) / texsize.y; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 mediump float modifiedY1 = (floor(texcoord.y * texsize.y - 0.25) + 0.5) / texsize.y; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 //mediump float modifiedY0 = (texcoord.y * texsize.y + 0.75) / texsize.y; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 //mediump float modifiedY1 = (texcoord.y * texsize.y + 0.25) / texsize.y; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 // Used by the mixing when fetching texels, related to the way BlastEm |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 // handles interlaced mode (nothing to do with composite) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 mediump float factorY = (sin(texcoord.y * texsize.y * 6.283185307) + 1.0) * 0.5; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 // Horizontal distance of half a colorburst cycle |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 mediump float factorX = (1.0 / texsize.x) / 170.667 * 0.5 * (width - 27.0); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 // Where we store the sampled pixels. |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 // [0] = current pixel |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 // [1] = 1/4 colorburst cycles earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 // [2] = 2/4 colorburst cycles earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 // [3] = 3/4 colorburst cycles earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 // [4] = 1 colorburst cycle earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 // [5] = 1 1/4 colorburst cycles earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 // [6] = 1 2/4 colorburst cycles earlier |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 mediump float phase[7]; // Colorburst phase (in radians) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 mediump float raw[7]; // Raw encoded composite signal |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 // Sample all the pixels we're going to use |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 mediump float x = texcoord.x; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 for (int n = 0; n < 7; n++, x -= factorX * 0.5) { |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 // Compute colorburst phase at this point |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 phase[n] = x / factorX * 3.1415926; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 // Decode RGB into YIQ and then into composite |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 // Reading two textures is a BlastEm thing :P (the two fields in |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 // interlaced mode, that's taken as-is from the stock shaders) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 raw[n] = yiq2raw(mix( |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 rgba2yiq(texture2D(textures[1], vec2(x, modifiedY1))), |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 rgba2yiq(texture2D(textures[0], vec2(x, modifiedY0))), |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 factorY |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 ), phase[n]); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 } |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 // Decode Y by averaging over the the whole sampled cycle (effectively |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 // filtering anything above the colorburst frequency) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 mediump float y_mix = (raw[0] + raw[1] + raw[2] + raw[3]) * 0.25; |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 // Decode I and Q (see page below to understand what's going on) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 // https://codeandlife.com/2012/10/09/composite-video-decoding-theory-and-practice/ |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 // Retrieving I and Q out of the raw signal is done like this |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 // (use sin for I and cos for Q): |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 // 0.5 * raw[0] * sin(phase[0]) + 0.5 * raw[1] * sin(phase[1]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 // 0.5 * raw[2] * sin(phase[2]) + 0.5 * raw[3] * sin(phase[3]) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 // i.e. multiply each of the sampled quarter cycles against the reference |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 // wave and average them (actually double that because for some reason |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 // that's needed to get the correct scale, hence 0.5 instead of 0.25) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 // That turns out to be blocky tho, so we opt to filter down the chroma... |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 // which requires doing the above *four* times if we do it the same way as |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 // we did for luminance (note that 0.125 = 1/4 of 0.5): |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 // 0.125 * raw[0] * sin(phase[0]) + 0.125 * raw[1] * sin(phase[1]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 // 0.125 * raw[2] * sin(phase[2]) + 0.125 * raw[3] * sin(phase[3]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 // 0.125 * raw[1] * sin(phase[1]) + 0.125 * raw[2] * sin(phase[2]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 // 0.125 * raw[3] * sin(phase[3]) + 0.125 * raw[4] * sin(phase[4]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 // 0.125 * raw[2] * sin(phase[2]) + 0.125 * raw[3] * sin(phase[3]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 // 0.125 * raw[4] * sin(phase[4]) + 0.125 * raw[5] * sin(phase[5]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 // 0.125 * raw[3] * sin(phase[3]) + 0.125 * raw[4] * sin(phase[4]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 // 0.125 * raw[5] * sin(phase[5]) + 0.125 * raw[6] * sin(phase[6]) |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 // |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 // There are a lot of repeated values there that could be merged into one, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 // what you see below is the resulting simplification. |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 mediump float i_mix = |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 0.125 * raw[0] * sin(phase[0]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 0.25 * raw[1] * sin(phase[1]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 0.375 * raw[2] * sin(phase[2]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 0.5 * raw[3] * sin(phase[3]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 0.375 * raw[4] * sin(phase[4]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 0.25 * raw[5] * sin(phase[5]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 0.125 * raw[6] * sin(phase[6]); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 mediump float q_mix = |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 0.125 * raw[0] * cos(phase[0]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 0.25 * raw[1] * cos(phase[1]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 0.375 * raw[2] * cos(phase[2]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 0.5 * raw[3] * cos(phase[3]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 0.375 * raw[4] * cos(phase[4]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 0.25 * raw[5] * cos(phase[5]) + |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 0.125 * raw[6] * cos(phase[6]); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 // Convert YIQ back to RGB and output it |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 gl_FragColor = yiq2rgba(vec3(y_mix, i_mix, q_mix)); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 // If you're curious to see what the raw composite signal looks like, |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 // comment out the above and uncomment the line below instead |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 //gl_FragColor = vec4(raw[0], raw[0], raw[0], 1.0); |
06d5e9b08bdb
Add NTSC composite shader by Sik
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 } |