Update the atan2 definition in shaders The old approach wasn't compatible with Metal's atan2, and using an acos() is simpler anyway. Diffs= e042c0af4c Update the atan2 definition in shaders (#8883) Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
diff --git a/.rive_head b/.rive_head index 93df727..a210b0c 100644 --- a/.rive_head +++ b/.rive_head
@@ -1 +1 @@ -2240d091f8d55ae4ef75409109684d9ca68b2450 +e042c0af4ce3f444ce8447595e88133961425ffa
diff --git a/renderer/src/shaders/common.glsl b/renderer/src/shaders/common.glsl index c94c26c..959c903 100644 --- a/renderer/src/shaders/common.glsl +++ b/renderer/src/shaders/common.glsl
@@ -130,13 +130,9 @@ INLINE float atan2(float2 v) { - float bias = .0; - if (abs(v.x) > abs(v.y)) - { - v = float2(v.y, -v.x); - bias = PI / 2.; - } - return atan(v.y, v.x) + bias; + v = normalize(v); + float theta = acos(clamp(v.x, -1., 1.)); + return v.y >= .0 ? theta : -theta; } INLINE half4 premultiply(half4 color)
diff --git a/renderer/src/shaders/hlsl.glsl b/renderer/src/shaders/hlsl.glsl index 5cfdf4b..382791a 100644 --- a/renderer/src/shaders/hlsl.glsl +++ b/renderer/src/shaders/hlsl.glsl
@@ -334,8 +334,6 @@ return vals.r; } -INLINE float atan(float y, float x) { return $atan2(y, x); } - INLINE float2x2 inverse(float2x2 m) { float2x2 adjoint = float2x2(m[1][1], -m[0][1], -m[1][0], m[0][0]);
diff --git a/renderer/src/shaders/metal.glsl b/renderer/src/shaders/metal.glsl index f7807fa..fdf3611 100644 --- a/renderer/src/shaders/metal.glsl +++ b/renderer/src/shaders/metal.glsl
@@ -52,7 +52,6 @@ #define greaterThan(A, B) ((A) > (B)) #define greaterThanEqual(A, B) ((A) >= (B)) #define MUL(A, B) ((A) * (B)) -#define atan $atan2 #define inversesqrt $rsqrt #define UNIFORM_BLOCK_BEGIN(IDX, NAME) \
diff --git a/renderer/src/shaders/rhi.glsl b/renderer/src/shaders/rhi.glsl index da7022b..f36e961 100644 --- a/renderer/src/shaders/rhi.glsl +++ b/renderer/src/shaders/rhi.glsl
@@ -309,8 +309,6 @@ return vals.r; } -INLINE float atan(float y, float x) { return $atan2(y, x); } - INLINE float2x2 inverse(float2x2 m) { float2x2 adjoint = float2x2(m[1][1], -m[0][1], -m[1][0], m[0][0]);