From 0948b078e1789605c42746a024df6039bb566b45 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 26 Nov 2022 17:56:43 +0000 Subject: added border gradients --- src/render/shaders/Border.hpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/render/shaders') diff --git a/src/render/shaders/Border.hpp b/src/render/shaders/Border.hpp index 70ed8baa..a2d61066 100644 --- a/src/render/shaders/Border.hpp +++ b/src/render/shaders/Border.hpp @@ -14,12 +14,28 @@ uniform float radius; uniform float thick; uniform int primitiveMultisample; +uniform vec4 gradient[10]; +uniform int gradientLength; +uniform float angle; + +vec4 getColorForCoord(vec2 normalizedCoord) { + if (gradientLength < 2) + return gradient[0]; + + float sine = sin(angle); + float progress = (normalizedCoord[1] * sine + normalizedCoord[0] * (1.0 - sine)) * float(gradientLength - 1); + int bottom = int(floor(progress)); + int top = bottom + 1; + + return gradient[top] * (progress - float(bottom)) + gradient[bottom] * (float(top) - progress); +} + void main() { highp vec2 pixCoord = vec2(gl_FragCoord); vec2 originalPixCoord = fullSize * v_texcoord; - vec4 pixColor = v_color; + vec4 pixColor = getColorForCoord(v_texcoord); bool done = false; @@ -27,7 +43,7 @@ void main() { pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0; pixCoord -= fullSize * 0.5 - radius; - if (min(pixCoord.x, pixCoord.y) > 0.0) { + if (min(pixCoord.x, pixCoord.y) > 0.0 && radius > 0.0) { float dist = length(pixCoord); -- cgit v1.2.3