aboutsummaryrefslogtreecommitdiff
path: root/src/un_vec.c
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2025-09-25 14:17:07 +0300
committerbonmas14 <bonmas14@gmail.com>2025-09-25 14:17:07 +0300
commit166877cf15f6afa89c9f8a61e267d485868d0ee1 (patch)
tree9f080314edc4fb293f91227cdc1c01cfec8d7bae /src/un_vec.c
parent8ebdc95621bc61fdf3c98cd7ae4ddca67398df23 (diff)
downloadungrateful-166877cf15f6afa89c9f8a61e267d485868d0ee1.tar.gz
ungrateful-166877cf15f6afa89c9f8a61e267d485868d0ee1.zip
+disgrace and rework of ungrateful.h
Diffstat (limited to 'src/un_vec.c')
-rw-r--r--src/un_vec.c506
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;
}