aboutsummaryrefslogtreecommitdiff
path: root/src/ungrateful.h
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2025-08-04 16:08:22 +0000
committerbonmas14 <bonmas14@gmail.com>2025-08-04 16:08:22 +0000
commitb16ca14911ad5df44ae499eed2d90c3ca2da4eb0 (patch)
tree685d64ea40f66b72c994bcfd3de0c5015a9cf36a /src/ungrateful.h
parented1cab483e49e29396178a33dea51773aa770855 (diff)
downloadungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.tar.gz
ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.zip
Vecs and tests
Diffstat (limited to 'src/ungrateful.h')
-rw-r--r--src/ungrateful.h192
1 files changed, 168 insertions, 24 deletions
diff --git a/src/ungrateful.h b/src/ungrateful.h
index ff8c24b..bbbea47 100644
--- a/src/ungrateful.h
+++ b/src/ungrateful.h
@@ -97,45 +97,47 @@ typedef int8_t b8;
typedef float f32;
typedef double f64;
-#if defined(UN_DOUBLE_PRECISION)
-typedef double real;
-
#ifndef PI
-# define PI 3.14159265358979323846
+# define PI 3.14159265358979323846f
#endif
#ifndef EPSILON
-# define EPSILON 0.000001
+# define EPSILON 0.000001f
#endif
#ifndef DEG2RAD
-# define DEG2RAD (PI/180.0)
+# define DEG2RAD (PI/180.0f)
#endif
#ifndef RAD2DEG
-# define RAD2DEG (180.0/PI)
+# define RAD2DEG (180.0f/PI)
#endif
+#if defined(UN_DOUBLE_PRECISION)
+ typedef double real;
#else
-typedef float real;
+ typedef float real;
+#endif // UN_DOUBLE_PRECISION
-#ifndef PI
-# define PI 3.14159265358979323846f
+#ifndef PI_D
+# define PI_D 3.14159265358979323846
#endif
-#ifndef EPSILON
-# define EPSILON 0.000001f
+#ifndef EPSILON_D
+# define EPSILON_D 0.000000000000001
#endif
-#ifndef DEG2RAD
-# define DEG2RAD (PI/180.0f)
+#ifndef DEG2RAD_D
+# define DEG2RAD_D (PI/180.0)
#endif
-
-#ifndef RAD2DEG
-# define RAD2DEG (180.0f/PI)
+#ifndef RAD2DEG_D
+# define RAD2DEG_D (180.0/PI)
#endif
-#endif // UN_DOUBLE_PRECISION
+
+#define un_vec_unwrap2(vec) vec[0], vec[1]
+#define un_vec_unwrap3(vec) vec[0], vec[1], vec[2]
+#define un_vec_unwrap4(vec) vec[0], vec[1], vec[2], vec[3]
/* ---- Memory Allocators API ---- */
@@ -232,7 +234,7 @@ real un_m_lerpr(real a, real b, real t);
f32 un_m_lerpf(f32 a, f32 b, f32 t);
f64 un_m_lerpd(f64 a, f64 b, f64 t);
-/* 2d */
+/* 2d f32 */
void un_m_add2f(f32 *v, f32 *a, f32 *b);
void un_m_sub2f(f32 *v, f32 *a, f32 *b);
void un_m_add_scalar2f(f32 *v, f32 *a, f32 scalar);
@@ -243,14 +245,16 @@ void un_m_div_scalar2f(f32 *v, f32 *a, f32 scalar);
void un_m_dot2f(f32 *v, f32 *a, f32 *b);
void un_m_hadamard2f(f32 *v, f32 *a, f32 *b);
void un_m_project2f(f32 *v, f32 *a, f32 *onto);
+void un_m_reflect2f(f32 *v, f32 *a, f32 *normal);
void un_m_cross2f(f32 *v, f32 *a);
void un_m_normalize2f(f32 *v, f32 *a);
void un_m_magnitude2f(f32 *v, f32 *a);
void un_m_magnitude_sqr2f(f32 *v, f32 *a);
+void un_m_distance2f(f32 *v, f32 *a, f32 *b);
void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b);
-/* 3d */
+/* 3d f32 */
void un_m_add3f(f32 *v, f32 *a, f32 *b);
void un_m_sub3f(f32 *v, f32 *a, f32 *b);
void un_m_add_scalar3f(f32 *v, f32 *a, f32 scalar);
@@ -261,14 +265,16 @@ void un_m_div_scalar3f(f32 *v, f32 *a, f32 scalar);
void un_m_dot3f(f32 *v, f32 *a, f32 *b);
void un_m_hadamard3f(f32 *v, f32 *a, f32 *b);
void un_m_project3f(f32 *v, f32 *a, f32 *onto);
+void un_m_reflect3f(f32 *v, f32 *a, f32 *normal);
void un_m_cross3f(f32 *v, f32 *a, f32 *b);
void un_m_normalize3f(f32 *v, f32 *a);
void un_m_magnitude3f(f32 *v, f32 *a);
void un_m_magnitude_sqr3f(f32 *v, f32 *a);
+void un_m_distance3f(f32 *v, f32 *a, f32 *b);
void un_m_distance_sqr3f(f32 *v, f32 *a, f32 *b);
-/* 4d */
+/* 4d f32 */
void un_m_add4f(f32 *v, f32 *a, f32 *b);
void un_m_sub4f(f32 *v, f32 *a, f32 *b);
void un_m_add_scalar4f(f32 *v, f32 *a, f32 scalar);
@@ -279,17 +285,155 @@ void un_m_div_scalar4f(f32 *v, f32 *a, f32 scalar);
void un_m_dot4f(f32 *v, f32 *a, f32 *b);
void un_m_hadamard4f(f32 *v, f32 *a, f32 *b);
void un_m_project4f(f32 *v, f32 *a, f32 *onto);
+void un_m_reflect4f(f32 *v, f32 *a, f32 *normal);
void un_m_normalize4f(f32 *v, f32 *a);
void un_m_magnitude4f(f32 *v, f32 *a);
void un_m_magnitude_sqr4f(f32 *v, f32 *a);
+void un_m_distance4f(f32 *v, f32 *a, f32 *b);
void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b);
+
+/* 2d f64 */
+void un_m_add2d(f64 *v, f64 *a, f64 *b);
+void un_m_sub2d(f64 *v, f64 *a, f64 *b);
+
+void un_m_add_scalar2d(f64 *v, f64 *a, f64 scalar);
+void un_m_sub_scalar2d(f64 *v, f64 *a, f64 scalar);
+void un_m_mul_scalar2d(f64 *v, f64 *a, f64 scalar);
+void un_m_div_scalar2d(f64 *v, f64 *a, f64 scalar);
+
+void un_m_dot2d(f64 *v, f64 *a, f64 *b);
+void un_m_hadamard2d(f64 *v, f64 *a, f64 *b);
+void un_m_project2d(f64 *v, f64 *a, f64 *onto);
+void un_m_reflect2d(f64 *v, f64 *a, f64 *normal);
+void un_m_cross2d(f64 *v, f64 *a);
+
+void un_m_normalize2d(f64 *v, f64 *a);
+void un_m_magnitude2d(f64 *v, f64 *a);
+void un_m_magnitude_sqr2d(f64 *v, f64 *a);
+void un_m_distance2d(f64 *v, f64 *a, f64 *b);
+void un_m_distance_sqr2d(f64 *v, f64 *a, f64 *b);
+
+/* 3d f64 */
+void un_m_add3d(f64 *v, f64 *a, f64 *b);
+void un_m_sub3d(f64 *v, f64 *a, f64 *b);
+
+void un_m_add_scalar3d(f64 *v, f64 *a, f64 scalar);
+void un_m_sub_scalar3d(f64 *v, f64 *a, f64 scalar);
+void un_m_mul_scalar3d(f64 *v, f64 *a, f64 scalar);
+void un_m_div_scalar3d(f64 *v, f64 *a, f64 scalar);
+
+void un_m_dot3d(f64 *v, f64 *a, f64 *b);
+void un_m_hadamard3d(f64 *v, f64 *a, f64 *b);
+void un_m_project3d(f64 *v, f64 *a, f64 *onto);
+void un_m_reflect3d(f64 *v, f64 *a, f64 *normal);
+void un_m_cross3d(f64 *v, f64 *a, f64 *b);
+
+void un_m_normalize3d(f64 *v, f64 *a);
+void un_m_magnitude3d(f64 *v, f64 *a);
+void un_m_magnitude_sqr3d(f64 *v, f64 *a);
+void un_m_distance3d(f64 *v, f64 *a, f64 *b);
+void un_m_distance_sqr3d(f64 *v, f64 *a, f64 *b);
+
+/* 4d f64 */
+void un_m_add4d(f64 *v, f64 *a, f64 *b);
+void un_m_sub4d(f64 *v, f64 *a, f64 *b);
+
+void un_m_add_scalar4d(f64 *v, f64 *a, f64 scalar);
+void un_m_sub_scalar4d(f64 *v, f64 *a, f64 scalar);
+void un_m_mul_scalar4d(f64 *v, f64 *a, f64 scalar);
+void un_m_div_scalar4d(f64 *v, f64 *a, f64 scalar);
+
+void un_m_dot4d(f64 *v, f64 *a, f64 *b);
+void un_m_hadamard4d(f64 *v, f64 *a, f64 *b);
+void un_m_project4d(f64 *v, f64 *a, f64 *onto);
+void un_m_reflect4d(f64 *v, f64 *a, f64 *normal);
+
+void un_m_normalize4d(f64 *v, f64 *a);
+void un_m_magnitude4d(f64 *v, f64 *a);
+void un_m_magnitude_sqr4d(f64 *v, f64 *a);
+void un_m_distance4d(f64 *v, f64 *a, f64 *b);
+void un_m_distance_sqr4d(f64 *v, f64 *a, f64 *b);
+
+/* 2d real */
+void un_m_add2r(real *v, real *a, real *b);
+void un_m_sub2r(real *v, real *a, real *b);
+
+void un_m_add_scalar2r(real *v, real *a, real scalar);
+void un_m_sub_scalar2r(real *v, real *a, real scalar);
+void un_m_mul_scalar2r(real *v, real *a, real scalar);
+void un_m_div_scalar2r(real *v, real *a, real scalar);
+
+void un_m_dot2r(real *v, real *a, real *b);
+void un_m_hadamard2r(real *v, real *a, real *b);
+void un_m_project2r(real *v, real *a, real *onto);
+void un_m_reflect2r(real *v, real *a, real *normal);
+void un_m_cross2r(real *v, real *a);
+
+void un_m_normalize2r(real *v, real *a);
+void un_m_magnitude2r(real *v, real *a);
+void un_m_magnitude_sqr2r(real *v, real *a);
+void un_m_distance2r(real *v, real *a, real *b);
+void un_m_distance_sqr2r(real *v, real *a, real *b);
+
+/* 3d real */
+void un_m_add3r(real *v, real *a, real *b);
+void un_m_sub3r(real *v, real *a, real *b);
+
+void un_m_add_scalar3r(real *v, real *a, real scalar);
+void un_m_sub_scalar3r(real *v, real *a, real scalar);
+void un_m_mul_scalar3r(real *v, real *a, real scalar);
+void un_m_div_scalar3r(real *v, real *a, real scalar);
+
+void un_m_dot3r(real *v, real *a, real *b);
+void un_m_hadamard3r(real *v, real *a, real *b);
+void un_m_project3r(real *v, real *a, real *onto);
+void un_m_reflect3r(real *v, real *a, real *normal);
+void un_m_cross3r(real *v, real *a, real *b);
+
+void un_m_normalize3r(real *v, real *a);
+void un_m_magnitude3r(real *v, real *a);
+void un_m_magnitude_sqr3r(real *v, real *a);
+void un_m_distance3r(real *v, real *a, real *b);
+void un_m_distance_sqr3r(real *v, real *a, real *b);
+
+/* 4d real */
+void un_m_add4r(real *v, real *a, real *b);
+void un_m_sub4r(real *v, real *a, real *b);
+
+void un_m_add_scalar4r(real *v, real *a, real scalar);
+void un_m_sub_scalar4r(real *v, real *a, real scalar);
+void un_m_mul_scalar4r(real *v, real *a, real scalar);
+void un_m_div_scalar4r(real *v, real *a, real scalar);
+
+void un_m_dot4r(real *v, real *a, real *b);
+void un_m_hadamard4r(real *v, real *a, real *b);
+void un_m_project4r(real *v, real *a, real *onto);
+void un_m_reflect4r(real *v, real *a, real *normal);
+
+void un_m_normalize4r(real *v, real *a);
+void un_m_magnitude4r(real *v, real *a);
+void un_m_magnitude_sqr4r(real *v, real *a);
+void un_m_distance4r(real *v, real *a, real *b);
+void un_m_distance_sqr4r(real *v, real *a, real *b);
+
/* ---- splines ---- */
-real un_m_bezierr(real a, real q0, real q1, real b, real t);
-f32 un_m_bezierf(f32 a, f32 q0, f32 q1, f32 b, f32 t);
-f64 un_m_bezierd(f64 a, f64 q0, f64 q1, f64 b, f64 t);
+void un_m_bezierr(real *v, real a, real q0, real q1, real b, real t);
+void un_m_bezier2r(real *v, real *a, real *q0, real *q1, real *b, real t);
+void un_m_bezier3r(real *v, real *a, real *q0, real *q1, real *b, real t);
+void un_m_bezier4r(real *v, real *a, real *q0, real *q1, real *b, real t);
+
+void un_m_bezierf(f32 *v, f32 a, f32 q0, f32 q1, f32 b, f32 t);
+void un_m_bezier2f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t);
+void un_m_bezier3f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t);
+void un_m_bezier4f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t);
+
+void un_m_bezierd(f64 *v, f64 a, f64 q0, f64 q1, f64 b, f64 t);
+void un_m_bezier2d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t);
+void un_m_bezier3d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t);
+void un_m_bezier4d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t);
/* ---- easing ---- */