store references in view and compute reference in box
[maximus:mightymandel.git] / src / fp32_colour_frag.glsl
1 const float pi = 3.141592653589793;
2 uniform sampler2D ida0;
3 smooth in vec2 t;
4 out layout(location = 0, index = 0) vec4 c;
5 void main() {
6   vec4 ida = texture2D(ida0, t);
7   vec3 rgb = vec3(1.0);
8   if (ida.x > 0.0) {
9     float y = ida.x - floor(ida.x) - 0.5;
10     float x = abs(mod(ida.z / (2.0 * pi), 1.0) - 0.5) - 0.45 + 0.025 * pow(0.25, y);
11     y = abs(y) - 0.4;
12     float level = 1.0 / 0.0;
13     vec2 delta = vec2(dFdx(t.x), dFdy(t.y));
14     vec2 an0 = ida.xz;
15     an0.y = 0.5 * an0.y * 0.3183098861837907 + 0.5;
16     an0 -= floor(an0);
17     for (int i = -1; i <= 1; ++i) {
18       for (int j = -1; j <= 1; ++j) {
19         if (i == 0 && j == 0) continue;
20         vec2 an = texture2D(ida0, t + delta * vec2(i, j)).xz;
21         if (floor(ida.x) != floor(an.x)) continue;
22         an.y = 0.5 * an.y * 0.3183098861837907 + 0.5;
23         an -= floor(an);
24         an -= an0;
25         float l = length(an);
26         level = min(level, l);
27       }
28     }
29     level /= length(delta);
30     level = log2(level);
31     float s = max(x, y) / level;
32     rgb = mix(rgb, vec3(0.7), smoothstep(-0.0025, 0.0025, s));
33     rgb = mix(rgb, vec3(mix(0.875, 1.0, 0.64)), tanh(clamp(level - 8.0, 0.0, 4.0)));
34     rgb = mix(vec3(0.0), rgb, tanh(clamp(ida.y / 2.0, 0.0, 4.0)));
35   }
36   c = vec4(rgb, 1.0);
37 }