summaryrefslogtreecommitdiff
path: root/vendors/_.h
diff options
context:
space:
mode:
Diffstat (limited to 'vendors/_.h')
-rw-r--r--vendors/_.h52
1 files changed, 51 insertions, 1 deletions
diff --git a/vendors/_.h b/vendors/_.h
index ef10927..544ff29 100644
--- a/vendors/_.h
+++ b/vendors/_.h
@@ -5,7 +5,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "TZR.h"
void wdeinit(void);
[[nodiscard]] void *alloc(size_t size);
@@ -53,3 +52,54 @@ void *_realloc(void *ptr, size_t size);
#define pwrn(...) pgeneric("93mWRN", __VA_ARGS__)
#define panic(...) perr(__VA_ARGS__), exit(EXIT_FAILURE)
#define assert(X) if (!(X)) panic("assert failed: "STR(X))
+
+// mathematical vectors
+
+#define UNPACK(V) (V).x, (V).y
+#define I2(X, Y) (int2){{(X), (Y)}}
+#define I2R(X) I2((X), (X))
+#define I2Z I2(0, 0)
+#define F2(X, Y) (float2){{(X), (Y)}}
+#define F2R(X) F2((X), (X))
+#define F2Z F2(0.0f, 0.0f)
+#define I4(X, Y, Z, W) (int4){{(X), (Y), (Z), (W)}}
+#define I4Z I4(0, 0, 0, 0)
+#define I21 I2R(1)
+#define F21 F2R(1)
+
+typedef union { struct { int x, y; }; int a[2]; } int2;
+typedef union { struct { float x, y; }; float a[2]; } float2;
+typedef union { struct { int x, y, z, w; }; int a[4]; } int4;
+
+float2 tofloat2(int2 a);
+int2 toint2(float2 a);
+
+float2 float2_add(float2 a, float2 b);
+float2 float2_sub(float2 a, float2 b);
+float2 float2_mul(float2 a, float x);
+float2 float2_div(float2 a, float x);
+float float2_length(float2 a);
+float2 float2_normalize(float2 a);
+float float2_angle(float2 a);
+int2 float2_round(float2 a);
+float2 float2_clamp(float2 min, float2 a, float2 max);
+float2 float2_swp(float2 a);
+float2 float2_lerp(float2 a, float2 b, float x);
+
+int2 int2_sub(int2 a, int2 b);
+int2 int2_add(int2 a, int2 b);
+int2 int2_mul(int2 a, float x);
+int2 int2_div(int2 a, float x);
+int2 int2_abs(int2 a);
+int2 int2_swp(int2 a);
+int2 int2_inv(int2 a);
+
+int2 int4_xy(int4 a);
+int2 int4_zw(int4 a);
+
+#define int2_log(L, A) log_##L("%d %d", (A).x, (A).y)
+#define float2_log(L, A) log_##L("%f %f", (A).x, (A).y)
+
+#include "TZR.h"
+#include "config.h"
+#include "world.h"