aboutsummaryrefslogtreecommitdiff
path: root/eng/inc/vec2.h
blob: f6628c582624702971f9b0a17b995e60d72e6e0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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)