summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/image-effector/fxs/stripe.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/utility/image-effector/fxs/stripe.glsl')
-rw-r--r--packages/frontend/src/utility/image-effector/fxs/stripe.glsl45
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/frontend/src/utility/image-effector/fxs/stripe.glsl b/packages/frontend/src/utility/image-effector/fxs/stripe.glsl
new file mode 100644
index 0000000000..bb18d8fcb8
--- /dev/null
+++ b/packages/frontend/src/utility/image-effector/fxs/stripe.glsl
@@ -0,0 +1,45 @@
+#version 300 es
+precision mediump float;
+
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+const float PI = 3.141592653589793;
+const float TWO_PI = 6.283185307179586;
+const float HALF_PI = 1.5707963267948966;
+
+in vec2 in_uv;
+uniform sampler2D in_texture;
+uniform vec2 in_resolution;
+uniform float u_angle;
+uniform float u_frequency;
+uniform float u_phase;
+uniform float u_threshold;
+uniform vec3 u_color;
+uniform float u_opacity;
+out vec4 out_color;
+
+void main() {
+ vec4 in_color = texture(in_texture, in_uv);
+ float x_ratio = max(in_resolution.x / in_resolution.y, 1.0);
+ float y_ratio = max(in_resolution.y / in_resolution.x, 1.0);
+
+ float angle = -(u_angle * PI);
+ vec2 centeredUv = (in_uv - vec2(0.5, 0.5)) * vec2(x_ratio, y_ratio);
+ vec2 rotatedUV = vec2(
+ centeredUv.x * cos(angle) - centeredUv.y * sin(angle),
+ centeredUv.x * sin(angle) + centeredUv.y * cos(angle)
+ );
+
+ float phase = u_phase * TWO_PI;
+ float value = (1.0 + sin((rotatedUV.x * u_frequency - HALF_PI) + phase)) / 2.0;
+ value = value < u_threshold ? 1.0 : 0.0;
+ out_color = vec4(
+ mix(in_color.r, u_color.r, value * u_opacity),
+ mix(in_color.g, u_color.g, value * u_opacity),
+ mix(in_color.b, u_color.b, value * u_opacity),
+ in_color.a
+ );
+}