summaryrefslogtreecommitdiff
path: root/src/render/Shaders.hpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-24 16:41:01 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-24 16:41:01 +0200
commite5f8bca41c2c19b798552d5b0e3dbd1bb0b1c2be (patch)
tree4ab1c2ca9d0c040d3936a76e74d0bf483547f1bb /src/render/Shaders.hpp
parent3b3718df3d8e8f729980408ac86dffb041a0fcff (diff)
Switched old blur to dual kawase
Diffstat (limited to 'src/render/Shaders.hpp')
-rw-r--r--src/render/Shaders.hpp91
1 files changed, 17 insertions, 74 deletions
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"#(