From 8145fbe95bebef9517dd3c864e07f96b60a4fcaf Mon Sep 17 00:00:00 2001
From: 3gg <3gg@shellblade.net>
Date: Thu, 8 Feb 2024 07:52:58 -0800
Subject: Vector min max.

---
 include/math/vec2.h | 14 ++++++++++++--
 include/math/vec3.h | 16 +++++++++++++---
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/include/math/vec2.h b/include/math/vec2.h
index 5a74705..5a56a94 100644
--- a/include/math/vec2.h
+++ b/include/math/vec2.h
@@ -57,11 +57,21 @@ static inline vec2 vec2_scale(vec2 v, R s) { return (vec2){v.x * s, v.y * s}; }
 /// Compare two vectors for equality.
 static inline bool vec2_eq(vec2 a, vec2 b) { return a.x == b.x && a.y == b.y; }
 
+/// Compare two vectors for inequality.
+static inline bool vec2_ne(vec2 a, vec2 b) { return !(vec2_eq(a, b)); }
+
 /// Return the absolute value of the vector.
 static inline vec2 vec2_abs(vec2 v) { return (vec2){rabs(v.x), rabs(v.y)}; }
 
-/// Compare two vectors for inequality.
-static inline bool vec2_ne(vec2 a, vec2 b) { return !(vec2_eq(a, b)); }
+/// Return the component-wise minimum of two vectors.
+static inline vec2 vec2_min(vec2 a, vec2 b) {
+  return (vec2){.x = min(a.x, b.x), .y = min(a.y, b.y)};
+}
+
+/// Return the component-wise maximum of two vectors.
+static inline vec2 vec2_max(vec2 a, vec2 b) {
+  return (vec2){.x = max(a.x, b.x), .y = max(a.y, b.y)};
+}
 
 /// Return the vector's squared magnitude.
 static inline R vec2_norm2(vec2 v) { return v.x * v.x + v.y * v.y; }
diff --git a/include/math/vec3.h b/include/math/vec3.h
index d8e1248..ee6d460 100644
--- a/include/math/vec3.h
+++ b/include/math/vec3.h
@@ -61,14 +61,24 @@ static inline bool vec3_eq(vec3 a, vec3 b, R eps) {
   return R_eq(a.x, b.x, eps) && R_eq(a.y, b.y, eps) && R_eq(a.z, b.z, eps);
 }
 
+/// Compare two vectors for inequality.
+static inline bool vec3_ne(vec3 a, vec3 b, R eps) {
+  return !(vec3_eq(a, b, eps));
+}
+
 /// Return the absolute value of the vector.
 static inline vec3 vec3_abs(vec3 v) {
   return (vec3){rabs(v.x), rabs(v.y), rabs(v.z)};
 }
 
-/// Compare two vectors for inequality.
-static inline bool vec3_ne(vec3 a, vec3 b, R eps) {
-  return !(vec3_eq(a, b, eps));
+/// Return the component-wise minimum of two vectors.
+static inline vec3 vec3_min(vec3 a, vec3 b) {
+  return (vec3){.x = min(a.x, b.x), .y = min(a.y, b.y), .z = min(a.z, b.z)};
+}
+
+/// Return the component-wise maximum of two vectors.
+static inline vec3 vec3_max(vec3 a, vec3 b) {
+  return (vec3){.x = max(a.x, b.x), .y = max(a.y, b.y), .z = max(a.z, b.z)};
 }
 
 /// Return the vector's squared magnitude.
-- 
cgit v1.2.3