diff options
Diffstat (limited to 'src/ungrateful.h')
-rw-r--r-- | src/ungrateful.h | 130 |
1 files changed, 129 insertions, 1 deletions
diff --git a/src/ungrateful.h b/src/ungrateful.h index e3c52cf..ff8c24b 100644 --- a/src/ungrateful.h +++ b/src/ungrateful.h @@ -60,6 +60,7 @@ #include <stdarg.h> #include <limits.h> #include <assert.h> +#include <math.h> #define UNUSED(x) (void)(x) @@ -80,7 +81,6 @@ extern "C" { #endif - typedef uint64_t u64; typedef uint32_t u32; typedef uint16_t u16; @@ -97,6 +97,46 @@ typedef int8_t b8; typedef float f32; typedef double f64; +#if defined(UN_DOUBLE_PRECISION) +typedef double real; + +#ifndef PI +# define PI 3.14159265358979323846 +#endif + +#ifndef EPSILON +# define EPSILON 0.000001 +#endif + +#ifndef DEG2RAD +# define DEG2RAD (PI/180.0) +#endif + +#ifndef RAD2DEG +# define RAD2DEG (180.0/PI) +#endif + +#else +typedef float real; + +#ifndef PI +# define PI 3.14159265358979323846f +#endif + +#ifndef EPSILON +# define EPSILON 0.000001f +#endif + +#ifndef DEG2RAD +# define DEG2RAD (PI/180.0f) +#endif + +#ifndef RAD2DEG +# define RAD2DEG (180.0f/PI) +#endif + +#endif // UN_DOUBLE_PRECISION + /* ---- Memory Allocators API ---- */ typedef enum { @@ -186,6 +226,94 @@ extern s64 un_string_index_of_last(String input, u8 value); extern String un_string_format(Allocator alloc, String buffer, ...); extern String un_string_vformat(Allocator alloc, String buffer, va_list args); +/* ---- math, and vecmath ---- */ + +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 */ +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); +void un_m_sub_scalar2f(f32 *v, f32 *a, f32 scalar); +void un_m_mul_scalar2f(f32 *v, f32 *a, f32 scalar); +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_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_distance_sqr2f(f32 *v, f32 *a, f32 *b); + +/* 3d */ +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); +void un_m_sub_scalar3f(f32 *v, f32 *a, f32 scalar); +void un_m_mul_scalar3f(f32 *v, f32 *a, f32 scalar); +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_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_distance_sqr3f(f32 *v, f32 *a, f32 *b); + +/* 4d */ +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); +void un_m_sub_scalar4f(f32 *v, f32 *a, f32 scalar); +void un_m_mul_scalar4f(f32 *v, f32 *a, f32 scalar); +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_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_distance_sqr4f(f32 *v, f32 *a, f32 *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); + +/* ---- easing ---- */ + +real un_m_ease_isiner(real t); +real un_m_ease_iosiner(real t); +real un_m_ease_osiner(real t); +real un_m_ease_iquadr(real t); +real un_m_ease_ioquadr(real t); +real un_m_ease_oquadr(real t); + +f32 un_m_ease_isinef(f32 t); +f32 un_m_ease_iosinef(f32 t); +f32 un_m_ease_osinef(f32 t); +f32 un_m_ease_iquadf(f32 t); +f32 un_m_ease_ioquadf(f32 t); +f32 un_m_ease_oquadf(f32 t); + +f64 un_m_ease_isined(f64 t); +f64 un_m_ease_iosined(f64 t); +f64 un_m_ease_osined(f64 t); +f64 un_m_ease_iquadd(f64 t); +f64 un_m_ease_ioquadd(f64 t); +f64 un_m_ease_oquadd(f64 t); + #if defined(__cplusplus) } #endif |