Skip to content

Commit b9987e0

Browse files
committed
vgMath ver.2.1.3 - fix mingw/gcc compiler issue when compiled w/o -DVGM_USES_TEMPLATE: BrutPitt/imGuIZMO.quat#2
1 parent 7f42375 commit b9987e0

1 file changed

Lines changed: 37 additions & 37 deletions

File tree

vgMath/vgMath.h

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//------------------------------------------------------------------------------
2-
// Copyright (c) 2018-2019 Michele Morrone
2+
// Copyright (c) 2018-2020 Michele Morrone
33
// All rights reserved.
44
//
55
// https://michelemorrone.eu - https://BrutPitt.com
@@ -256,34 +256,34 @@ TEMPLATE_TYPENAME_T class Quat {
256256
TEMPLATE_TYPENAME_T class Mat3 {
257257
public:
258258
union {
259-
struct { VEC3_T v0 , v1 , v2 ; };
259+
VEC3_T v[3];
260260
struct { T m00, m01, m02,
261261
m10, m11, m12,
262262
m20, m21, m22; };
263263
};
264264

265265
Mat3() {}
266-
Mat3(T s) : v0(s, 0, 0), v1(0, s, 0), v2(0, 0, s) {}
267-
Mat3(const VEC3_T& v0, const VEC3_T& v1, const VEC3_T& v2) : v0(v0), v1(v1), v2(v2) {}
266+
Mat3(T s) : v { VEC3_T(s, 0, 0), VEC3_T(0, s, 0), VEC3_T(0, 0, s) } {}
267+
Mat3(const VEC3_T& v0, const VEC3_T& v1, const VEC3_T& v2) : v {v0, v1, v2 } {}
268268
Mat3(const MAT4_T& m);
269269
Mat3(T v0x, T v0y, T v0z,
270270
T v1x, T v1y, T v1z,
271-
T v2x, T v2y, T v2z) : v0(v0x, v0y, v0z), v1(v1x, v1y, v1z), v2(v2x, v2y, v2z) {}
271+
T v2x, T v2y, T v2z) : v { VEC3_T(v0x, v0y, v0z), VEC3_T(v1x, v1y, v1z), VEC3_T(v2x, v2y, v2z) } {}
272272

273-
const VEC3_T& operator[](int i) const { return *(&v0 + i); }
274-
VEC3_T& operator[](int i) { return *(&v0 + i); }
273+
const VEC3_T& operator[](int i) const { return v[i]; }
274+
VEC3_T& operator[](int i) { return v[i]; }
275275

276-
const Mat3 operator-() const { return Mat3(-v0, -v1, -v2); }
276+
const Mat3 operator-() const { return Mat3(-v[0], -v[1], -v[2]); }
277277

278-
Mat3& operator+=(const Mat3& m) { v0 += m.v0; v1 += m.v1; v2 += m.v2; return *this; }
279-
Mat3& operator-=(const Mat3& m) { v0 -= m.v0; v1 -= m.v1; v2 -= m.v2; return *this; }
278+
Mat3& operator+=(const Mat3& m) { v[0] += m.v[0]; v[1] += m.v[1]; v[2] += m.v[2]; return *this; }
279+
Mat3& operator-=(const Mat3& m) { v[0] -= m.v[0]; v[1] -= m.v[1]; v[2] -= m.v[2]; return *this; }
280+
Mat3& operator/=(const Mat3& m) { v[0] /= m.v[0]; v[1] /= m.v[1]; v[2] /= m.v[2]; return *this; }
281+
Mat3& operator*=(T s) { v[0] *= s; v[1] *= s; v[2] *= s; return *this; }
282+
Mat3& operator/=(T s) { v[0] /= s; v[1] /= s; v[2] /= s; return *this; }
280283
Mat3& operator*=(const Mat3& m) { return *this = *this * m; }
281-
Mat3& operator/=(const Mat3& m) { v0 /= m.v0; v1 /= m.v1; v2 /= m.v2; return *this; }
282-
Mat3& operator*=(T s) { v0 *= s; v1 *= s; v2 *= s; return *this; }
283-
Mat3& operator/=(T s) { v0 /= s; v1 /= s; v2 /= s; return *this; }
284284

285-
const Mat3 operator+(const Mat3& m) const { return Mat3(v0 + m.v0, v1 + m.v1, v2 + m.v2); }
286-
const Mat3 operator-(const Mat3& m) const { return Mat3(v0 - m.v0, v1 - m.v1, v2 - m.v2); }
285+
const Mat3 operator+(const Mat3& m) const { return Mat3(v[0] + m.v[0], v[1] + m.v[1], v[2] + m.v[2]); }
286+
const Mat3 operator-(const Mat3& m) const { return Mat3(v[0] - m.v[0], v[1] - m.v[1], v[2] - m.v[2]); }
287287
#define M(X,Y) (m##X * m.m##Y)
288288
const Mat3 operator*(const Mat3& m) const { return Mat3( M(00,00) + M(10,01) + M(20,02),
289289
M(01,00) + M(11,01) + M(21,02),
@@ -295,8 +295,8 @@ TEMPLATE_TYPENAME_T class Mat3 {
295295
M(01,20) + M(11,21) + M(21,22),
296296
M(02,20) + M(12,21) + M(22,22)); }
297297
#undef M
298-
const Mat3 operator*(T s) const { return Mat3(v0 * s , v1 * s , v2 * s ); }
299-
const Mat3 operator/(T s) const { return Mat3(v0 / s , v1 / s , v2 / s ); }
298+
const Mat3 operator*(T s) const { return Mat3(v[0] * s, v[1] * s, v[2] * s); }
299+
const Mat3 operator/(T s) const { return Mat3(v[0] / s, v[1] / s, v[2] / s); }
300300

301301
const VEC3_T operator*(const VEC3_T& v) const { return VEC3_T(m00 * v.x + m10 * v.y + m20 * v.z,
302302
m01 * v.x + m11 * v.y + m21 * v.z,
@@ -309,38 +309,38 @@ TEMPLATE_TYPENAME_T class Mat3 {
309309
TEMPLATE_TYPENAME_T class Mat4 {
310310
public:
311311
union {
312-
struct { VEC4_T v0 , v1 , v2 , v3 ; };
312+
VEC4_T v[4];
313313
struct { T m00, m01, m02, m03,
314314
m10, m11, m12, m13,
315315
m20, m21, m22, m23,
316316
m30, m31, m32, m33; };
317317
};
318318

319319
Mat4() {}
320-
Mat4(T s) : v0(s, 0, 0, 0), v1(0, s, 0, 0), v2(0, 0, s, 0), v3(0, 0, 0, s) {}
321-
Mat4(const VEC4_T& v0, const VEC4_T& v1, const VEC4_T& v2, const VEC4_T& v3) : v0(v0), v1(v1), v2(v2), v3(v3) {}
322-
Mat4(const MAT3_T& m) : v0(VEC4_T(m.v0,0)), v1(VEC4_T(m.v1,0)), v2(VEC4_T(m.v2,0)), v3(0, 0, 0, 1) {}
320+
Mat4(T s) : v { VEC4_T(s, 0, 0, 0), VEC4_T(0, s, 0, 0), VEC4_T(0, 0, s, 0), VEC4_T(0, 0, 0, s)} {}
321+
Mat4(const VEC4_T& v0, const VEC4_T& v1, const VEC4_T& v2, const VEC4_T& v3) : v {v0, v1, v2, v3} {}
322+
Mat4(const MAT3_T& m) : v {VEC4_T(m.v[0],0), VEC4_T(m.v[1],0), VEC4_T(m.v[2],0), VEC4_T(0, 0, 0, 1)} {}
323323
Mat4(T v0x, T v0y, T v0z, T v0w,
324324
T v1x, T v1y, T v1z, T v1w,
325325
T v2x, T v2y, T v2z, T v2w,
326-
T v3x, T v3y, T v3z, T v3w) : v0(v0x, v0y, v0z, v0w), v1(v1x, v1y, v1z, v1w), v2(v2x, v2y, v2z, v2w), v3(v3x, v3y, v3z, v3w) {}
326+
T v3x, T v3y, T v3z, T v3w) : v {VEC4_T(v0x, v0y, v0z, v0w), VEC4_T(v1x, v1y, v1z, v1w), VEC4_T(v2x, v2y, v2z, v2w), VEC4_T(v3x, v3y, v3z, v3w) } {}
327327

328-
const VEC4_T& operator[](int i) const { return *(&v0 + i); }
329-
VEC4_T& operator[](int i) { return *(&v0 + i); }
328+
const VEC4_T& operator[](int i) const { return v[i]; }
329+
VEC4_T& operator[](int i) { return v[i]; }
330330

331-
const Mat4 operator-() const { return Mat4(-v0, -v1, -v2, -v3); }
331+
const Mat4 operator-() const { return Mat4(-v[0], -v[1], -v[2], -v[3]); }
332332

333-
Mat4& operator+=(const Mat4& m) { v0 += m.v0; v1 += m.v1; v2 += m.v2; v3 += m.v3; return *this; }
334-
Mat4& operator-=(const Mat4& m) { v0 -= m.v0; v1 -= m.v1; v2 -= m.v2; v3 -= m.v3; return *this; }
333+
Mat4& operator+=(const Mat4& m) { v[0] += m.v[0]; v[1] += m.v[1]; v[2] += m.v[2]; v[3] += m.v[3]; return *this; }
334+
Mat4& operator-=(const Mat4& m) { v[0] -= m.v[0]; v[1] -= m.v[1]; v[2] -= m.v[2]; v[3] -= m.v[3]; return *this; }
335+
Mat4& operator/=(const Mat4& m) { v[0] /= m.v[0]; v[1] /= m.v[1]; v[2] /= m.v[2]; v[3] /= m.v[3]; return *this; }
336+
Mat4& operator*=(T s) { v[0] *= s; v[1] *= s; v[2] *= s; v[3] *= s; return *this; }
337+
Mat4& operator/=(T s) { v[0] /= s; v[1] /= s; v[2] /= s; v[3] /= s; return *this; }
335338
Mat4& operator*=(const Mat4& m) { return *this = *this * m; }
336-
Mat4& operator/=(const Mat4& m) { v0 /= m.v0; v1 /= m.v1; v2 /= m.v2; v3 /= m.v3; return *this; }
337-
Mat4& operator*=(T s) { v0 *= s; v1 *= s; v2 *= s; v3 *= s; return *this; }
338-
Mat4& operator/=(T s) { v0 /= s; v1 /= s; v2 /= s; v3 /= s; return *this; }
339-
340-
const Mat4 operator+(const Mat4& m) const { return Mat4(v0 + m.v0, v1 + m.v1, v2 + m.v2, v3 + m.v3); }
341-
const Mat4 operator-(const Mat4& m) const { return Mat4(v0 - m.v0, v1 - m.v1, v2 - m.v2, v3 - m.v3); }
342-
const Mat4 operator*(T s) const { return Mat4(v0 * s , v1 * s , v2 * s , v3 * s ); }
343-
const Mat4 operator/(T s) const { return Mat4(v0 / s , v1 / s , v2 / s , v3 / s ); }
339+
340+
const Mat4 operator+(const Mat4& m) const { return Mat4(v[0] + m.v[0], v[1] + m.v[1], v[2] + m.v[2], v[3] + m.v[3]); }
341+
const Mat4 operator-(const Mat4& m) const { return Mat4(v[0] - m.v[0], v[1] - m.v[1], v[2] - m.v[2], v[3] - m.v[3]); }
342+
const Mat4 operator*(T s) const { return Mat4(v[0] * s , v[1] * s , v[2] * s , v[3] * s ); }
343+
const Mat4 operator/(T s) const { return Mat4(v[0] / s , v[1] / s , v[2] / s , v[3] / s ); }
344344
#define M(X,Y) (m##X * m.m##Y)
345345
const Mat4 operator*(const Mat4& m) const { return Mat4( M(00,00) + M(10,01) + M(20,02) + M(30,03),
346346
M(01,00) + M(11,01) + M(21,02) + M(31,03),
@@ -369,7 +369,7 @@ TEMPLATE_TYPENAME_T class Mat4 {
369369
// cast / conversion
370370
//////////////////////////
371371
TEMPLATE_TYPENAME_T inline VEC3_T::Vec3(const VEC4_T& v) : x(v.x), y(v.y), z(v.z) {}
372-
TEMPLATE_TYPENAME_T inline MAT3_T::Mat3(const MAT4_T& m) : v0(m.v0), v1(m.v1), v2(m.v2) {}
372+
TEMPLATE_TYPENAME_T inline MAT3_T::Mat3(const MAT4_T& m) : v {m.v[0], m.v[1], m.v[2]} {}
373373
TEMPLATE_TYPENAME_T inline MAT3_T mat3_cast(QUAT_T const& q) {
374374
T xx(q.x * q.x); T yy(q.y * q.y); T zz(q.z * q.z);
375375
T xz(q.x * q.z); T xy(q.x * q.y); T yz(q.y * q.z);
@@ -476,7 +476,7 @@ TEMPLATE_TYPENAME_T inline const MAT4_T inverse(MAT4_T const &m) {
476476
(v0 * f1 - v1 * f3 + v3 * f5) * signV,
477477
(v0 * f2 - v1 * f4 + v2 * f5) * -signV);
478478

479-
VEC4_T v0r0(m.v0 * VEC4_T(inv.m00, inv.m10, inv.m20, inv.m30));
479+
VEC4_T v0r0(m.v[0] * VEC4_T(inv.m00, inv.m10, inv.m20, inv.m30));
480480
return inv * (T(1) / (v0r0.x + v0r0.y + v0r0.z + v0r0.w)); }// 1/determinant ==> "operator *" is faster
481481
// external operators
482482
//////////////////////////

0 commit comments

Comments
 (0)