summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorame <[email protected]>2024-10-14 03:41:40 -0500
committerame <[email protected]>2024-10-14 03:41:40 -0500
commit0e4a97e5a67d886e64c0d5337b281dc2c68332cf (patch)
treea225473277d763a4bcc5b06f5b10a22ee6f63a8d /render
parentc7ffebb2cc8de20143b7c1372086515976013b90 (diff)
fix linear scaling
Diffstat (limited to 'render')
-rw-r--r--render/fx_renderer/gles2/shaders/quad_grad.frag9
-rw-r--r--render/fx_renderer/gles2/shaders/quad_grad_round.frag11
-rw-r--r--render/fx_renderer/gles2/shaders/rounded_grad_border_corner.frag9
3 files changed, 16 insertions, 13 deletions
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),