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}