-
Notifications
You must be signed in to change notification settings - Fork 1
/
GLM-Vex.hpp
122 lines (120 loc) · 10.1 KB
/
GLM-Vex.hpp
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#define __VEX2GLM_FUNCS__ \
operator glm::vec2() const { return glm::vec2(x, y); }; \
operator glm::vec3() const { return glm::vec3(x, y, NULL); }; \
operator glm::vec4() const { return glm::vec4(x, y, NULL, NULL); }; \
vex2(glm::vec2 v) { x = T(v.x); y = T(v.y); }; \
vex2(glm::vec3 v) { x = T(v.x); y = T(v.y); }; \
vex2(glm::vec4 v) { x = T(v.x); y = T(v.y); }; \
vex2<T>& operator=(glm::vec2 v) { x = T(v.x); y = T(v.y); return *this; }; \
vex2<T>& operator=(glm::vec3 v) { x = T(v.x); y = T(v.y); return *this; }; \
vex2<T>& operator=(glm::vec4 v) { x = T(v.x); y = T(v.y); return *this; }; \
vex2<T>& operator-=(glm::vec2 v) { x -= T(v.x); y -= T(v.y); return *this; }; \
vex2<T>& operator-=(glm::vec3 v) { x -= T(v.x); y -= T(v.y); return *this; }; \
vex2<T>& operator-=(glm::vec4 v) { x -= T(v.x); y -= T(v.y); return *this; }; \
vex2<T>& operator+=(glm::vec2 v) { x += T(v.x); y += T(v.y); return *this; }; \
vex2<T>& operator+=(glm::vec3 v) { x += T(v.x); y += T(v.y); return *this; }; \
vex2<T>& operator+=(glm::vec4 v) { x += T(v.x); y += T(v.y); return *this; }; \
vex2<T>& operator*=(glm::vec2 v) { x *= T(v.x); y *= T(v.y); return *this; }; \
vex2<T>& operator*=(glm::vec3 v) { x *= T(v.x); y *= T(v.y); return *this; }; \
vex2<T>& operator*=(glm::vec4 v) { x *= T(v.x); y *= T(v.y); return *this; }; \
vex2<T>& operator/=(glm::vec2 v) { x /= T(v.x); y /= T(v.y); return *this; }; \
vex2<T>& operator/=(glm::vec3 v) { x /= T(v.x); y /= T(v.y); return *this; }; \
vex2<T>& operator/=(glm::vec4 v) { x /= T(v.x); y /= T(v.y); return *this; }; \
vex2<T> operator-(glm::vec2 v) const { return vex2<T>(x - T(v.x), y - T(v.y)); }; \
vex2<T> operator-(glm::vec3 v) const { return vex2<T>(x - T(v.x), y - T(v.y)); }; \
vex2<T> operator-(glm::vec4 v) const { return vex2<T>(x - T(v.x), y - T(v.y)); }; \
vex2<T> operator+(glm::vec2 v) const { return vex2<T>(x + T(v.x), y + T(v.y)); }; \
vex2<T> operator+(glm::vec3 v) const { return vex2<T>(x + T(v.x), y + T(v.y)); }; \
vex2<T> operator+(glm::vec4 v) const { return vex2<T>(x + T(v.x), y + T(v.y)); }; \
vex2<T> operator*(glm::vec2 v) const { return vex2<T>(x * T(v.x), y * T(v.y)); }; \
vex2<T> operator*(glm::vec3 v) const { return vex2<T>(x * T(v.x), y * T(v.y)); }; \
vex2<T> operator*(glm::vec4 v) const { return vex2<T>(x * T(v.x), y * T(v.y)); }; \
vex2<T> operator/(glm::vec2 v) const { return vex2<T>(x / T(v.x), y / T(v.y)); }; \
vex2<T> operator/(glm::vec3 v) const { return vex2<T>(x / T(v.x), y / T(v.y)); }; \
vex2<T> operator/(glm::vec4 v) const { return vex2<T>(x / T(v.x), y / T(v.y)); }; \
bool operator==(glm::vec2 v) const { return x == T(v.x) && y == T(v.y); }; \
bool operator==(glm::vec3 v) const { return x == T(v.x) && y == T(v.y); }; \
bool operator==(glm::vec4 v) const { return x == T(v.x) && y == T(v.y); }; \
bool operator!=(glm::vec2 v) const { return x != T(v.x) && y != T(v.y); }; \
bool operator!=(glm::vec3 v) const { return x != T(v.x) && y != T(v.y); }; \
bool operator!=(glm::vec4 v) const { return x != T(v.x) && y != T(v.y); };
#define __VEX3GLM_FUNCS__ \
operator glm::vec2() const { return glm::vec2(x, y); }; \
operator glm::vec3() const { return glm::vec3(x, y, z); }; \
operator glm::vec4() const { return glm::vec4(x, y, z, NULL); }; \
vex3(glm::vec2 v) { x = T(v.x); y = T(v.y); }; \
vex3(glm::vec3 v) { x = T(v.x); y = T(v.y); z = T(v.z); }; \
vex3(glm::vec4 v) { x = T(v.x); y = T(v.y); z = T(v.z); }; \
vex3<T>& operator=(glm::vec2 v) { x = T(v.x); y = T(v.y); return *this; }; \
vex3<T>& operator=(glm::vec3 v) { x = T(v.x); y = T(v.y); z = T(v.z); return *this; }; \
vex3<T>& operator=(glm::vec4 v) { x = T(v.x); y = T(v.y); z = T(v.z); return *this; }; \
vex3<T>& operator-=(glm::vec2 v) { x -= T(v.x); y -= T(v.y); return *this; }; \
vex3<T>& operator-=(glm::vec3 v) { x -= T(v.x); y -= T(v.y); z -= T(v.z); return *this; }; \
vex3<T>& operator-=(glm::vec4 v) { x -= T(v.x); y -= T(v.y); z -= T(v.z); return *this; }; \
vex3<T>& operator+=(glm::vec2 v) { x += T(v.x); y += T(v.y); return *this; }; \
vex3<T>& operator+=(glm::vec3 v) { x += T(v.x); y += T(v.y); z += T(v.z); return *this; }; \
vex3<T>& operator+=(glm::vec4 v) { x += T(v.x); y += T(v.y); z += T(v.z); return *this; }; \
vex3<T>& operator*=(glm::vec2 v) { x *= T(v.x); y *= T(v.y); return *this; }; \
vex3<T>& operator*=(glm::vec3 v) { x *= T(v.x); y *= T(v.y); z *= T(v.z); return *this; }; \
vex3<T>& operator*=(glm::vec4 v) { x *= T(v.x); y *= T(v.y); z *= T(v.z); return *this; }; \
vex3<T>& operator/=(glm::vec2 v) { x /= T(v.x); y /= T(v.y); return *this; }; \
vex3<T>& operator/=(glm::vec3 v) { x /= T(v.x); y /= T(v.y); z /= T(v.z); return *this; }; \
vex3<T>& operator/=(glm::vec4 v) { x /= T(v.x); y /= T(v.y); z /= T(v.z); return *this; }; \
vex3<T> operator-(glm::vec2 v) const { return vex3<T>(x - T(v.x), y - T(v.y)); }; \
vex3<T> operator-(glm::vec3 v) const { return vex3<T>(x - T(v.x), y - T(v.y), z - T(v.z)); }; \
vex3<T> operator-(glm::vec4 v) const { return vex3<T>(x - T(v.x), y - T(v.y), z - T(v.z)); }; \
vex3<T> operator+(glm::vec2 v) const { return vex3<T>(x + T(v.x), y + T(v.y)); }; \
vex3<T> operator+(glm::vec3 v) const { return vex3<T>(x + T(v.x), y + T(v.y), z + T(v.z)); }; \
vex3<T> operator+(glm::vec4 v) const { return vex3<T>(x + T(v.x), y + T(v.y), z + T(v.z)); }; \
vex3<T> operator*(glm::vec2 v) const { return vex3<T>(x * T(v.x), y * T(v.y)); }; \
vex3<T> operator*(glm::vec3 v) const { return vex3<T>(x * T(v.x), y * T(v.y), z * T(v.z)); }; \
vex3<T> operator*(glm::vec4 v) const { return vex3<T>(x * T(v.x), y * T(v.y), z * T(v.z)); }; \
vex3<T> operator/(glm::vec2 v) const { return vex3<T>(x / T(v.x), y / T(v.y)); }; \
vex3<T> operator/(glm::vec3 v) const { return vex3<T>(x / T(v.x), y / T(v.y), z / T(v.z)); }; \
vex3<T> operator/(glm::vec4 v) const { return vex3<T>(x / T(v.x), y / T(v.y), z / T(v.z)); }; \
bool operator==(glm::vec2 v) const { return x == T(v.x) && y == T(v.y); }; \
bool operator==(glm::vec3 v) const { return x == T(v.x) && y == T(v.y) && z == T(v.z); }; \
bool operator==(glm::vec4 v) const { return x == T(v.x) && y == T(v.y) && z == T(v.z); }; \
bool operator!=(glm::vec2 v) const { return x != T(v.x) && y != T(v.y); }; \
bool operator!=(glm::vec3 v) const { return x != T(v.x) && y != T(v.y) && z != T(v.z); }; \
bool operator!=(glm::vec4 v) const { return x != T(v.x) && y != T(v.y) && z != T(v.z); };
#define __VEX4GLM_FUNCS__ \
operator glm::vec2() const { return glm::vec2(x, y); }; \
operator glm::vec3() const { return glm::vec3(x, y, z); }; \
operator glm::vec4() const { return glm::vec4(x, y, z, w); }; \
vex4(glm::vec2 v) { x = T(v.x); y = T(v.y); }; \
vex4(glm::vec3 v) { x = T(v.x); y = T(v.y); z = T(v.z); }; \
vex4(glm::vec4 v) { x = T(v.x); y = T(v.y); z = T(v.z); w = T(v.w); }; \
vex4<T>& operator=(glm::vec2 v) { x = T(v.x); y = T(v.y); return *this; }; \
vex4<T>& operator=(glm::vec3 v) { x = T(v.x); y = T(v.y); z = T(v.z); return *this; }; \
vex4<T>& operator=(glm::vec4 v) { x = T(v.x); y = T(v.y); z = T(v.z); w = T(v.w); return *this; }; \
vex4<T>& operator-=(glm::vec2 v) { x -= T(v.x); y -= T(v.y); return *this; }; \
vex4<T>& operator-=(glm::vec3 v) { x -= T(v.x); y -= T(v.y); z -= T(v.z); return *this; }; \
vex4<T>& operator-=(glm::vec4 v) { x -= T(v.x); y -= T(v.y); z -= T(v.z); w -= T(v.w); return *this; }; \
vex4<T>& operator+=(glm::vec2 v) { x += T(v.x); y += T(v.y); return *this; }; \
vex4<T>& operator+=(glm::vec3 v) { x += T(v.x); y += T(v.y); z += T(v.z); return *this; }; \
vex4<T>& operator+=(glm::vec4 v) { x += T(v.x); y += T(v.y); z += T(v.z); w += T(v.w); return *this; }; \
vex4<T>& operator*=(glm::vec2 v) { x *= T(v.x); y *= T(v.y); return *this; }; \
vex4<T>& operator*=(glm::vec3 v) { x *= T(v.x); y *= T(v.y); z *= T(v.z); return *this; }; \
vex4<T>& operator*=(glm::vec4 v) { x *= T(v.x); y *= T(v.y); z *= T(v.z); w *= T(v.w); return *this; }; \
vex4<T>& operator/=(glm::vec2 v) { x /= T(v.x); y /= T(v.y); return *this; }; \
vex4<T>& operator/=(glm::vec3 v) { x /= T(v.x); y /= T(v.y); z /= T(v.z); return *this; }; \
vex4<T>& operator/=(glm::vec4 v) { x /= T(v.x); y /= T(v.y); z /= T(v.z); w /= T(v.w); return *this; }; \
vex4<T> operator-(glm::vec2 v) const { return vex3<T>(x - T(v.x), y - T(v.y)); }; \
vex4<T> operator-(glm::vec3 v) const { return vex3<T>(x - T(v.x), y - T(v.y), z - T(v.z)); }; \
vex4<T> operator-(glm::vec4 v) const { return vex3<T>(x - T(v.x), y - T(v.y), z - T(v.z), w - T(v.w)); }; \
vex4<T> operator+(glm::vec2 v) const { return vex3<T>(x + T(v.x), y + T(v.y)); }; \
vex4<T> operator+(glm::vec3 v) const { return vex3<T>(x + T(v.x), y + T(v.y), z + T(v.z)); }; \
vex4<T> operator+(glm::vec4 v) const { return vex3<T>(x + T(v.x), y + T(v.y), z + T(v.z), w + T(v.w)); }; \
vex4<T> operator*(glm::vec2 v) const { return vex3<T>(x * T(v.x), y * T(v.y)); }; \
vex4<T> operator*(glm::vec3 v) const { return vex3<T>(x * T(v.x), y * T(v.y), z * T(v.z)); }; \
vex4<T> operator*(glm::vec4 v) const { return vex3<T>(x * T(v.x), y * T(v.y), z * T(v.z), w * T(v.w)); }; \
vex4<T> operator/(glm::vec2 v) const { return vex3<T>(x / T(v.x), y / T(v.y)); }; \
vex4<T> operator/(glm::vec3 v) const { return vex3<T>(x / T(v.x), y / T(v.y), z / T(v.z)); }; \
vex4<T> operator/(glm::vec4 v) const { return vex3<T>(x / T(v.x), y / T(v.y), z / T(v.z), w / T(v.w)); }; \
bool operator==(glm::vec2 v) const { return x == T(v.x) && y == T(v.y); }; \
bool operator==(glm::vec3 v) const { return x == T(v.x) && y == T(v.y) && z == T(v.z); }; \
bool operator==(glm::vec4 v) const { return x == T(v.x) && y == T(v.y) && z == T(v.z) && w == T(v.w); }; \
bool operator!=(glm::vec2 v) const { return x != T(v.x) && y != T(v.y); }; \
bool operator!=(glm::vec3 v) const { return x != T(v.x) && y != T(v.y) && z != T(v.z); }; \
bool operator!=(glm::vec4 v) const { return x != T(v.x) && y != T(v.y) && z != T(v.z) && w != T(v.w); };