diff options
Diffstat (limited to '.config/hypr/shaders/chromatic_abberation.frag')
| -rw-r--r-- | .config/hypr/shaders/chromatic_abberation.frag | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/.config/hypr/shaders/chromatic_abberation.frag b/.config/hypr/shaders/chromatic_abberation.frag new file mode 100644 index 0000000..5389241 --- /dev/null +++ b/.config/hypr/shaders/chromatic_abberation.frag | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | // vim: set ft=glsl: | ||
| 2 | |||
| 3 | precision highp float; | ||
| 4 | varying highp vec2 v_texcoord; | ||
| 5 | uniform highp sampler2D tex; | ||
| 6 | |||
| 7 | #define STRENGTH 0.0027 | ||
| 8 | |||
| 9 | void main() { | ||
| 10 | vec2 center = vec2(0.5, 0.5); | ||
| 11 | vec2 offset = (v_texcoord - center) * STRENGTH; | ||
| 12 | |||
| 13 | float rSquared = dot(offset, offset); | ||
| 14 | float distortion = 1.0 + 1.0 * rSquared; | ||
| 15 | vec2 distortedOffset = offset * distortion; | ||
| 16 | |||
| 17 | vec2 redOffset = vec2(distortedOffset.x, distortedOffset.y); | ||
| 18 | vec2 blueOffset = vec2(distortedOffset.x, distortedOffset.y); | ||
| 19 | |||
| 20 | vec4 redColor = texture2D(tex, v_texcoord + redOffset); | ||
| 21 | vec4 blueColor = texture2D(tex, v_texcoord + blueOffset); | ||
| 22 | |||
| 23 | gl_FragColor = vec4(redColor.r, texture2D(tex, v_texcoord).g, blueColor.b, 1.0); | ||
| 24 | } | ||
