summaryrefslogtreecommitdiff
path: root/src/render/Shaders.hpp
diff options
context:
space:
mode:
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"#(