diff options
Diffstat (limited to 'src/un_vec.c')
-rw-r--r-- | src/un_vec.c | 506 |
1 files changed, 304 insertions, 202 deletions
diff --git a/src/un_vec.c b/src/un_vec.c index d6c984e..daf08a5 100644 --- a/src/un_vec.c +++ b/src/un_vec.c @@ -1,307 +1,409 @@ -void un_m_add2f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] + b[0]; - v[1] = a[1] + b[1]; +UN_INLINE float2 un_m_add2f(float2 a, float2 b) { + float2 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + return result; } -void un_m_add3f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] + b[0]; - v[1] = a[1] + b[1]; - v[2] = a[2] + b[2]; +UN_INLINE float3 un_m_add3f(float3 a, float3 b) { + float3 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + result.z = a.z + b.z; + return result; } -void un_m_add4f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] + b[0]; - v[1] = a[1] + b[1]; - v[2] = a[2] + b[2]; - v[3] = a[3] + b[3]; +UN_INLINE float4 un_m_add4f(float4 a, float4 b) { + float4 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + result.z = a.z + b.z; + result.w = a.w + b.w; + return result; } -void un_m_sub2f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] - b[0]; - v[1] = a[1] - b[1]; +UN_INLINE float2 un_m_sub2f(float2 a, float2 b) { + float2 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + return result; } -void un_m_sub3f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] - b[0]; - v[1] = a[1] - b[1]; - v[2] = a[2] - b[2]; +UN_INLINE float3 un_m_sub3f(float3 a, float3 b) { + float3 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + result.z = a.z - b.z; + return result; } -void un_m_sub4f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] - b[0]; - v[1] = a[1] - b[1]; - v[2] = a[2] - b[2]; - v[3] = a[3] - b[3]; +UN_INLINE float4 un_m_sub4f(float4 a, float4 b) { + float4 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + result.z = a.z - b.z; + result.w = a.w - b.w; + return result; } -void un_m_add_scalar2f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; +UN_INLINE float2 un_m_add_scalar2f(float2 a, float scalar) { + float2 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + return result; } -void un_m_add_scalar3f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; - v[2] = a[2] + scalar; +UN_INLINE float3 un_m_add_scalar3f(float3 a, float scalar) { + float3 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + result.z = a.z + scalar; + return result; } -void un_m_add_scalar4f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; - v[2] = a[2] + scalar; - v[3] = a[3] + scalar; +UN_INLINE float4 un_m_add_scalar4f(float4 a, float scalar) { + float4 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + result.z = a.z + scalar; + result.w = a.w + scalar; + return result; } -void un_m_sub_scalar2f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; +UN_INLINE float2 un_m_sub_scalar2f(float2 a, float scalar) { + float2 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + return result; } -void un_m_sub_scalar3f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; - v[2] = a[2] - scalar; +UN_INLINE float3 un_m_sub_scalar3f(float3 a, float scalar) { + float3 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + result.z = a.z - scalar; + return result; } -void un_m_sub_scalar4f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; - v[2] = a[2] - scalar; - v[3] = a[3] - scalar; +UN_INLINE float4 un_m_sub_scalar4f(float4 a, float scalar) { + float4 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + result.z = a.z - scalar; + result.w = a.w - scalar; + return result; } -void un_m_mul_scalar2f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; +UN_INLINE float2 un_m_mul_scalar2f(float2 a, float scalar) { + float2 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + return result; } -void un_m_mul_scalar3f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; - v[2] = a[2] * scalar; +UN_INLINE float3 un_m_mul_scalar3f(float3 a, float scalar) { + float3 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + result.z = a.z * scalar; + return result; } -void un_m_mul_scalar4f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; - v[2] = a[2] * scalar; - v[3] = a[3] * scalar; +UN_INLINE float4 un_m_mul_scalar4f(float4 a, float scalar) { + float4 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + result.z = a.z * scalar; + result.w = a.w * scalar; + return result; } -void un_m_div_scalar2f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; +UN_INLINE float2 un_m_div_scalar2f(float2 a, float scalar) { + float2 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + return result; } -void un_m_div_scalar3f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; - v[2] = a[2] / scalar; +UN_INLINE float3 un_m_div_scalar3f(float3 a, float scalar) { + float3 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + result.z = a.z / scalar; + return result; } -void un_m_div_scalar4f(f32 *v, f32 *a, f32 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; - v[2] = a[2] / scalar; - v[3] = a[3] / scalar; +UN_INLINE float4 un_m_div_scalar4f(float4 a, float scalar) { + float4 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + result.z = a.z / scalar; + result.w = a.w / scalar; + return result; } -void un_m_dot2f(f32 *v, f32 *a, f32 *b) { - *v = a[0] * b[0] + a[1] * b[1]; +UN_INLINE float un_m_dot2f(float2 a, float2 b) { + return a.x * b.x + a.y * b.y; } -void un_m_dot3f(f32 *v, f32 *a, f32 *b) { - *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +UN_INLINE float un_m_dot3f(float3 a, float3 b) { + return a.x * b.x + a.y * b.y + a.z * b.z; } -void un_m_dot4f(f32 *v, f32 *a, f32 *b) { - *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +UN_INLINE float un_m_dot4f(float4 a, float4 b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } -void un_m_hadamard2f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] * b[0]; - v[1] = a[1] * b[1]; +UN_INLINE float2 un_m_hadamard2f(float2 a, float2 b) { + float2 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + return result; } -void un_m_hadamard3f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] * b[0]; - v[1] = a[1] * b[1]; - v[2] = a[2] * b[2]; +UN_INLINE float3 un_m_hadamard3f(float3 a, float3 b) { + float3 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + result.z = a.z * b.z; + return result; } -void un_m_hadamard4f(f32 *v, f32 *a, f32 *b) { - v[0] = a[0] * b[0]; - v[1] = a[1] * b[1]; - v[2] = a[2] * b[2]; - v[3] = a[3] * b[3]; +UN_INLINE float4 un_m_hadamard4f(float4 a, float4 b) { + float4 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + result.z = a.z * b.z; + result.w = a.w * b.w; + return result; } -void un_m_cross2f(f32 *v, f32 *a) { - v[0] = a[1]; - v[1] =-a[0]; +UN_INLINE float2 un_m_cross2f(float2 a) { + float2 result; + result.x = a.y; + result.y =-a.x; + return result; } -void un_m_cross3f(f32 *v, f32 *a, f32 *b) { - v[0] = a[1] * b[2] - a[2] * b[1]; - v[1] = a[2] * b[0] - a[0] * b[2]; - v[2] = a[0] * b[1] - a[1] * b[0]; +UN_INLINE float3 un_m_cross3f(float3 a, float3 b) { + float3 result; + result.x = a.y * b.z - a.z * b.y; + result.y = a.z * b.x - a.x * b.z; + result.z = a.x * b.y - a.y * b.x; + return result; } -void un_m_magnitude2f(f32 *v, f32 *a) { - *v = sqrtf(a[0] * a[0] + a[1] * a[1]); +UN_INLINE float un_m_magnitude2f(float2 a) { + return sqrtf(a.x * a.x + a.y * a.y); } -void un_m_magnitude3f(f32 *v, f32 *a) { - *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); +UN_INLINE float un_m_magnitude3f(float3 a) { + return sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); } -void un_m_magnitude4f(f32 *v, f32 *a) { - *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); +UN_INLINE float un_m_magnitude4f(float4 a) { + return sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); } -void un_m_magnitude_sqr2f(f32 *v, f32 *a) { - *v = a[0] * a[0] + a[1] * a[1]; +UN_INLINE float un_m_magnitude_sqr2f(float2 a) { + return a.x * a.x + a.y * a.y; } -void un_m_magnitude_sqr3f(f32 *v, f32 *a) { - *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2]; +UN_INLINE float un_m_magnitude_sqr3f(float3 a) { + return a.x * a.x + a.y * a.y + a.z * a.z; } -void un_m_magnitude_sqr4f(f32 *v, f32 *a) { - *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]; +UN_INLINE float un_m_magnitude_sqr4f(float4 a) { + return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; } -void un_m_distance2f(f32 *v, f32 *a, f32 *b) { - f32 f[2]; - un_m_sub2f(f, b, a); - *v = sqrtf(f[0] * f[0] + f[1] * f[1]); +UN_INLINE float un_m_distance2f(float2 a, float2 b) { + float2 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + + return sqrtf(result.x * result.x + result.y * result.y); } -void un_m_distance3f(f32 *v, f32 *a, f32 *b) { - f32 f[3]; - un_m_sub3f(f, b, a); - *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2]); +UN_INLINE float un_m_distance3f(float3 a, float3 b) { + float3 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + + return sqrtf(result.x * result.x + result.y * result.y + result.z * result.z); } -void un_m_distance4f(f32 *v, f32 *a, f32 *b) { - f32 f[4]; - un_m_sub4f(f, b, a); - *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]); +UN_INLINE float un_m_distance4f(float4 a, float4 b) { + float4 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + result.w = b.w - a.w; + + return sqrtf(result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w); } -void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b) { - f32 f[2]; - un_m_sub2f(f, b, a); - *v = f[0] * f[0] + f[1] * f[1]; +UN_INLINE float un_m_distance_sqr2f(float2 a, float2 b) { + float2 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + + return result.x * result.x + result.y * result.y; } -void un_m_distance_sqr3f(f32 *v, f32 *a, f32 *b) { - f32 f[3]; - un_m_sub3f(f, b, a); - *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2]; +UN_INLINE float un_m_distance_sqr3f(float3 a, float3 b) { + float3 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + + return result.x * result.x + result.y * result.y + result.z * result.z; } -void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b) { - f32 f[4]; - un_m_sub4f(f, b, a); - *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]; +UN_INLINE float un_m_distance_sqr4f(float4 a, float4 b) { + float4 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + result.w = b.w - a.w; + + return result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w; } -void un_m_normalize2f(f32 *v, f32 *a) { - f32 f; - un_m_magnitude2f(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; +UN_INLINE float2 un_m_normalize2f(float2 a) { + float2 result; + float mag; + + mag = sqrtf(a.x * a.x + a.y * a.y); + + result.x = a.x / mag; + result.y = a.y / mag; + + return result; } -void un_m_normalize3f(f32 *v, f32 *a) { - f32 f; - un_m_magnitude3f(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; - v[2] = a[2] / f; +UN_INLINE float3 un_m_normalize3f(float3 a) { + float3 result; + float mag; + + mag = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); + + result.x = a.x / mag; + result.y = a.y / mag; + result.z = a.z / mag; + + return result; } -void un_m_normalize4f(f32 *v, f32 *a) { - f32 f; - un_m_magnitude4f(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; - v[2] = a[2] / f; - v[3] = a[3] / f; +UN_INLINE float4 un_m_normalize4f(float4 a) { + float4 result; + float mag; + + mag = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); + + result.x = a.x / mag; + result.y = a.y / mag; + result.z = a.z / mag; + result.w = a.w / mag; + + return result; } -void un_m_project2f(f32 *v, f32 *a, f32 *onto) { - f32 dot, magn, scale; +UN_INLINE float2 un_m_project2f(float2 a, float2 onto) { + float f; + float2 result; - un_m_dot2f(&dot, a, onto); - un_m_magnitude_sqr2f(&magn, onto); + f = a.x * onto.x + a.y * onto.y; + f /= onto.x * onto.x + onto.y * onto.y; - if (magn < EPSILON) { - un_memory_set((void*)v, 0, sizeof(*v) * 2); - return; - } + result.x = onto.x * f; + result.y = onto.y * f; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; + return result; } -void un_m_project3f(f32 *v, f32 *a, f32 *onto) { - f32 dot, magn, scale; +UN_INLINE float3 un_m_project3f(float3 a, float3 onto) { + float f; + float3 result; - un_m_dot3f(&dot, a, onto); - un_m_magnitude_sqr3f(&magn, onto); + f = a.x * onto.x + a.y * onto.y + a.z * onto.z; + f /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z; - if (magn < EPSILON) { - un_memory_set((void*)v, 0, sizeof(*v) * 3); - return; - } + result.x = onto.x * f; + result.y = onto.y * f; + result.z = onto.z * f; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; - v[2] = onto[2] * scale; + return result; } -void un_m_project4f(f32 *v, f32 *a, f32 *onto) { - f32 dot, magn, scale; +UN_INLINE float4 un_m_project4f(float4 a, float4 onto) { + float f; + float4 result; - un_m_dot4f(&dot, a, onto); - un_m_magnitude_sqr4f(&magn, onto); + f = a.x * onto.x + a.y * onto.y + a.z * onto.z + a.w * onto.w; + f /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z + onto.w * onto.w; - if (magn < EPSILON) { - un_memory_set((void*)v, 0, sizeof(*v) * 4); - return; - } + result.x = onto.x * f; + result.y = onto.y * f; + result.z = onto.z * f; + result.w = onto.w * f; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; - v[2] = onto[2] * scale; - v[3] = onto[3] * scale; + return result; } -void un_m_reflect2f(f32 *v, f32 *a, f32 *normal) { - f32 dot; +UN_INLINE float2 un_m_reflect2f(float2 a, float2 normal) { + float f; + float2 result; + + f = a.x * normal.x + a.y * normal.y; + result.x = normal.x * f * 2.0f; + result.y = normal.y * f * 2.0f; - un_m_dot2f(&dot, a, normal); - un_m_mul_scalar2f(v, normal, 2.0f * dot); - un_m_sub2f(v, v, a); + result.x -= a.x; + result.y -= a.y; + + return result; } -void un_m_reflect3f(f32 *v, f32 *a, f32 *normal) { - f32 dot; +UN_INLINE float3 un_m_reflect3f(float3 a, float3 normal) { + float f; + float3 result; + + f = a.x * normal.x + a.y * normal.y + a.z * normal.z; + + result.x = normal.x * f * 2.0f; + result.y = normal.y * f * 2.0f; + result.z = normal.z * f * 2.0f; + + result.x -= a.x; + result.y -= a.y; + result.z -= a.z; - un_m_dot3f(&dot, a, normal); - un_m_mul_scalar3f(v, normal, 2.0f * dot); - un_m_sub3f(v, v, a); + return result; } -void un_m_reflect4f(f32 *v, f32 *a, f32 *normal) { - f32 dot; +UN_INLINE float4 un_m_reflect4f(float4 a, float4 normal) { + float f; + float4 result; + + f = a.x * normal.x + a.y * normal.y + a.z * normal.z + a.w * normal.w; + + result.x = normal.x * f * 2.0f; + result.y = normal.y * f * 2.0f; + result.z = normal.z * f * 2.0f; + result.w = normal.w * f * 2.0f; + + result.x -= a.x; + result.y -= a.y; + result.z -= a.z; + result.w -= a.w; - un_m_dot4f(&dot, a, normal); - un_m_mul_scalar4f(v, normal, 2.0f * dot); - un_m_sub4f(v, v, a); + return result; } |