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