This repository has no description
1.2 kB
39 lines
1//!HOOK MAIN
2//!BIND HOOKED
3//!DESC ASCII art filter
4
5const int SCALE = @SCALE@;
6const bool MONOCHROME = false;
7const vec3 BASE_COLOR = vec3(0.0, 1.0, 0.0);
8
9float character(int n, vec2 p) {
10 p = floor(p * vec2(4.0, 4.0) + 2.5);
11 if (clamp(p.x, 0.0, 4.0) == p.x && clamp(p.y, 0.0, 4.0) == p.y) {
12 int a = int(round(p.x) + 5.0 * round(p.y));
13 if (((n >> a) & 1) == 1) return 1.0;
14 }
15 return 0.0;
16}
17
18vec4 hook() {
19 vec2 iResolution = HOOKED_size;
20 vec2 pix = HOOKED_pos * iResolution;
21 vec2 cell = floor(pix / vec2(float(SCALE) * 8.0)) * vec2(float(SCALE) * 8.0);
22 vec4 c = HOOKED_texOff((cell - pix) / iResolution * HOOKED_size);
23 float gray = 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
24
25 int n;
26 if (gray <= 0.2) n = 4096;
27 else if (gray <= 0.3) n = 65600;
28 else if (gray <= 0.4) n = 332772;
29 else if (gray <= 0.5) n = 15255086;
30 else if (gray <= 0.6) n = 23385164;
31 else if (gray <= 0.7) n = 15252014;
32 else if (gray <= 0.8) n = 13199452;
33 else n = 11512810;
34
35 vec2 p = mod(pix / vec2(float(SCALE) * 4.0), vec2(2.0)) - vec2(1.0);
36 if (MONOCHROME) c.rgb = BASE_COLOR;
37 c.rgb = c.rgb * character(n, p);
38 return c;
39}