From 0e4a97e5a67d886e64c0d5337b281dc2c68332cf Mon Sep 17 00:00:00 2001 From: ame Date: Mon, 14 Oct 2024 03:41:40 -0500 Subject: fix linear scaling --- render/fx_renderer/gles2/shaders/quad_grad.frag | 9 +++++---- render/fx_renderer/gles2/shaders/quad_grad_round.frag | 11 ++++++----- .../fx_renderer/gles2/shaders/rounded_grad_border_corner.frag | 9 +++++---- 3 files changed, 16 insertions(+), 13 deletions(-) (limited to 'render/fx_renderer/gles2') diff --git a/render/fx_renderer/gles2/shaders/quad_grad.frag b/render/fx_renderer/gles2/shaders/quad_grad.frag index a73975b..6f611ca 100644 --- a/render/fx_renderer/gles2/shaders/quad_grad.frag +++ b/render/fx_renderer/gles2/shaders/quad_grad.frag @@ -25,11 +25,12 @@ vec4 gradient(){ float rad = radians(degree); if(linear){ - float angle = rad + atan(uv.x, uv.y); + uv *= vec2(1.0)/vec2(abs(cos(rad)) + abs(sin(rad))); - float len = length(uv); - uv = vec2(cos(angle) * len, sin(angle) * len) + origin; - step = uv.x; + vec2 rotated = vec2(uv.x * cos(rad) - uv.y * sin(rad) + origin.x, + uv.x * sin(rad) + uv.y * cos(rad) + origin.y); + + step = rotated.x; } else { vec2 uv = normal - origin; uv = vec2(uv.x * cos(rad) - uv.y * sin(rad), diff --git a/render/fx_renderer/gles2/shaders/quad_grad_round.frag b/render/fx_renderer/gles2/shaders/quad_grad_round.frag index 66a54a6..516573e 100644 --- a/render/fx_renderer/gles2/shaders/quad_grad_round.frag +++ b/render/fx_renderer/gles2/shaders/quad_grad_round.frag @@ -34,11 +34,12 @@ vec4 gradient(){ float rad = radians(degree); if(linear){ - float angle = rad + atan(uv.x, uv.y); + uv *= vec2(1.0)/vec2(abs(cos(rad)) + abs(sin(rad))); - float len = length(uv); - uv = vec2(cos(angle) * len, sin(angle) * len) + origin; - step = uv.x; + vec2 rotated = vec2(uv.x * cos(rad) - uv.y * sin(rad) + origin.x, + uv.x * sin(rad) + uv.y * cos(rad) + origin.y); + + step = rotated.x; } else { vec2 uv = normal - origin; uv = vec2(uv.x * cos(rad) - uv.y * sin(rad), @@ -59,7 +60,7 @@ vec4 gradient(){ int ind = int(step/smooth); float at = float(ind)*smooth; - vec4 color = colors[ind]; + vec4 color = colors[ind]; if(ind > 0) color = mix(colors[ind - 1], color, smoothstep(at - smooth, at, step)); if(ind <= count - 1) color = mix(color, colors[ind + 1], smoothstep(at, at + smooth, step)); diff --git a/render/fx_renderer/gles2/shaders/rounded_grad_border_corner.frag b/render/fx_renderer/gles2/shaders/rounded_grad_border_corner.frag index 85a6f79..2ce4f41 100644 --- a/render/fx_renderer/gles2/shaders/rounded_grad_border_corner.frag +++ b/render/fx_renderer/gles2/shaders/rounded_grad_border_corner.frag @@ -30,11 +30,12 @@ vec4 gradient(){ float rad = radians(degree); if(linear){ - float angle = rad + atan(uv.x, uv.y); + uv *= vec2(1.0)/vec2(abs(cos(rad)) + abs(sin(rad))); - float len = length(uv); - uv = vec2(cos(angle) * len, sin(angle) * len) + origin; - step = uv.x; + vec2 rotated = vec2(uv.x * cos(rad) - uv.y * sin(rad) + origin.x, + uv.x * sin(rad) + uv.y * cos(rad) + origin.y); + + step = rotated.x; } else { vec2 uv = normal - origin; uv = vec2(uv.x * cos(rad) - uv.y * sin(rad), -- cgit v1.2.3