-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdot.glsl
108 lines (95 loc) · 3.4 KB
/
dot.glsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Generated by mpv-libretro
//!HOOK MAIN
//!COMPONENTS 4
//!DESC sRGB to linear RGB
//!SAVE MAIN_RGB
//!BIND HOOKED
vec4 hook() {
return linearize(HOOKED_tex(HOOKED_pos));
}
//!HOOK MAIN
//!COMPONENTS 4
//!DESC dot.slang
//!WIDTH OUTPUT.width 1 *
//!HEIGHT OUTPUT.height 1 *
//!BIND MAIN_RGB
//!BIND HOOKED
vec4 vertex_gl_Position;
struct _global_ {
mat4 MVP;
vec4 OutputSize;
vec4 OriginalSize;
vec4 SourceSize;
} global = _global_(mat4(1.), vec4(target_size, 1. / target_size.x, 1. / target_size.y), vec4(MAIN_RGB_size, MAIN_RGB_pt), vec4(MAIN_RGB_size, MAIN_RGB_pt));
float vertex_dist(vec2 coord, vec2 source) {
vec2 delta = coord - source;
return sqrt(dot(delta, delta));
}
float vertex_color_bloom(vec3 color) {
const vec3 gray_coeff = vec3(0.3, 0.59, 0.11);
float bright = dot(color, gray_coeff);
return mix(1. + 0.05, 1. - 0.05, bright);
}
vec3 vertex_lookup(vec2 pixel_no, float offset_x, float offset_y, vec3 color) {
vec2 offset = vec2(offset_x, offset_y);
float delta = vertex_dist(fract(pixel_no), offset + vec2(0.5, 0.5));
return color * exp(-2.4 * delta * vertex_color_bloom(color));
}
vec4 Position = vec4(HOOKED_pos, 0., 1.);
vec2 TexCoord = HOOKED_pos;
vec2 vTexCoord;
vec4 c00_10;
vec4 c00_01;
vec4 c20_01;
vec4 c21_02;
vec4 c12_22;
vec2 c11;
vec2 pixel_no;
void vertex_main() {
vertex_gl_Position = global.MVP * Position;
vTexCoord = TexCoord;
float dx = global.SourceSize.z;
float dy = global.SourceSize.w;
c00_10 = vec4(vTexCoord + vec2(-dx, -dy), vTexCoord + vec2(0, -dy));
c20_01 = vec4(vTexCoord + vec2(dx, -dy), vTexCoord + vec2(-dx, 0));
c21_02 = vec4(vTexCoord + vec2(dx, 0), vTexCoord + vec2(-dx, dy));
c12_22 = vec4(vTexCoord + vec2(0, dy), vTexCoord + vec2(dx, dy));
c11 = vTexCoord;
pixel_no = vTexCoord * global.SourceSize.xy;
}
float fragment_dist(vec2 coord, vec2 source) {
vec2 delta = coord - source;
return sqrt(dot(delta, delta));
}
float fragment_color_bloom(vec3 color) {
const vec3 gray_coeff = vec3(0.3, 0.59, 0.11);
float bright = dot(color, gray_coeff);
return mix(1. + 0.05, 1. - 0.05, bright);
}
vec3 fragment_lookup(vec2 pixel_no, float offset_x, float offset_y, vec3 color) {
vec2 offset = vec2(offset_x, offset_y);
float delta = fragment_dist(fract(pixel_no), offset + vec2(0.5, 0.5));
return color * exp(-2.4 * delta * fragment_color_bloom(color));
}
vec4 FragColor;
#define Source MAIN_RGB_raw
void fragment_main() {
vec3 mid_color = fragment_lookup(pixel_no, 0., 0., texture(Source, vTexCoord).rgb);
vec3 color = vec3(0., 0., 0.);
color += fragment_lookup(pixel_no, -1., -1., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, 0., -1., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, 1., -1., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, -1., 0., texture(Source, vTexCoord).rgb);
color += mid_color;
color += fragment_lookup(pixel_no, 1., 0., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, -1., 1., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, 0., 1., texture(Source, vTexCoord).rgb);
color += fragment_lookup(pixel_no, 1., 1., texture(Source, vTexCoord).rgb);
vec3 out_color = mix(1.2 * mid_color, color, 0.65);
FragColor = vec4(out_color, 1.);
}
vec4 hook() {
vertex_main();
fragment_main();
return delinearize(FragColor);
}