diff options
Diffstat (limited to 'eng/inc/vec2.h')
-rw-r--r-- | eng/inc/vec2.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/eng/inc/vec2.h b/eng/inc/vec2.h new file mode 100644 index 0000000..f6628c5 --- /dev/null +++ b/eng/inc/vec2.h @@ -0,0 +1,40 @@ +#pragma once + +#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) + +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); + +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); + +#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) |