1#version 450
2
3layout(push_constant) uniform Push
4{
5	vec4 SourceSize;
6	vec4 OriginalSize;
7	vec4 OutputSize;
8	uint FrameCount;
9   float TAPSH;
10   float GLOW_FALLOFF_H;
11} params;
12
13// Higher value, more centered glow.
14// Lower values might need more taps.
15#pragma parameter TAPSH "H. Glow Radius" 4.0 1.0 10.0 1.0
16#define TAPSH params.TAPSH
17#pragma parameter GLOW_FALLOFF_H "Horizontal Glow Grade" 0.30 0.00 1.0 0.01
18#define GLOW_FALLOFF_H params.GLOW_FALLOFF_H
19
20layout(std140, set = 0, binding = 0) uniform UBO
21{
22	mat4 MVP;
23} global;
24
25#pragma stage vertex
26layout(location = 0) in vec4 Position;
27layout(location = 1) in vec2 TexCoord;
28layout(location = 0) out vec2 vTexCoord;
29
30void main()
31{
32   gl_Position = global.MVP * Position;
33   vTexCoord = TexCoord;
34}
35
36#pragma stage fragment
37layout(location = 0) in vec2 vTexCoord;
38layout(location = 0) out vec4 FragColor;
39layout(set = 0, binding = 2) uniform sampler2D Source;
40
41#define COMPAT_TEXTURE(c,d) texture(c,d)
42#define SourceSize params.SourceSize
43
44#define kernel(x) exp(-GLOW_FALLOFF_H * (x) * (x))
45
46void main()
47{
48	vec3 col = vec3(0.0);
49	float dx = SourceSize.z;
50
51	float k_total = 0.;
52	for (float i = -TAPSH; i <= TAPSH; i++)
53		{
54		float k = kernel(i);
55		k_total += k;
56		col += k * COMPAT_TEXTURE(Source, vTexCoord + vec2(float(i) * dx, 0.0)).rgb;
57		}
58   FragColor = vec4(col / k_total, 1.0);
59}