|
|
@ -348,9 +348,7 @@ public: |
|
|
// _DEFINE_SWIZZLER2 defines a single such function, DEFINE_SWIZZLER2 defines all of them for all |
|
|
// _DEFINE_SWIZZLER2 defines a single such function, DEFINE_SWIZZLER2 defines all of them for all |
|
|
// component names (x<->r) and permutations (xy<->yx) |
|
|
// component names (x<->r) and permutations (xy<->yx) |
|
|
#define _DEFINE_SWIZZLER2(a, b, name) \ |
|
|
#define _DEFINE_SWIZZLER2(a, b, name) \ |
|
|
[[nodiscard]] constexpr Vec2<T> name() const { \ |
|
|
|
|
|
return Vec2<T>(a, b); \ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
[[nodiscard]] constexpr Vec2<T> name() const { return Vec2<T>(a, b); } |
|
|
#define DEFINE_SWIZZLER2(a, b, a2, b2, a3, b3, a4, b4) \ |
|
|
#define DEFINE_SWIZZLER2(a, b, a2, b2, a3, b3, a4, b4) \ |
|
|
_DEFINE_SWIZZLER2(a, b, a##b); \ |
|
|
_DEFINE_SWIZZLER2(a, b, a##b); \ |
|
|
_DEFINE_SWIZZLER2(a, b, a2##b2); \ |
|
|
_DEFINE_SWIZZLER2(a, b, a2##b2); \ |
|
|
@ -543,9 +541,7 @@ public: |
|
|
// DEFINE_SWIZZLER2_COMP2 defines two component functions for all component names (x<->r) and |
|
|
// DEFINE_SWIZZLER2_COMP2 defines two component functions for all component names (x<->r) and |
|
|
// permutations (xy<->yx) |
|
|
// permutations (xy<->yx) |
|
|
#define _DEFINE_SWIZZLER2(a, b, name) \ |
|
|
#define _DEFINE_SWIZZLER2(a, b, name) \ |
|
|
[[nodiscard]] constexpr Vec2<T> name() const { \ |
|
|
|
|
|
return Vec2<T>(a, b); \ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
[[nodiscard]] constexpr Vec2<T> name() const { return Vec2<T>(a, b); } |
|
|
#define DEFINE_SWIZZLER2_COMP1(a, a2) \ |
|
|
#define DEFINE_SWIZZLER2_COMP1(a, a2) \ |
|
|
_DEFINE_SWIZZLER2(a, a, a##a); \ |
|
|
_DEFINE_SWIZZLER2(a, a, a##a); \ |
|
|
_DEFINE_SWIZZLER2(a, a, a2##a2) |
|
|
_DEFINE_SWIZZLER2(a, a, a2##a2) |
|
|
@ -570,9 +566,7 @@ public: |
|
|
#undef _DEFINE_SWIZZLER2 |
|
|
#undef _DEFINE_SWIZZLER2 |
|
|
|
|
|
|
|
|
#define _DEFINE_SWIZZLER3(a, b, c, name) \ |
|
|
#define _DEFINE_SWIZZLER3(a, b, c, name) \ |
|
|
[[nodiscard]] constexpr Vec3<T> name() const { \ |
|
|
|
|
|
return Vec3<T>(a, b, c); \ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
[[nodiscard]] constexpr Vec3<T> name() const { return Vec3<T>(a, b, c); } |
|
|
#define DEFINE_SWIZZLER3_COMP1(a, a2) \ |
|
|
#define DEFINE_SWIZZLER3_COMP1(a, a2) \ |
|
|
_DEFINE_SWIZZLER3(a, a, a, a##a##a); \ |
|
|
_DEFINE_SWIZZLER3(a, a, a, a##a##a); \ |
|
|
_DEFINE_SWIZZLER3(a, a, a, a2##a2##a2) |
|
|
_DEFINE_SWIZZLER3(a, a, a, a2##a2##a2) |
|
|
@ -641,8 +635,8 @@ template <typename T> |
|
|
|
|
|
|
|
|
// linear interpolation via float: 0.0=begin, 1.0=end |
|
|
// linear interpolation via float: 0.0=begin, 1.0=end |
|
|
template <typename X> |
|
|
template <typename X> |
|
|
[[nodiscard]] constexpr decltype(X{} * float{} + X{} * float{}) |
|
|
|
|
|
Lerp(const X& begin, const X& end, const float t) { |
|
|
|
|
|
|
|
|
[[nodiscard]] constexpr decltype(X{} * float{} + X{} * float{}) Lerp(const X& begin, const X& end, |
|
|
|
|
|
const float t) { |
|
|
return begin * (1.f - t) + end * t; |
|
|
return begin * (1.f - t) + end * t; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|