From e5f8bca41c2c19b798552d5b0e3dbd1bb0b1c2be Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 24 Apr 2022 16:41:01 +0200 Subject: Switched old blur to dual kawase --- src/render/Shaders.hpp | 91 ++++++++++---------------------------------------- 1 file changed, 17 insertions(+), 74 deletions(-) (limited to 'src/render/Shaders.hpp') diff --git a/src/render/Shaders.hpp b/src/render/Shaders.hpp index 719c0c4a..b964c8c2 100644 --- a/src/render/Shaders.hpp +++ b/src/render/Shaders.hpp @@ -164,46 +164,16 @@ uniform sampler2D tex; uniform float radius; uniform vec2 resolution; -uniform float alpha; - -float SCurve (float x) { - x = x * 2.0 - 1.0; - return -x * abs(x) * 0.5 + x + 0.5; -} - -vec4 BlurH (vec2 size, vec2 uv) { - if (radius >= 1.0) { - vec4 A = vec4(0.0); - vec4 C = vec4(0.0); - - float width = 1.0 / size.x; - - float divisor = 0.0; - float weight = 0.0; - - float radiusMultiplier = 1.0 / radius; - - for (float x = -radius; x <= radius; x++) { - A = texture2D(tex, uv + vec2(x * width, 0.0)); - - weight = SCurve(1.0 - (abs(x) * radiusMultiplier)); - - C += A * weight; - - divisor += weight; - } - - return vec4(C.r / divisor, C.g / divisor, C.b / divisor, 1.0); - } - - return texture2D(tex, uv); -} - +uniform vec2 halfpixel; void main() { - gl_FragColor = BlurH(resolution, v_texcoord) * alpha; + vec4 sum = texture2D(tex, v_texcoord) * 4.0; + sum += texture2D(tex, v_texcoord - halfpixel.xy * radius); + sum += texture2D(tex, v_texcoord + halfpixel.xy * radius); + sum += texture2D(tex, v_texcoord + vec2(halfpixel.x, -halfpixel.y) * radius); + sum += texture2D(tex, v_texcoord - vec2(halfpixel.x, -halfpixel.y) * radius); + gl_FragColor = sum / 8.0; } - )#"; inline const std::string FRAGBLUR2 = R"#( @@ -213,46 +183,19 @@ uniform sampler2D tex; uniform float radius; uniform vec2 resolution; -uniform float alpha; - -float SCurve (float x) { - x = x * 2.0 - 1.0; - return -x * abs(x) * 0.5 + x + 0.5; -} - -vec4 BlurV (vec2 size, vec2 uv) { - if (radius >= 1.0) { - vec4 A = vec4(0.0); - vec4 C = vec4(0.0); - - float height = 1.0 / size.y; - - float divisor = 0.0; - float weight = 0.0; - - float radiusMultiplier = 1.0 / radius; - - for (float y = -radius; y <= radius; y++) { - A = texture2D(tex, uv + vec2(0.0, y * height)); - - weight = SCurve(1.0 - (abs(y) * radiusMultiplier)); - - C += A * weight; - - divisor += weight; - } - - return vec4(C.r / divisor, C.g / divisor, C.b / divisor, 1.0); - } - - return texture2D(tex, uv); -} - +uniform vec2 halfpixel; void main() { - gl_FragColor = BlurV(resolution, v_texcoord) * alpha; + vec4 sum = texture2D(tex, v_texcoord + vec2(-halfpixel.x * 2.0, 0.0) * radius); + sum += texture2D(tex, v_texcoord + vec2(-halfpixel.x, halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, v_texcoord + vec2(0.0, halfpixel.y * 2.0) * radius); + sum += texture2D(tex, v_texcoord + vec2(halfpixel.x, halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, v_texcoord + vec2(halfpixel.x * 2.0, 0.0) * radius); + sum += texture2D(tex, v_texcoord + vec2(halfpixel.x, -halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, v_texcoord + vec2(0.0, -halfpixel.y * 2.0) * radius); + sum += texture2D(tex, v_texcoord + vec2(-halfpixel.x, -halfpixel.y) * radius) * 2.0; + gl_FragColor = sum / 12.0; } - )#"; inline const std::string TEXFRAGSRCEXT = R"#( -- cgit v1.2.3