diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2018-08-21 17:40:38 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2018-08-21 17:40:38 +0200 |
commit | 2877f4eda3d1b0c7431039e3142ecf1a282a34b1 (patch) | |
tree | 58ad35e27ab2a3b8955f5adbf28f296670681ffc /external/include/glm/detail | |
parent | Smooth sun movement (diff) | |
download | AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar.gz AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar.bz2 AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar.lz AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar.xz AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.tar.zst AltCraft-2877f4eda3d1b0c7431039e3142ecf1a282a34b1.zip |
Diffstat (limited to '')
67 files changed, 7843 insertions, 9740 deletions
diff --git a/external/include/glm/detail/_features.hpp b/external/include/glm/detail/_features.hpp index 97dd633..cee1272 100644 --- a/external/include/glm/detail/_features.hpp +++ b/external/include/glm/detail/_features.hpp @@ -26,7 +26,7 @@ // Variadic templates - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf -// +// // Extending variadic template template parameters - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf @@ -34,7 +34,7 @@ // Initializer lists - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm -// #define GLM_CXX11_STATIC_ASSERT +// #define GLM_CXX11_STATIC_ASSERT // Static assertions - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html @@ -62,15 +62,15 @@ // Declared type of an expression - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf -// +// // Right angle brackets - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html -// +// // Default template arguments for function templates DR226 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 -// +// // Solving the SFINAE problem for expressions DR339 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html @@ -78,7 +78,7 @@ // Template aliases N2258 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf -// +// // Extern templates N1987 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm @@ -90,19 +90,19 @@ // Strongly-typed enums N2347 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf -// +// // Forward declarations for enums N2764 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf -// +// // Generalized attributes N2761 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf -// +// // Generalized constant expressions N2235 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf -// +// // Alignment support N2341 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf @@ -110,7 +110,7 @@ // Delegating constructors N1986 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf -// +// // Inheriting constructors N2540 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm @@ -118,19 +118,19 @@ // Explicit conversion operators N2437 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf -// +// // New character types N2249 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html -// +// // Unicode string literals N2442 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm -// +// // Raw string literals N2442 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm -// +// // Universal character name literals N2170 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html @@ -138,7 +138,7 @@ // User-defined literals N2765 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf -// +// // Standard Layout Types N2342 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm @@ -147,11 +147,11 @@ // Defaulted and deleted functions N2346 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm -// +// // Extended friend declarations N1791 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf -// +// // Extending sizeof N2253 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html @@ -177,7 +177,7 @@ // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm -// +// // Minimal support for garbage collection and reachability-based leak detection N2670 No // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm @@ -185,75 +185,73 @@ // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html -// +// // Defining move special member functions N3053 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html -// +// // Sequence points N2239 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html -// +// // Atomic operations N2427 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html -// +// // Strong Compare and Exchange N2748 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html -// +// // Bidirectional Fences N2752 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm -// +// // Memory model N2429 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm -// +// // Data-dependency ordering: atomics and memory model N2664 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm -// +// // Propagating exceptions N2179 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html -// +// // Abandoning a process and at_quick_exit N2440 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm -// +// // Allow atomics use in signal handlers N2547 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm -// +// // Thread-local storage N2659 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm -// +// // Dynamic initialization and destruction with concurrency N2660 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm -// +// // __func__ predefined identifier N2340 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm -// +// // C99 preprocessor N1653 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm -// +// // long long N1811 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf -// +// // Extended integral types N1988 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf #if(GLM_COMPILER & GLM_COMPILER_GCC) -# if(GLM_COMPILER >= GLM_COMPILER_GCC43) -# define GLM_CXX11_STATIC_ASSERT -# endif +# define GLM_CXX11_STATIC_ASSERT #elif(GLM_COMPILER & GLM_COMPILER_CLANG) # if(__has_feature(cxx_exceptions)) diff --git a/external/include/glm/detail/_noise.hpp b/external/include/glm/detail/_noise.hpp index 89403f4..946148c 100644 --- a/external/include/glm/detail/_noise.hpp +++ b/external/include/glm/detail/_noise.hpp @@ -11,97 +11,77 @@ namespace glm{ namespace detail { - template <typename T> - GLM_FUNC_QUALIFIER T mod289(T const & x) + template<typename T> + GLM_FUNC_QUALIFIER T mod289(T const& x) { - return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0); + return x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0); } - template <typename T> - GLM_FUNC_QUALIFIER T permute(T const & x) + template<typename T> + GLM_FUNC_QUALIFIER T permute(T const& x) { return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) { return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) { return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) { return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x); } -/* - template <typename T, precision P, template<typename> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x) - { - return mod289(((x * T(34)) + T(1)) * x); - } -*/ - template <typename T> - GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r) - { - return T(1.79284291400159) - T(0.85373472095314) * r; - } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> taylorInvSqrt(tvec2<T, P> const & r) + + template<typename T> + GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) { return T(1.79284291400159) - T(0.85373472095314) * r; } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> taylorInvSqrt(tvec3<T, P> const & r) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) { return T(1.79284291400159) - T(0.85373472095314) * r; } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> taylorInvSqrt(tvec4<T, P> const & r) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) { return T(1.79284291400159) - T(0.85373472095314) * r; } -/* - template <typename T, precision P, template<typename> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) { return T(1.79284291400159) - T(0.85373472095314) * r; } -*/ - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> fade(tvec2<T, P> const & t) - { - return (t * t * t) * (t * (t * T(6) - T(15)) + T(10)); - } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> fade(tvec3<T, P> const & t) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) { return (t * t * t) * (t * (t * T(6) - T(15)) + T(10)); } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> fade(tvec4<T, P> const & t) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) { return (t * t * t) * (t * (t * T(6) - T(15)) + T(10)); } -/* - template <typename T, precision P, template <typename> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) { return (t * t * t) * (t * (t * T(6) - T(15)) + T(10)); } -*/ }//namespace detail }//namespace glm diff --git a/external/include/glm/detail/_swizzle.hpp b/external/include/glm/detail/_swizzle.hpp index 8e134d9..2609e79 100644 --- a/external/include/glm/detail/_swizzle.hpp +++ b/external/include/glm/detail/_swizzle.hpp @@ -7,7 +7,7 @@ namespace glm{ namespace detail { // Internal class for implementing swizzle operators - template <typename T, int N> + template<typename T, int N> struct _swizzle_base0 { protected: @@ -16,47 +16,46 @@ namespace detail // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() + // elem() char _buffer[1]; }; - template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned> + template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned> struct _swizzle_base1 : public _swizzle_base0<T, N> { }; - template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, bool Aligned> - struct _swizzle_base1<2, T, P, vecType, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2> + template<typename T, qualifier Q, int E0, int E1, bool Aligned> + struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2> { - GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1)); } + GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } }; - template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, bool Aligned> - struct _swizzle_base1<3, T, P, vecType, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3> + template<typename T, qualifier Q, int E0, int E1, int E2, bool Aligned> + struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3> { - GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2)); } + GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } }; - template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned> - struct _swizzle_base1<4, T, P, vecType, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4> - { - GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } + template<typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned> + struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4> + { + GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } }; // Internal class for implementing swizzle operators /* Template parameters: - ValueType = type of scalar values (e.g. float, double) - VecType = class the swizzle is applies to (e.g. tvec3<float>) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec + T = type of scalar values (e.g. float, double) + N = number of components in the vector (e.g. 3) + E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). + containing duplicate elements so that they cannot be used as r-values). */ - template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS> - struct _swizzle_base2 : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value> + template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS> + struct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value> { GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) { @@ -65,43 +64,43 @@ namespace detail return *this; } - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vecType<T, P> const& that) + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& that) { - struct op { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e = t; } + struct op { + GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e = t; } }; _apply_op(that, op()); return *this; } - GLM_FUNC_QUALIFIER void operator -= (vecType<T, P> const& that) + GLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that) { - struct op { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e -= t; } + struct op { + GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e -= t; } }; _apply_op(that, op()); } - GLM_FUNC_QUALIFIER void operator += (vecType<T, P> const& that) + GLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that) { - struct op { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e += t; } + struct op { + GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e += t; } }; _apply_op(that, op()); } - GLM_FUNC_QUALIFIER void operator *= (vecType<T, P> const& that) + GLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that) { - struct op { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e *= t; } + struct op { + GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e *= t; } }; _apply_op(that, op()); } - GLM_FUNC_QUALIFIER void operator /= (vecType<T, P> const& that) + GLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that) { - struct op { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e /= t; } + struct op { + GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e /= t; } }; _apply_op(that, op()); } @@ -118,8 +117,8 @@ namespace detail } protected: - template <typename U> - GLM_FUNC_QUALIFIER void _apply_op(vecType<T, P> const& that, U op) + template<typename U> + GLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, U op) { // Make a copy of the data in this == &that. // The copier should optimize out the copy in cases where the function is @@ -133,12 +132,12 @@ namespace detail }; // Specialization for swizzles containing duplicate elements. These cannot be modified. - template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3> - struct _swizzle_base2<N, T, P, vecType, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value> + template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3> + struct _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value> { struct Stub {}; - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; } + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } GLM_FUNC_QUALIFIER T operator[] (size_t i) const { @@ -147,40 +146,40 @@ namespace detail } }; - template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3> - struct _swizzle : public _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> + template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3> + struct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> { - typedef _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type; + typedef _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type; using base_type::operator=; - GLM_FUNC_QUALIFIER operator vecType<T, P> () const { return (*this)(); } + GLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)(); } }; // // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros // -#define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3> -#define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3> -#define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, vecType, E0, E1, E2, E3> -#define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, vecType, F0, F1, F2, F3> +#define GLM_SWIZZLE_TEMPLATE1 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3> +#define GLM_SWIZZLE_TEMPLATE2 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3> +#define GLM_SWIZZLE_TYPE1 _swizzle<N, T, Q, E0, E1, E2, E3> +#define GLM_SWIZZLE_TYPE2 _swizzle<N, T, Q, F0, F1, F2, F3> // // Wrapper for a binary operator (e.g. u.yy + v.zy) // -#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - _GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ +#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ + GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ { \ return a() OPERAND b(); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const vecType<T, P>& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& b) \ { \ return a() OPERAND b; \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const vecType<T, P>& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } @@ -188,14 +187,14 @@ namespace detail // // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) // -#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ +#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ { \ return a() OPERAND b; \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } @@ -203,9 +202,9 @@ namespace detail // // Macro for wrapping a function taking one argument (e.g. abs()) // -#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \ +#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ { \ return FUNCTION(a()); \ } @@ -213,66 +212,66 @@ namespace detail // // Macro for wrapping a function taking two vector arguments (e.g. dot()). // -#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ +#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ + GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ { \ return FUNCTION(a(), b()); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a(), b()); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ { \ return FUNCTION(a(), b); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a, b()); \ - } + } // // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). // -#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \ +#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ + GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ { \ return FUNCTION(a(), b, c); \ } \ - _GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a, b(), c); \ - } - -}//namespace detail + } + +}//namespace detail }//namespace glm namespace glm { namespace detail { - _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) + GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) + GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) + GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) + GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) + GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) + GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) } // @@ -285,513 +284,513 @@ namespace glm // to explicitly convert the swizzled type to the unswizzled type. // - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); + //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); + //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); + //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); + //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); + //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); + //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); + //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); + //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); + //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); } -#define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \ - struct { detail::_swizzle<2, T, P, V, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2, T, P, V, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2, T, P, V, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2, T, P, V, 1,1,-1,-2> E1 ## E1; }; - -#define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \ - struct { detail::_swizzle<3,T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3,T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; - -#define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \ - struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \ - struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; }; - -#define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \ - struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; }; - -#define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \ - struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \ - struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 0,3,-1,-2> E0 ## E3; }; \ - struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 1,3,-1,-2> E1 ## E3; }; \ - struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 2,3,-1,-2> E2 ## E3; }; \ - struct { detail::_swizzle<2,T, P, V, 3,0,-1,-2> E3 ## E0; }; \ - struct { detail::_swizzle<2,T, P, V, 3,1,-1,-2> E3 ## E1; }; \ - struct { detail::_swizzle<2,T, P, V, 3,2,-1,-2> E3 ## E2; }; \ - struct { detail::_swizzle<2,T, P, V, 3,3,-1,-2> E3 ## E3; }; - -#define _GLM_SWIZZLE4_3_MEMBERS(T, P, V, E0,E1,E2,E3) \ - struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, P, V, 3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, P, V, 3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, P, V, 3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, P, V, 3,3,3,-1> E3 ## E3 ## E3; }; - -#define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \ - struct { detail::_swizzle<4, T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, P, V, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; +#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ + struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ + struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ + struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ + struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; + +#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ + struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; + +#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ + struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; + +#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ + struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; + +#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ + struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; + +#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ + struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; + +#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ + struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ + struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ + struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ + struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ + struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ + struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ + struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; + +#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ + struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ + struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ + struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ + struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ + struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; + +#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ + struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ + struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; diff --git a/external/include/glm/detail/_swizzle_func.hpp b/external/include/glm/detail/_swizzle_func.hpp index 4b37edb..d218337 100644 --- a/external/include/glm/detail/_swizzle_func.hpp +++ b/external/include/glm/detail/_swizzle_func.hpp @@ -3,694 +3,683 @@ #pragma once -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ - SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \ +#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ + vec<2, T, Q> A ## B() CONST \ + { \ + return vec<2, T, Q>(this->A, this->B); \ } -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ - SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \ +#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ + vec<3, T, Q> A ## B ## C() CONST \ + { \ + return vec<3, T, Q>(this->A, this->B, this->C); \ } -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ - SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \ +#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ + vec<4, T, Q> A ## B ## C ## D() CONST \ + { \ + return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ } -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ - template <typename TMPL_TYPE> \ - SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \ +#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ + template<typename T> \ + vec<L, T, Q> vec<L, T, Q>::A ## B() CONST \ + { \ + return vec<2, T, Q>(this->A, this->B); \ } -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ - template <typename TMPL_TYPE> \ - SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \ +#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ + template<typename T> \ + vec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST \ + { \ + return vec<3, T, Q>(this->A, this->B, this->C); \ } -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ - template <typename TMPL_TYPE> \ - SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \ - { \ - return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \ +#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ + template<typename T> \ + vec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST \ + { \ + return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ } #define GLM_MUTABLE -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4) +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) + +#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) + diff --git a/external/include/glm/detail/_vectorize.hpp b/external/include/glm/detail/_vectorize.hpp index a08ed34..2e577a8 100644 --- a/external/include/glm/detail/_vectorize.hpp +++ b/external/include/glm/detail/_vectorize.hpp @@ -11,120 +11,120 @@ namespace glm{ namespace detail { - template <typename R, typename T, precision P, template <typename, precision> class vecType> + template<length_t L, typename R, typename T, qualifier Q> struct functor1{}; - template <typename R, typename T, precision P> - struct functor1<R, T, P, tvec1> + template<typename R, typename T, qualifier Q> + struct functor1<1, R, T, Q> { - GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) { - return tvec1<R, P>(Func(v.x)); + return vec<1, R, Q>(Func(v.x)); } }; - template <typename R, typename T, precision P> - struct functor1<R, T, P, tvec2> + template<typename R, typename T, qualifier Q> + struct functor1<2, R, T, Q> { - GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) { - return tvec2<R, P>(Func(v.x), Func(v.y)); + return vec<2, R, Q>(Func(v.x), Func(v.y)); } }; - template <typename R, typename T, precision P> - struct functor1<R, T, P, tvec3> + template<typename R, typename T, qualifier Q> + struct functor1<3, R, T, Q> { - GLM_FUNC_QUALIFIER static tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) { - return tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z)); + return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); } }; - template <typename R, typename T, precision P> - struct functor1<R, T, P, tvec4> + template<typename R, typename T, qualifier Q> + struct functor1<4, R, T, Q> { - GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) { - return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); + return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); } }; - template <typename T, precision P, template <typename, precision> class vecType> + template<length_t L, typename T, qualifier Q> struct functor2{}; - template <typename T, precision P> - struct functor2<T, P, tvec1> + template<typename T, qualifier Q> + struct functor2<1, T, Q> { - GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, tvec1<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) { - return tvec1<T, P>(Func(a.x, b.x)); + return vec<1, T, Q>(Func(a.x, b.x)); } }; - template <typename T, precision P> - struct functor2<T, P, tvec2> + template<typename T, qualifier Q> + struct functor2<2, T, Q> { - GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) { - return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y)); + return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); } }; - template <typename T, precision P> - struct functor2<T, P, tvec3> + template<typename T, qualifier Q> + struct functor2<3, T, Q> { - GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, tvec3<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) { - return tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); + return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); } }; - template <typename T, precision P> - struct functor2<T, P, tvec4> + template<typename T, qualifier Q> + struct functor2<4, T, Q> { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); + return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); } }; - template <typename T, precision P, template <typename, precision> class vecType> + template<length_t L, typename T, qualifier Q> struct functor2_vec_sca{}; - template <typename T, precision P> - struct functor2_vec_sca<T, P, tvec1> + template<typename T, qualifier Q> + struct functor2_vec_sca<1, T, Q> { - GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, T b) + GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) { - return tvec1<T, P>(Func(a.x, b)); + return vec<1, T, Q>(Func(a.x, b)); } }; - template <typename T, precision P> - struct functor2_vec_sca<T, P, tvec2> + template<typename T, qualifier Q> + struct functor2_vec_sca<2, T, Q> { - GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, T b) + GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) { - return tvec2<T, P>(Func(a.x, b), Func(a.y, b)); + return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); } }; - template <typename T, precision P> - struct functor2_vec_sca<T, P, tvec3> + template<typename T, qualifier Q> + struct functor2_vec_sca<3, T, Q> { - GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, T b) + GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) { - return tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); + return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); } }; - template <typename T, precision P> - struct functor2_vec_sca<T, P, tvec4> + template<typename T, qualifier Q> + struct functor2_vec_sca<4, T, Q> { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) { - return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); + return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); } }; }//namespace detail diff --git a/external/include/glm/detail/compute_vector_relational.hpp b/external/include/glm/detail/compute_vector_relational.hpp new file mode 100644 index 0000000..e5610ef --- /dev/null +++ b/external/include/glm/detail/compute_vector_relational.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "setup.hpp" +#include <cstring> +#include <limits> + +namespace glm{ +namespace detail +{ + template <typename T, bool isFloat = std::numeric_limits<T>::is_iec559> + struct compute_equal + { + GLM_FUNC_QUALIFIER static bool call(T a, T b) + { + return a == b; + } + }; + + template <typename T> + struct compute_equal<T, true> + { + GLM_FUNC_QUALIFIER static bool call(T a, T b) + { + return std::memcmp(&a, &b, sizeof(T)) == 0; + } + }; +}//namespace detail +}//namespace glm diff --git a/external/include/glm/detail/dummy.cpp b/external/include/glm/detail/dummy.cpp index a519a6d..01e4ba8 100644 --- a/external/include/glm/detail/dummy.cpp +++ b/external/include/glm/detail/dummy.cpp @@ -1,7 +1,7 @@ /// @ref core /// @file glm/core/dummy.cpp /// -/// GLM is a header only library. There is nothing to compile. +/// GLM is a header only library. There is nothing to compile. /// dummy.cpp exist only a wordaround for CMake file. /* @@ -44,9 +44,9 @@ struct light glm::vec3 computeNormal ( - glm::vec3 const & a, - glm::vec3 const & b, - glm::vec3 const & c + glm::vec3 const& a, + glm::vec3 const& b, + glm::vec3 const& c ) { return glm::normalize(glm::cross(c - a, b - a)); @@ -62,7 +62,7 @@ void glUniformMatrix4fv(GLuint, int, int, float*){} #include <glm/mat4x4.hpp> // glm::mat4 #include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective #include <glm/gtc/type_ptr.hpp> // glm::value_ptr -void func(GLuint LocationMVP, float Translate, glm::vec2 const & Rotate) +void func(GLuint LocationMVP, float Translate, glm::vec2 const& Rotate) { glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f); glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate)); @@ -132,10 +132,10 @@ struct intersection #include <glm/gtc/random.hpp>// glm::vecRand3 glm::vec3 lighting ( - intersection const & Intersection, - material const & Material, - light const & Light, - glm::vec3 const & View + intersection const& Intersection, + material const& Material, + light const& Light, + glm::vec3 const& View ) { glm::vec3 Color(0.0f); @@ -165,27 +165,6 @@ glm::vec3 lighting } */ -/* -template <typename T, glm::precision P, template<typename, glm::precision> class vecType> -T normalizeDotA(vecType<T, P> const & x, vecType<T, P> const & y) -{ - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); -} - -#define GLM_TEMPLATE_GENTYPE typename T, glm::precision P, template<typename, glm::precision> class - -template <GLM_TEMPLATE_GENTYPE vecType> -T normalizeDotB(vecType<T, P> const & x, vecType<T, P> const & y) -{ - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); -} - -template <typename vecType> -typename vecType::value_type normalizeDotC(vecType const & a, vecType const & b) -{ - return glm::dot(a, b) * glm::inversesqrt(glm::dot(a, a) * glm::dot(b, b)); -} -*/ int main() { /* diff --git a/external/include/glm/detail/func_common.hpp b/external/include/glm/detail/func_common.hpp deleted file mode 100644 index 871fed6..0000000 --- a/external/include/glm/detail/func_common.hpp +++ /dev/null @@ -1,427 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. - -#pragma once - -#include "setup.hpp" -#include "precision.hpp" -#include "type_int.hpp" -#include "_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType abs(genType x); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> abs(vecType<T, P> const & x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam genType Floating-point or signed integer; scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> sign(vecType<T, P> const & x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> floor(vecType<T, P> const & x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> trunc(vecType<T, P> const & x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> round(vecType<T, P> const & x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - /// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> roundEven(vecType<T, P> const & x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> ceil(vecType<T, P> const & x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType fract(genType x); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> fract(vecType<T, P> const & x); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType mod(genType x, genType y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, T y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType modf(genType x, genType & i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType min(genType x, genType y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, T y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType max(genType x, genType y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, T y); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal); - - /// If genTypeU is a floating scalar or vector: - /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of - /// x and y using the floating-point value a. - /// The value for a is not restricted to the range [0, 1]. - /// - /// If genTypeU is a boolean scalar or vector: - /// Selects which vector each returned component comes - /// from. For a component of <a> that is false, the - /// corresponding component of x is returned. For a - /// component of a that is true, the corresponding - /// component of y is returned. Components of x and y that - /// are not selected are allowed to be invalid floating point - /// values and will have no effect on the results. Thus, this - /// provides different functionality than - /// genType mix(genType x, genType y, genType(a)) - /// where a is a Boolean vector. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include <glm/glm.hpp> - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template <typename T, typename U, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a); - - template <typename T, typename U, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a); - - template <typename genTypeT, typename genTypeU> - GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType step(genType edge, genType x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, typename T, precision P> - GLM_FUNC_DECL vecType<T, P> step(T edge, vecType<T, P> const & x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, typename T, precision P> - GLM_FUNC_DECL vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); - /// return t * t * (3 - 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x); - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> isnan(vecType<T, P> const & x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> isinf(vecType<T, P> const & x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floating-point - /// value's bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - GLM_FUNC_DECL int floatBitsToInt(float const & v); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_DECL vecType<int, P> floatBitsToInt(vecType<float, P> const & v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - GLM_FUNC_DECL uint floatBitsToUint(float const & v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_DECL vecType<uint, P> floatBitsToUint(vecType<float, P> const & v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - GLM_FUNC_DECL float intBitsToFloat(int const & v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_DECL vecType<float, P> intBitsToFloat(vecType<int, P> const & v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - GLM_FUNC_DECL float uintBitsToFloat(uint const & v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_DECL vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType> - GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType, typename genIType> - GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>; - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> - template <typename genType, typename genIType> - GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp); - - /// @} -}//namespace glm - -#include "func_common.inl" - diff --git a/external/include/glm/detail/func_common.inl b/external/include/glm/detail/func_common.inl index 327b058..8b2d0b0 100644 --- a/external/include/glm/detail/func_common.inl +++ b/external/include/glm/detail/func_common.inl @@ -1,7 +1,7 @@ /// @ref core /// @file glm/detail/func_common.inl -#include "func_vector_relational.hpp" +#include "../vector_relational.hpp" #include "type_vec2.hpp" #include "type_vec3.hpp" #include "type_vec4.hpp" @@ -11,24 +11,24 @@ namespace glm { // min - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType min(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'min' only accept floating-point or integer inputs"); - return x < y ? x : y; + return (y < x) ? y : x; } // max - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType max(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'max' only accept floating-point or integer inputs"); - return x > y ? x : y; + return (x < y) ? y : x; } // abs - template <> + template<> GLM_FUNC_QUALIFIER int32 abs(int32 x) { int32 const y = x >> 31; @@ -39,7 +39,7 @@ namespace glm # if GLM_HAS_CXX11_STL using ::std::round; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType round(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs"); @@ -52,7 +52,7 @@ namespace glm # if GLM_HAS_CXX11_STL using ::std::trunc; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType trunc(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs"); @@ -66,11 +66,11 @@ namespace glm namespace glm{ namespace detail { - template <typename genFIType, bool /*signed*/> + template<typename genFIType, bool /*signed*/> struct compute_abs {}; - template <typename genFIType> + template<typename genFIType> struct compute_abs<genFIType, true> { GLM_FUNC_QUALIFIER static genFIType call(genFIType x) @@ -85,7 +85,7 @@ namespace detail }; #if GLM_COMPILER & GLM_COMPILER_CUDA - template <> + template<> struct compute_abs<float, true> { GLM_FUNC_QUALIFIER static float call(float x) @@ -95,7 +95,7 @@ namespace detail }; #endif - template <typename genFIType> + template<typename genFIType> struct compute_abs<genFIType, false> { GLM_FUNC_QUALIFIER static genFIType call(genFIType x) @@ -107,62 +107,62 @@ namespace detail } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_abs_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(abs, x); + return detail::functor1<L, T, T, Q>::call(abs, x); } }; - template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, typename U, qualifier Q, bool Aligned> struct compute_mix_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a) { GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x)); + return vec<L, T, Q>(vec<L, U, Q>(x) + a * vec<L, U, Q>(y - x)); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> - struct compute_mix_vector<T, bool, P, vecType, Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> + struct compute_mix_vector<L, T, bool, Q, Aligned> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<bool, P> const & a) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a) { - vecType<T, P> Result(uninitialize); + vec<L, T, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = a[i] ? y[i] : x[i]; return Result; } }; - template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, typename U, qualifier Q, bool Aligned> struct compute_mix_scalar { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, U const & a) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a) { GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x)); + return vec<L, T, Q>(vec<L, U, Q>(x) + a * vec<L, U, Q>(y - x)); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> - struct compute_mix_scalar<T, bool, P, vecType, Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> + struct compute_mix_scalar<L, T, bool, Q, Aligned> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, bool const & a) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a) { return a ? y : x; } }; - template <typename T, typename U> + template<typename T, typename U> struct compute_mix { - GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, U const & a) + GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) { GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); @@ -170,201 +170,201 @@ namespace detail } }; - template <typename T> + template<typename T> struct compute_mix<T, bool> { - GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, bool const & a) + GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) { return a ? y : x; } }; - template <typename T, precision P, template <typename, precision> class vecType, bool isFloat, bool Aligned> + template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned> struct compute_sign { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return vecType<T, P>(glm::lessThan(vecType<T, P>(0), x)) - vecType<T, P>(glm::lessThan(x, vecType<T, P>(0))); + return vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0))); } }; # if GLM_ARCH == GLM_ARCH_X86 - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> - struct compute_sign<T, P, vecType, false, Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> + struct compute_sign<L, T, Q, false, Aligned> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { T const Shift(static_cast<T>(sizeof(T) * 8 - 1)); - vecType<T, P> const y(vecType<typename make_unsigned<T>::type, P>(-x) >> typename make_unsigned<T>::type(Shift)); + vec<L, T, Q> const y(vec<L, typename make_unsigned<T>::type, Q>(-x) >> typename make_unsigned<T>::type(Shift)); return (x >> Shift) | y; } }; # endif - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_floor { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(std::floor, x); + return detail::functor1<L, T, T, Q>::call(std::floor, x); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_ceil { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(std::ceil, x); + return detail::functor1<L, T, T, Q>::call(std::ceil, x); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_fract { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { return x - floor(x); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_trunc { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(trunc, x); + return detail::functor1<L, T, T, Q>::call(trunc, x); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_round { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(round, x); + return detail::functor1<L, T, T, Q>::call(round, x); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_mod { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs."); return a - b * floor(a / b); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_min_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { - return detail::functor2<T, P, vecType>::call(min, x, y); + return detail::functor2<L, T, Q>::call(min, x, y); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_max_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { - return detail::functor2<T, P, vecType>::call(max, x, y); + return detail::functor2<L, T, Q>::call(max, x, y); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_clamp_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal) { return min(max(x, minVal), maxVal); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_step_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge, vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge, vec<L, T, Q> const& x) { - return mix(vecType<T, P>(1), vecType<T, P>(0), glm::lessThan(x, edge)); + return mix(vec<L, T, Q>(1), vec<L, T, Q>(0), glm::lessThan(x, edge)); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_smoothstep_vector { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'step' only accept floating-point inputs"); - vecType<T, P> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1))); + vec<L, T, Q> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1))); return tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp); } }; }//namespace detail - template <typename genFIType> + template<typename genFIType> GLM_FUNC_QUALIFIER genFIType abs(genFIType x) { return detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> abs(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> abs(vec<L, T, Q> const& x) { - return detail::compute_abs_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_abs_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x); } // sign // fast and works for any type - template <typename genFIType> + template<typename genFIType> GLM_FUNC_QUALIFIER genFIType sign(genFIType x) { GLM_STATIC_ASSERT( std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), "'sign' only accept signed inputs"); - - return detail::compute_sign<genFIType, defaultp, tvec1, std::numeric_limits<genFIType>::is_iec559, highp>::call(tvec1<genFIType>(x)).x; + + return detail::compute_sign<1, genFIType, defaultp, std::numeric_limits<genFIType>::is_iec559, highp>::call(vec<1, genFIType>(x)).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> sign(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT( std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer), "'sign' only accept signed inputs"); - return detail::compute_sign<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x); + return detail::compute_sign<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x); } // floor using ::std::floor; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> floor(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> floor(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'floor' only accept floating-point inputs."); - return detail::compute_floor<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_floor<L, T, Q, detail::is_aligned<Q>::value>::call(x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> trunc(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> trunc(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'trunc' only accept floating-point inputs"); - return detail::compute_trunc<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_trunc<L, T, Q, detail::is_aligned<Q>::value>::call(x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> round(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> round(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'round' only accept floating-point inputs"); - return detail::compute_round<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_round<L, T, Q, detail::is_aligned<Q>::value>::call(x); } /* // roundEven - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType roundEven(genType const& x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs"); @@ -374,11 +374,11 @@ namespace detail */ // roundEven - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType roundEven(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs"); - + int Integer = static_cast<int>(x); genType IntegerPart = static_cast<genType>(Integer); genType FractionalPart = fract(x); @@ -391,7 +391,7 @@ namespace detail { return IntegerPart; } - else if(x <= static_cast<genType>(0)) // Work around... + else if(x <= static_cast<genType>(0)) // Work around... { return IntegerPart - static_cast<genType>(1); } @@ -405,97 +405,97 @@ namespace detail //} } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> roundEven(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> roundEven(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'roundEven' only accept floating-point inputs"); - return detail::functor1<T, T, P, vecType>::call(roundEven, x); + return detail::functor1<L, T, T, Q>::call(roundEven, x); } // ceil using ::std::ceil; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> ceil(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> ceil(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ceil' only accept floating-point inputs"); - return detail::compute_ceil<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_ceil<L, T, Q, detail::is_aligned<Q>::value>::call(x); } // fract - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType fract(genType x) { - return fract(tvec1<genType>(x)).x; + return fract(vec<1, genType>(x)).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> fract(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> fract(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fract' only accept floating-point inputs"); - return detail::compute_fract<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_fract<L, T, Q, detail::is_aligned<Q>::value>::call(x); } // mod - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType mod(genType x, genType y) { # if GLM_COMPILER & GLM_COMPILER_CUDA // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 - tvec1<genType, defaultp> Result(mod(tvec1<genType, defaultp>(x), y)); + vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); return Result.x; # else - return mod(tvec1<genType, defaultp>(x), y).x; + return mod(vec<1, genType, defaultp>(x), y).x; # endif } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, T y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, T y) { - return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(y)); + return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(y)); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { - return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, y); + return detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, y); } // modf - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'modf' only accept floating-point inputs"); return std::modf(x, &i); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> modf(tvec1<T, P> const & x, tvec1<T, P> & i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) { - return tvec1<T, P>( + return vec<1, T, Q>( modf(x.x, i.x)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> modf(tvec2<T, P> const & x, tvec2<T, P> & i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) { - return tvec2<T, P>( + return vec<2, T, Q>( modf(x.x, i.x), modf(x.y, i.y)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> modf(tvec3<T, P> const & x, tvec3<T, P> & i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) { - return tvec3<T, P>( + return vec<3, T, Q>( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> modf(tvec4<T, P> const & x, tvec4<T, P> & i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) { - return tvec4<T, P>( + return vec<4, T, Q>( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z), @@ -511,94 +511,94 @@ namespace detail //CHAR_BIT - 1))); // min - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, T b) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> min(vec<L, T, Q> const& a, T b) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'min' only accept floating-point inputs for the interpolator a"); - return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b)); + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'min' only accept floating-point or integer inputs"); + return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b)); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, vecType<T, P> const & b) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b) { - return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b); + return detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b); } // max - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, T b) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> max(vec<L, T, Q> const& a, T b) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'max' only accept floating-point inputs for the interpolator a"); - return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b)); + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'max' only accept floating-point or integer inputs"); + return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b)); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, vecType<T, P> const & b) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> max(vec<L, T, Q> const& a, vec<L, T, Q> const& b) { - return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b); + return detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b); } // clamp - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType clamp(genType x, genType minVal, genType maxVal) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs"); return min(max(x, minVal), maxVal); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(minVal), vecType<T, P>(maxVal)); + return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(minVal), vec<L, T, Q>(maxVal)); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, minVal, maxVal); + return detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, minVal, maxVal); } - template <typename genTypeT, typename genTypeU> + template<typename genTypeT, typename genTypeU> GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) { return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a); } - template <typename T, typename U, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a) + template<length_t L, typename T, typename U, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a) { - return detail::compute_mix_scalar<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a); + return detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a); } - - template <typename T, typename U, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a) + + template<length_t L, typename T, typename U, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a) { - return detail::compute_mix_vector<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a); + return detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a); } // step - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType step(genType edge, genType x) { - return mix(static_cast<genType>(1), static_cast<genType>(0), glm::lessThan(x, edge)); + return mix(static_cast<genType>(1), static_cast<genType>(0), x < edge); } - template <template <typename, precision> class vecType, typename T, precision P> - GLM_FUNC_QUALIFIER vecType<T, P> step(T edge, vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> step(T edge, vec<L, T, Q> const& x) { - return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge), x); + return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge), x); } - template <template <typename, precision> class vecType, typename T, precision P> - GLM_FUNC_QUALIFIER vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x) { - return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge, x); + return detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge, x); } // smoothstep - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); @@ -607,22 +607,22 @@ namespace detail return tmp * tmp * (genType(3) - genType(2) * tmp); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x) { - return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge0), vecType<T, P>(edge1), x); + return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge0), vec<L, T, Q>(edge1), x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x) { - return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge0, edge1, x); + return detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge0, edge1, x); } # if GLM_HAS_CXX11_STL using std::isnan; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER bool isnan(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isnan' only accept floating-point inputs"); @@ -640,25 +640,28 @@ namespace detail # elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L return _isnan(x) != 0; # elif GLM_COMPILER & GLM_COMPILER_CUDA - return isnan(x) != 0; + return ::isnan(x) != 0; # else return std::isnan(x); # endif } # endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> isnan(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> isnan(vec<L, T, Q> const& v) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs"); - return detail::functor1<bool, T, P, vecType>::call(isnan, x); + vec<L, bool, Q> Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = glm::isnan(v[l]); + return Result; } # if GLM_HAS_CXX11_STL using std::isinf; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER bool isinf(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isinf' only accept floating-point inputs"); @@ -679,168 +682,142 @@ namespace detail # endif # elif GLM_COMPILER & GLM_COMPILER_CUDA // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return isinf(double(x)) != 0; + return ::isinf(double(x)) != 0; # else return std::isinf(x); # endif } # endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> isinf(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> isinf(vec<L, T, Q> const& v) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs"); + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs"); - return detail::functor1<bool, T, P, vecType>::call(isinf, x); + vec<L, bool, Q> Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = glm::isinf(v[l]); + return Result; } - GLM_FUNC_QUALIFIER int floatBitsToInt(float const & v) + GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) { - return reinterpret_cast<int&>(const_cast<float&>(v)); - } + union + { + float in; + int out; + } u; - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_QUALIFIER vecType<int, P> floatBitsToInt(vecType<float, P> const & v) - { - return reinterpret_cast<vecType<int, P>&>(const_cast<vecType<float, P>&>(v)); - } + u.in = v; - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & v) - { - return reinterpret_cast<uint&>(const_cast<float&>(v)); + return u.out; } - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_QUALIFIER vecType<uint, P> floatBitsToUint(vecType<float, P> const & v) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v) { - return reinterpret_cast<vecType<uint, P>&>(const_cast<vecType<float, P>&>(v)); + return reinterpret_cast<vec<L, int, Q>&>(const_cast<vec<L, float, Q>&>(v)); } - GLM_FUNC_QUALIFIER float intBitsToFloat(int const & v) + GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) { - return reinterpret_cast<float&>(const_cast<int&>(v)); - } + union + { + float in; + uint out; + } u; - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_QUALIFIER vecType<float, P> intBitsToFloat(vecType<int, P> const & v) - { - return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<int, P>&>(v)); - } + u.in = v; - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & v) - { - return reinterpret_cast<float&>(const_cast<uint&>(v)); + return u.out; } - template <template <typename, precision> class vecType, precision P> - GLM_FUNC_QUALIFIER vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v) { - return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<uint, P>&>(v)); - } - - template <typename genType> - GLM_FUNC_QUALIFIER genType fma(genType const & a, genType const & b, genType const & c) - { - return a * b + c; + return reinterpret_cast<vec<L, uint, Q>&>(const_cast<vec<L, float, Q>&>(v)); } - template <typename genType> - GLM_FUNC_QUALIFIER genType frexp(genType x, int & exp) + GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) { - GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); + union + { + int in; + float out; + } u; - return std::frexp(x, &exp); - } + u.in = v; - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> frexp(tvec1<T, P> const & x, tvec1<int, P> & exp) - { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return tvec1<T, P>(std::frexp(x.x, &exp.x)); + return u.out; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> frexp(tvec2<T, P> const & x, tvec2<int, P> & exp) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return tvec2<T, P>( - frexp(x.x, exp.x), - frexp(x.y, exp.y)); + return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, int, Q>&>(v)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> frexp(tvec3<T, P> const & x, tvec3<int, P> & exp) + GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); + union + { + uint in; + float out; + } u; - return tvec3<T, P>( - frexp(x.x, exp.x), - frexp(x.y, exp.y), - frexp(x.z, exp.z)); + u.in = v; + + return u.out; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> frexp(tvec4<T, P> const & x, tvec4<int, P> & exp) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return tvec4<T, P>( - frexp(x.x, exp.x), - frexp(x.y, exp.y), - frexp(x.z, exp.z), - frexp(x.w, exp.w)); + return reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, uint, Q>&>(v)); } - template <typename genType> - GLM_FUNC_QUALIFIER genType ldexp(genType const & x, int const & exp) + template<typename genType> + GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) { - GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - - return std::ldexp(x, exp); + return a * b + c; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> ldexp(tvec1<T, P> const & x, tvec1<int, P> const & exp) + template<typename genType> + GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); + GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - return tvec1<T, P>( - ldexp(x.x, exp.x)); + return std::frexp(x, &exp); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> ldexp(tvec2<T, P> const & x, tvec2<int, P> const & exp) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - return tvec2<T, P>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y)); + vec<L, T, Q> Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = std::frexp(v[l], &exp[l]); + return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> ldexp(tvec3<T, P> const & x, tvec3<int, P> const & exp) + template<typename genType> + GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) { - GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); + GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - return tvec3<T, P>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y), - ldexp(x.z, exp.z)); + return std::ldexp(x, exp); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> ldexp(tvec4<T, P> const & x, tvec4<int, P> const & exp) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - return tvec4<T, P>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y), - ldexp(x.z, exp.z), - ldexp(x.w, exp.w)); + vec<L, T, Q> Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = std::ldexp(v[l], exp[l]); + return Result; } }//namespace glm diff --git a/external/include/glm/detail/func_common_simd.inl b/external/include/glm/detail/func_common_simd.inl index c76f180..a3482ff 100644 --- a/external/include/glm/detail/func_common_simd.inl +++ b/external/include/glm/detail/func_common_simd.inl @@ -10,191 +10,191 @@ namespace glm{ namespace detail { - template <precision P> - struct compute_abs_vector<float, P, tvec4, true> + template<qualifier Q> + struct compute_abs_vector<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_abs(v.data); return result; } }; - template <precision P> - struct compute_abs_vector<int, P, tvec4, true> + template<qualifier Q> + struct compute_abs_vector<4, int, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<int, P> call(tvec4<int, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) { - tvec4<int, P> result(uninitialize); + vec<4, int, Q> result; result.data = glm_ivec4_abs(v.data); return result; } }; - template <precision P> - struct compute_floor<float, P, tvec4, true> + template<qualifier Q> + struct compute_floor<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_floor(v.data); return result; } }; - template <precision P> - struct compute_ceil<float, P, tvec4, true> + template<qualifier Q> + struct compute_ceil<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_ceil(v.data); return result; } }; - template <precision P> - struct compute_fract<float, P, tvec4, true> + template<qualifier Q> + struct compute_fract<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_fract(v.data); return result; } }; - template <precision P> - struct compute_round<float, P, tvec4, true> + template<qualifier Q> + struct compute_round<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_round(v.data); return result; } }; - template <precision P> - struct compute_mod<float, P, tvec4, true> + template<qualifier Q> + struct compute_mod<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = glm_vec4_mod(x.data, y.data); return result; } }; - template <precision P> - struct compute_min_vector<float, P, tvec4, true> + template<qualifier Q> + struct compute_min_vector<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = _mm_min_ps(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_min_vector<int32, P, tvec4, true> + template<qualifier Q> + struct compute_min_vector<4, int32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, int32, Q> call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) { - tvec4<int32, P> result(uninitialize); + vec<4, int32, Q> result; result.data = _mm_min_epi32(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_min_vector<uint32, P, tvec4, true> + template<qualifier Q> + struct compute_min_vector<4, uint32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, int32, Q> call(vec<4, uint32, Q> const& v1, vec<4, uint32, Q> const& v2) { - tvec4<uint32, P> result(uninitialize); + vec<4, uint32, Q> result; result.data = _mm_min_epu32(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_max_vector<float, P, tvec4, true> + template<qualifier Q> + struct compute_max_vector<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = _mm_max_ps(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_max_vector<int32, P, tvec4, true> + template<qualifier Q> + struct compute_max_vector<4, int32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, int32, Q> call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) { - tvec4<int32, P> result(uninitialize); + vec<4, int32, Q> result; result.data = _mm_max_epi32(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_max_vector<uint32, P, tvec4, true> + template<qualifier Q> + struct compute_max_vector<4, uint32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2) + GLM_FUNC_QUALIFIER static vec<4, uint32, Q> call(vec<4, uint32, Q> const& v1, vec<4, uint32, Q> const& v2) { - tvec4<uint32, P> result(uninitialize); + vec<4, uint32, Q> result; result.data = _mm_max_epu32(v1.data, v2.data); return result; } }; - template <precision P> - struct compute_clamp_vector<float, P, tvec4, true> + template<qualifier Q> + struct compute_clamp_vector<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & minVal, tvec4<float, P> const & maxVal) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> result; result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); return result; } }; - template <precision P> - struct compute_clamp_vector<int32, P, tvec4, true> + template<qualifier Q> + struct compute_clamp_vector<4, int32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & x, tvec4<int32, P> const & minVal, tvec4<int32, P> const & maxVal) + GLM_FUNC_QUALIFIER static vec<4, int32, Q> call(vec<4, int32, Q> const& x, vec<4, int32, Q> const& minVal, vec<4, int32, Q> const& maxVal) { - tvec4<int32, P> result(uninitialize); + vec<4, int32, Q> result; result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); return result; } }; - template <precision P> - struct compute_clamp_vector<uint32, P, tvec4, true> + template<qualifier Q> + struct compute_clamp_vector<4, uint32, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & x, tvec4<uint32, P> const & minVal, tvec4<uint32, P> const & maxVal) + GLM_FUNC_QUALIFIER static vec<4, uint32, Q> call(vec<4, uint32, Q> const& x, vec<4, uint32, Q> const& minVal, vec<4, uint32, Q> const& maxVal) { - tvec4<uint32, P> result(uninitialize); + vec<4, uint32, Q> result; result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); return result; } }; - template <precision P> - struct compute_mix_vector<float, bool, P, tvec4, true> + template<qualifier Q> + struct compute_mix_vector<4, float, bool, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y, tvec4<bool, P> const & a) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) { - __m128i const Load = _mm_set_epi32(-(int)a.w, -(int)a.z, -(int)a.y, -(int)a.x); + __m128i const Load = _mm_set_epi32(-static_cast<int>(a.w), -static_cast<int>(a.z), -static_cast<int>(a.y), -static_cast<int>(a.x)); __m128 const Mask = _mm_castsi128_ps(Load); - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; # if 0 && GLM_ARCH & GLM_ARCH_AVX Result.data = _mm_blendv_ps(x.data, y.data, Mask); # else @@ -204,25 +204,25 @@ namespace detail } }; /* FIXME - template <precision P> - struct compute_step_vector<float, P, tvec4> + template<qualifier Q> + struct compute_step_vector<float, Q, tvec4> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge, tvec4<float, P> const& x) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) { - tvec4<float, P> result(uninitialize); + vec<4, float, Q> Result; result.data = glm_vec4_step(edge.data, x.data); return result; } }; */ - template <precision P> - struct compute_smoothstep_vector<float, P, tvec4, true> + template<qualifier Q> + struct compute_smoothstep_vector<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge0, tvec4<float, P> const& edge1, tvec4<float, P> const& x) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) { - tvec4<float, P> result(uninitialize); - result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); - return result; + vec<4, float, Q> Result; + Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); + return Result; } }; }//namespace detail diff --git a/external/include/glm/detail/func_exponential.hpp b/external/include/glm/detail/func_exponential.hpp deleted file mode 100644 index a83de0b..0000000 --- a/external/include/glm/detail/func_exponential.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. - -#pragma once - -#include "type_vec1.hpp" -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include <cmath> - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns 'base' raised to the power 'exponent'. - /// - /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision. - /// @param exponent Floating point value representing the 'exponent'. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> exp(vecType<T, P> const & v); - - /// Returns the natural logarithm of v, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if v <= 0. - /// - /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> log(vecType<T, P> const & v); - - /// Returns 2 raised to the v power. - /// - /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> exp2(vecType<T, P> const & v); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> log2(vecType<T, P> const & v); - - /// Returns the positive square root of v. - /// - /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - //template <typename genType> - //GLM_FUNC_DECL genType sqrt(genType const & x); - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> sqrt(vecType<T, P> const & v); - - /// Returns the reciprocal of the positive square root of v. - /// - /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> inversesqrt(vecType<T, P> const & v); - - /// @} -}//namespace glm - -#include "func_exponential.inl" diff --git a/external/include/glm/detail/func_exponential.inl b/external/include/glm/detail/func_exponential.inl index 227fe91..b962674 100644 --- a/external/include/glm/detail/func_exponential.inl +++ b/external/include/glm/detail/func_exponential.inl @@ -1,7 +1,7 @@ /// @ref core /// @file glm/detail/func_exponential.inl -#include "func_vector_relational.hpp" +#include "../vector_relational.hpp" #include "_vectorize.hpp" #include <limits> #include <cmath> @@ -13,50 +13,52 @@ namespace detail # if GLM_HAS_CXX11_STL using std::log2; # else - template <typename genType> + template<typename genType> genType log2(genType Value) { return std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019); } # endif - template <typename T, precision P, template <class, precision> class vecType, bool isFloat, bool Aligned> + template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned> struct compute_log2 { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & vec) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(log2, vec); + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'log2' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs."); + + return detail::functor1<L, T, T, Q>::call(log2, v); } }; - template <template <class, precision> class vecType, typename T, precision P, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_sqrt { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(std::sqrt, x); + return detail::functor1<L, T, T, Q>::call(std::sqrt, x); } }; - template <template <class, precision> class vecType, typename T, precision P, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_inversesqrt { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x) { return static_cast<T>(1) / sqrt(x); } }; - - template <template <class, precision> class vecType, bool Aligned> - struct compute_inversesqrt<vecType, float, lowp, Aligned> + + template<length_t L, bool Aligned> + struct compute_inversesqrt<L, float, lowp, Aligned> { - GLM_FUNC_QUALIFIER static vecType<float, lowp> call(vecType<float, lowp> const & x) + GLM_FUNC_QUALIFIER static vec<L, float, lowp> call(vec<L, float, lowp> const& x) { - vecType<float, lowp> tmp(x); - vecType<float, lowp> xhalf(tmp * 0.5f); - vecType<uint, lowp>* p = reinterpret_cast<vecType<uint, lowp>*>(const_cast<vecType<float, lowp>*>(&x)); - vecType<uint, lowp> i = vecType<uint, lowp>(0x5f375a86) - (*p >> vecType<uint, lowp>(1)); - vecType<float, lowp>* ptmp = reinterpret_cast<vecType<float, lowp>*>(&i); + vec<L, float, lowp> tmp(x); + vec<L, float, lowp> xhalf(tmp * 0.5f); + vec<L, uint, lowp>* p = reinterpret_cast<vec<L, uint, lowp>*>(const_cast<vec<L, float, lowp>*>(&x)); + vec<L, uint, lowp> i = vec<L, uint, lowp>(0x5f375a86) - (*p >> vec<L, uint, lowp>(1)); + vec<L, float, lowp>* ptmp = reinterpret_cast<vec<L, float, lowp>*>(&i); tmp = *ptmp; tmp = tmp * (1.5f - xhalf * tmp * tmp); return tmp; @@ -66,77 +68,81 @@ namespace detail // pow using std::pow; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent) { - return detail::functor2<T, P, vecType>::call(pow, base, exponent); + return detail::functor2<L, T, Q>::call(pow, base, exponent); } // exp using std::exp; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> exp(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> exp(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(exp, x); + return detail::functor1<L, T, T, Q>::call(exp, x); } // log using std::log; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> log(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(log, x); + return detail::functor1<L, T, T, Q>::call(log, x); } +# if GLM_HAS_CXX11_STL + using std::exp2; +# else //exp2, ln2 = 0.69314718055994530941723212145818f - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType exp2(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'exp2' only accept floating-point inputs"); return std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x); } +# endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> exp2(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> exp2(vec<L, T, Q> const& x) { - return detail::functor1<T, T, P, vecType>::call(exp2, x); + return detail::functor1<L, T, T, Q>::call(exp2, x); } // log2, ln2 = 0.69314718055994530941723212145818f - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType log2(genType x) { - return log2(tvec1<genType>(x)).x; + return log2(vec<1, genType>(x)).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> log2(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> log2(vec<L, T, Q> const& x) { - return detail::compute_log2<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x); + return detail::compute_log2<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x); } // sqrt using std::sqrt; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> sqrt(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> sqrt(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sqrt' only accept floating-point inputs"); - return detail::compute_sqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x); + return detail::compute_sqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x); } // inversesqrt - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType inversesqrt(genType x) { return static_cast<genType>(1) / sqrt(x); } - - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> inversesqrt(vecType<T, P> const & x) + + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> inversesqrt(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'inversesqrt' only accept floating-point inputs"); - return detail::compute_inversesqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x); + return detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x); } }//namespace glm diff --git a/external/include/glm/detail/func_exponential_simd.inl b/external/include/glm/detail/func_exponential_simd.inl index d7529ba..4b2ef45 100644 --- a/external/include/glm/detail/func_exponential_simd.inl +++ b/external/include/glm/detail/func_exponential_simd.inl @@ -8,25 +8,25 @@ namespace glm{ namespace detail { - template <precision P> - struct compute_sqrt<tvec4, float, P, true> + template<qualifier Q> + struct compute_sqrt<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); - result.data = _mm_sqrt_ps(v.data); - return result; + vec<4, float, Q> Result; + Result.data = _mm_sqrt_ps(v.data); + return Result; } }; - template <> - struct compute_sqrt<tvec4, float, aligned_lowp, true> + template<> + struct compute_sqrt<4, float, aligned_lowp, true> { - GLM_FUNC_QUALIFIER static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) { - tvec4<float, aligned_lowp> result(uninitialize); - result.data = glm_vec4_sqrt_lowp(v.data); - return result; + vec<4, float, aligned_lowp> Result; + Result.data = glm_vec4_sqrt_lowp(v.data); + return Result; } }; }//namespace detail diff --git a/external/include/glm/detail/func_geometric.hpp b/external/include/glm/detail/func_geometric.hpp deleted file mode 100644 index 2f39bf5..0000000 --- a/external/include/glm/detail/func_geometric.hpp +++ /dev/null @@ -1,113 +0,0 @@ -/// @ref core -/// @file glm/detail/func_geometric.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. - -#pragma once - -#include "type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL T length( - vecType<T, P> const & x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL T distance( - vecType<T, P> const & p0, - vecType<T, P> const & p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL T dot( - vecType<T, P> const & x, - vecType<T, P> const & y); - - /// Returns the cross product of x and y. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> cross( - tvec3<T, P> const & x, - tvec3<T, P> const & y); - - /// Returns a vector in the same direction as x but with length of 1. - /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> normalize( - vecType<T, P> const & x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> faceforward( - vecType<T, P> const & N, - vecType<T, P> const & I, - vecType<T, P> const & Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename genType> - GLM_FUNC_DECL genType reflect( - genType const & I, - genType const & N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> refract( - vecType<T, P> const & I, - vecType<T, P> const & N, - T eta); - - /// @} -}//namespace glm - -#include "func_geometric.inl" diff --git a/external/include/glm/detail/func_geometric.inl b/external/include/glm/detail/func_geometric.inl index 07137c3..67255d4 100644 --- a/external/include/glm/detail/func_geometric.inl +++ b/external/include/glm/detail/func_geometric.inl @@ -1,8 +1,8 @@ /// @ref core /// @file glm/detail/func_geometric.inl -#include "func_exponential.hpp" -#include "func_common.hpp" +#include "../exponential.hpp" +#include "../common.hpp" #include "type_vec2.hpp" #include "type_vec4.hpp" #include "type_float.hpp" @@ -10,84 +10,84 @@ namespace glm{ namespace detail { - template <template <typename, precision> class vecType, typename T, precision P, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_length { - GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & v) + GLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v) { return sqrt(dot(v, v)); } }; - template <template <typename, precision> class vecType, typename T, precision P, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_distance { - GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & p0, vecType<T, P> const & p1) + GLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1) { return length(p1 - p0); } }; - template <template <class, precision> class vecType, typename T, precision P, bool Aligned> + template<typename V, typename T, bool Aligned> struct compute_dot{}; - template <typename T, precision P, bool Aligned> - struct compute_dot<tvec1, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_dot<vec<1, T, Q>, T, Aligned> { - GLM_FUNC_QUALIFIER static T call(tvec1<T, P> const & a, tvec1<T, P> const & b) + GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) { return a.x * b.x; } }; - template <typename T, precision P, bool Aligned> - struct compute_dot<tvec2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_dot<vec<2, T, Q>, T, Aligned> { - GLM_FUNC_QUALIFIER static T call(tvec2<T, P> const & x, tvec2<T, P> const & y) + GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) { - tvec2<T, P> tmp(x * y); + vec<2, T, Q> tmp(a * b); return tmp.x + tmp.y; } }; - template <typename T, precision P, bool Aligned> - struct compute_dot<tvec3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_dot<vec<3, T, Q>, T, Aligned> { - GLM_FUNC_QUALIFIER static T call(tvec3<T, P> const & x, tvec3<T, P> const & y) + GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) { - tvec3<T, P> tmp(x * y); + vec<3, T, Q> tmp(a * b); return tmp.x + tmp.y + tmp.z; } }; - template <typename T, precision P, bool Aligned> - struct compute_dot<tvec4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_dot<vec<4, T, Q>, T, Aligned> { - GLM_FUNC_QUALIFIER static T call(tvec4<T, P> const & x, tvec4<T, P> const & y) + GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> tmp(x * y); + vec<4, T, Q> tmp(a * b); return (tmp.x + tmp.y) + (tmp.z + tmp.w); } }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_cross { - GLM_FUNC_QUALIFIER static tvec3<T, P> call(tvec3<T, P> const & x, tvec3<T, P> const & y) + GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs"); - return tvec3<T, P>( + return vec<3, T, Q>( x.y * y.z - y.y * x.z, x.z * y.x - y.z * x.x, x.x * y.y - y.x * x.y); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_normalize { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); @@ -95,10 +95,10 @@ namespace detail } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_faceforward { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); @@ -106,19 +106,19 @@ namespace detail } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_reflect { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N) { return I - N * dot(N, I) * static_cast<T>(2); } }; - template <typename T, precision P, template <typename, precision> class vecType, bool Aligned> + template<length_t L, typename T, qualifier Q, bool Aligned> struct compute_refract { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N, T eta) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) { T const dotValue(dot(N, I)); T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue)); @@ -128,7 +128,7 @@ namespace detail }//namespace detail // length - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType length(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' accepts only floating-point inputs"); @@ -136,97 +136,97 @@ namespace detail return abs(x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER T length(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER T length(vec<L, T, Q> const& v) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length' accepts only floating-point inputs"); - return detail::compute_length<vecType, T, P, detail::is_aligned<P>::value>::call(v); + return detail::compute_length<L, T, Q, detail::is_aligned<Q>::value>::call(v); } // distance - template <typename genType> - GLM_FUNC_QUALIFIER genType distance(genType const & p0, genType const & p1) + template<typename genType> + GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'distance' accepts only floating-point inputs"); return length(p1 - p0); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER T distance(vecType<T, P> const & p0, vecType<T, P> const & p1) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1) { - return detail::compute_distance<vecType, T, P, detail::is_aligned<P>::value>::call(p0, p1); + return detail::compute_distance<L, T, Q, detail::is_aligned<Q>::value>::call(p0, p1); } // dot - template <typename T> + template<typename T> GLM_FUNC_QUALIFIER T dot(T x, T y) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); return x * y; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER T dot(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot<vecType, T, P, detail::is_aligned<P>::value>::call(x, y); + return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y); } // cross - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> cross(tvec3<T, P> const & x, tvec3<T, P> const & y) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) { - return detail::compute_cross<T, P, detail::is_aligned<P>::value>::call(x, y); + return detail::compute_cross<T, Q, detail::is_aligned<Q>::value>::call(x, y); } // normalize - template <typename genType> - GLM_FUNC_QUALIFIER genType normalize(genType const & x) + template<typename genType> + GLM_FUNC_QUALIFIER genType normalize(genType const& x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'normalize' accepts only floating-point inputs"); return x < genType(0) ? genType(-1) : genType(1); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> normalize(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> normalize(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs"); - return detail::compute_normalize<T, P, vecType, detail::is_aligned<P>::value>::call(x); + return detail::compute_normalize<L, T, Q, detail::is_aligned<Q>::value>::call(x); } // faceforward - template <typename genType> - GLM_FUNC_QUALIFIER genType faceforward(genType const & N, genType const & I, genType const & Nref) + template<typename genType> + GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) { return dot(Nref, I) < static_cast<genType>(0) ? N : -N; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> faceforward(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> faceforward(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref) { - return detail::compute_faceforward<T, P, vecType, detail::is_aligned<P>::value>::call(N, I, Nref); + return detail::compute_faceforward<L, T, Q, detail::is_aligned<Q>::value>::call(N, I, Nref); } // reflect - template <typename genType> - GLM_FUNC_QUALIFIER genType reflect(genType const & I, genType const & N) + template<typename genType> + GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) { return I - N * dot(N, I) * genType(2); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> reflect(vecType<T, P> const & I, vecType<T, P> const & N) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> reflect(vec<L, T, Q> const& I, vec<L, T, Q> const& N) { - return detail::compute_reflect<T, P, vecType, detail::is_aligned<P>::value>::call(I, N); + return detail::compute_reflect<L, T, Q, detail::is_aligned<Q>::value>::call(I, N); } // refract - template <typename genType> - GLM_FUNC_QUALIFIER genType refract(genType const & I, genType const & N, genType eta) + template<typename genType> + GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'refract' accepts only floating-point inputs"); genType const dotValue(dot(N, I)); @@ -234,11 +234,11 @@ namespace detail return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0)); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> refract(vecType<T, P> const & I, vecType<T, P> const & N, T eta) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> refract(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'refract' accepts only floating-point inputs"); - return detail::compute_refract<T, P, vecType, detail::is_aligned<P>::value>::call(I, N, eta); + return detail::compute_refract<L, T, Q, detail::is_aligned<Q>::value>::call(I, N, eta); } }//namespace glm diff --git a/external/include/glm/detail/func_geometric_simd.inl b/external/include/glm/detail/func_geometric_simd.inl index f0d14a2..e6c8d85 100644 --- a/external/include/glm/detail/func_geometric_simd.inl +++ b/external/include/glm/detail/func_geometric_simd.inl @@ -8,89 +8,89 @@ namespace glm{ namespace detail { - template <precision P> - struct compute_length<tvec4, float, P, true> + template<qualifier Q> + struct compute_length<4, float, Q, true> { - GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) { return _mm_cvtss_f32(glm_vec4_length(v.data)); } }; - template <precision P> - struct compute_distance<tvec4, float, P, true> + template<qualifier Q> + struct compute_distance<4, float, Q, true> { - GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & p0, tvec4<float, P> const & p1) + GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) { return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); } }; - template <precision P> - struct compute_dot<tvec4, float, P, true> + template<qualifier Q> + struct compute_dot<vec<4, float, Q>, float, true> { - GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const& x, tvec4<float, P> const& y) + GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) { return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); } }; - template <precision P> - struct compute_cross<float, P, true> + template<qualifier Q> + struct compute_cross<float, Q, true> { - GLM_FUNC_QUALIFIER static tvec3<float, P> call(tvec3<float, P> const & a, tvec3<float, P> const & b) + GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) { __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); __m128 const xpd0 = glm_vec4_cross(set0, set1); - tvec4<float, P> result(uninitialize); - result.data = xpd0; - return tvec3<float, P>(result); + vec<4, float, Q> Result; + Result.data = xpd0; + return vec<3, float, Q>(Result); } }; - template <precision P> - struct compute_normalize<float, P, tvec4, true> + template<qualifier Q> + struct compute_normalize<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { - tvec4<float, P> result(uninitialize); - result.data = glm_vec4_normalize(v.data); - return result; + vec<4, float, Q> Result; + Result.data = glm_vec4_normalize(v.data); + return Result; } }; - template <precision P> - struct compute_faceforward<float, P, tvec4, true> + template<qualifier Q> + struct compute_faceforward<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& N, tvec4<float, P> const& I, tvec4<float, P> const& Nref) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) { - tvec4<float, P> result(uninitialize); - result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); - return result; + vec<4, float, Q> Result; + Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); + return Result; } }; - template <precision P> - struct compute_reflect<float, P, tvec4, true> + template<qualifier Q> + struct compute_reflect<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) { - tvec4<float, P> result(uninitialize); - result.data = glm_vec4_reflect(I.data, N.data); - return result; + vec<4, float, Q> Result; + Result.data = glm_vec4_reflect(I.data, N.data); + return Result; } }; - template <precision P> - struct compute_refract<float, P, tvec4, true> + template<qualifier Q> + struct compute_refract<4, float, Q, true> { - GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N, float eta) + GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) { - tvec4<float, P> result(uninitialize); - result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); - return result; + vec<4, float, Q> Result; + Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); + return Result; } }; }//namespace detail diff --git a/external/include/glm/detail/func_integer.hpp b/external/include/glm/detail/func_integer.hpp deleted file mode 100644 index bd195a9..0000000 --- a/external/include/glm/detail/func_integer.hpp +++ /dev/null @@ -1,203 +0,0 @@ -/// @ref core -/// @file glm/detail/func_integer.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. - -#pragma once - -#include "setup.hpp" -#include "precision.hpp" -#include "func_common.hpp" -#include "func_vector_relational.hpp" - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<uint, P> uaddCarry( - vecType<uint, P> const & x, - vecType<uint, P> const & y, - vecType<uint, P> & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<uint, P> usubBorrow( - vecType<uint, P> const & x, - vecType<uint, P> const & y, - vecType<uint, P> & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL void umulExtended( - vecType<uint, P> const & x, - vecType<uint, P> const & y, - vecType<uint, P> & msb, - vecType<uint, P> & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam genIType Signed integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL void imulExtended( - vecType<int, P> const & x, - vecType<int, P> const & y, - vecType<int, P> & msb, - vecType<int, P> & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base - 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> bitfieldExtract( - vecType<T, P> const & Value, - int Offset, - int Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits - 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> bitfieldInsert( - vecType<T, P> const & Base, - vecType<T, P> const & Insert, - int Offset, - int Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> bitfieldReverse(vecType<T, P> const & v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename genType> - GLM_FUNC_DECL int bitCount(genType v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<int, P> bitCount(vecType<T, P> const & v); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename genIUType> - GLM_FUNC_DECL int findLSB(genIUType x); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<int, P> findLSB(vecType<T, P> const & v); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename genIUType> - GLM_FUNC_DECL int findMSB(genIUType x); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<int, P> findMSB(vecType<T, P> const & v); - - /// @} -}//namespace glm - -#include "func_integer.inl" diff --git a/external/include/glm/detail/func_integer.inl b/external/include/glm/detail/func_integer.inl index 25910eb..8f9ed43 100644 --- a/external/include/glm/detail/func_integer.inl +++ b/external/include/glm/detail/func_integer.inl @@ -1,6 +1,7 @@ /// @ref core /// @file glm/detail/func_integer.inl +#include "../ext/vec1.hpp" #include "type_vec2.hpp" #include "type_vec3.hpp" #include "type_vec4.hpp" @@ -24,49 +25,49 @@ namespace glm{ namespace detail { - template <typename T> + template<typename T> GLM_FUNC_QUALIFIER T mask(T Bits) { - return Bits >= sizeof(T) * 8 ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1); + return Bits >= static_cast<T>(sizeof(T) * 8) ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1); } - template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC> + template<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC> struct compute_bitfieldReverseStep { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T) { return v; } }; - template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned> - struct compute_bitfieldReverseStep<T, P, vecType, Aligned, true> + template<length_t L, typename T, qualifier Q, bool Aligned> + struct compute_bitfieldReverseStep<L, T, Q, Aligned, true> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift) { return (v & Mask) << Shift | (v & (~Mask)) >> Shift; } }; - template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC> + template<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC> struct compute_bitfieldBitCountStep { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T) { return v; } }; - template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned> - struct compute_bitfieldBitCountStep<T, P, vecType, Aligned, true> + template<length_t L, typename T, qualifier Q, bool Aligned> + struct compute_bitfieldBitCountStep<L, T, Q, Aligned, true> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift) { return (v & Mask) + ((v >> Shift) & Mask); } }; - template <typename genIUType, size_t Bits> + template<typename genIUType, size_t Bits> struct compute_findLSB { GLM_FUNC_QUALIFIER static int call(genIUType Value) @@ -79,7 +80,7 @@ namespace detail }; # if GLM_HAS_BITSCAN_WINDOWS - template <typename genIUType> + template<typename genIUType> struct compute_findLSB<genIUType, 32> { GLM_FUNC_QUALIFIER static int call(genIUType Value) @@ -91,7 +92,7 @@ namespace detail }; # if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template <typename genIUType> + template<typename genIUType> struct compute_findLSB<genIUType, 64> { GLM_FUNC_QUALIFIER static int call(genIUType Value) @@ -104,42 +105,42 @@ namespace detail # endif # endif//GLM_HAS_BITSCAN_WINDOWS - template <typename T, glm::precision P, template <class, glm::precision> class vecType, bool EXEC = true> + template<length_t L, typename T, qualifier Q, bool EXEC = true> struct compute_findMSB_step_vec { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T Shift) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T Shift) { return x | (x >> Shift); } }; - template <typename T, glm::precision P, template <typename, glm::precision> class vecType> - struct compute_findMSB_step_vec<T, P, vecType, false> + template<length_t L, typename T, qualifier Q> + struct compute_findMSB_step_vec<L, T, Q, false> { - GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T) + GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T) { return x; } }; - template <typename T, glm::precision P, template <typename, glm::precision> class vecType, int> + template<length_t L, typename T, qualifier Q, int> struct compute_findMSB_vec { - GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & vec) + GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& v) { - vecType<T, P> x(vec); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 1)); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 2)); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 4)); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8)); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16)); - x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32)); - return vecType<int, P>(sizeof(T) * 8 - 1) - glm::bitCount(~x); + vec<L, T, Q> x(v); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 1)); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 2)); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 4)); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8)); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16)); + x = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32)); + return vec<L, int, Q>(sizeof(T) * 8 - 1) - glm::bitCount(~x); } }; # if GLM_HAS_BITSCAN_WINDOWS - template <typename genIUType> + template<typename genIUType> GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { unsigned long Result(0); @@ -147,17 +148,17 @@ namespace detail return IsNotNull ? int(Result) : -1; } - template <typename T, glm::precision P, template<typename, glm::precision> class vecType> - struct compute_findMSB_vec<T, P, vecType, 32> + template<length_t L, typename T, qualifier Q> + struct compute_findMSB_vec<L, T, Q, 32> { - GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<int, T, P, vecType>::call(compute_findMSB_32, x); + return detail::functor1<L, int, T, Q>::call(compute_findMSB_32, x); } }; # if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template <typename genIUType> + template<typename genIUType> GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) { unsigned long Result(0); @@ -165,12 +166,12 @@ namespace detail return IsNotNull ? int(Result) : -1; } - template <typename T, glm::precision P, template <class, glm::precision> class vecType> - struct compute_findMSB_vec<T, P, vecType, 64> + template<length_t L, typename T, qualifier Q> + struct compute_findMSB_vec<L, T, Q, 64> { - GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x) + GLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x) { - return detail::functor1<int, T, P, vecType>::call(compute_findMSB_64, x); + return detail::functor1<L, int, T, Q>::call(compute_findMSB_64, x); } }; # endif @@ -178,7 +179,7 @@ namespace detail }//namespace detail // uaddCarry - GLM_FUNC_QUALIFIER uint uaddCarry(uint const & x, uint const & y, uint & Carry) + GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) { uint64 const Value64(static_cast<uint64>(x) + static_cast<uint64>(y)); uint64 const Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1)); @@ -186,17 +187,17 @@ namespace detail return static_cast<uint32>(Value64 % (Max32 + static_cast<uint64>(1))); } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<uint, P> uaddCarry(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Carry) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, uint, Q> uaddCarry(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Carry) { - vecType<uint64, P> Value64(vecType<uint64, P>(x) + vecType<uint64, P>(y)); - vecType<uint64, P> Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1)); - Carry = mix(vecType<uint32, P>(0), vecType<uint32, P>(1), greaterThan(Value64, Max32)); - return vecType<uint32,P>(Value64 % (Max32 + static_cast<uint64>(1))); + vec<L, uint64, Q> Value64(vec<L, uint64, Q>(x) + vec<L, uint64, Q>(y)); + vec<L, uint64, Q> Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1)); + Carry = mix(vec<L, uint32, Q>(0), vec<L, uint32, Q>(1), greaterThan(Value64, Max32)); + return vec<L, uint32, Q>(Value64 % (Max32 + static_cast<uint64>(1))); } // usubBorrow - GLM_FUNC_QUALIFIER uint usubBorrow(uint const & x, uint const & y, uint & Borrow) + GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) { GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch"); @@ -207,17 +208,17 @@ namespace detail return static_cast<uint32>((static_cast<int64>(1) << static_cast<int64>(32)) + (static_cast<int64>(y) - static_cast<int64>(x))); } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<uint, P> usubBorrow(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Borrow) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, uint, Q> usubBorrow(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Borrow) { - Borrow = mix(vecType<uint, P>(1), vecType<uint, P>(0), greaterThanEqual(x, y)); - vecType<uint, P> const YgeX(y - x); - vecType<uint, P> const XgeY(vecType<uint32, P>((static_cast<int64>(1) << static_cast<int64>(32)) + (vecType<int64, P>(y) - vecType<int64, P>(x)))); + Borrow = mix(vec<L, uint, Q>(1), vec<L, uint, Q>(0), greaterThanEqual(x, y)); + vec<L, uint, Q> const YgeX(y - x); + vec<L, uint, Q> const XgeY(vec<L, uint32, Q>((static_cast<int64>(1) << static_cast<int64>(32)) + (vec<L, int64, Q>(y) - vec<L, int64, Q>(x)))); return mix(XgeY, YgeX, greaterThanEqual(y, x)); } // umulExtended - GLM_FUNC_QUALIFIER void umulExtended(uint const & x, uint const & y, uint & msb, uint & lsb) + GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) { GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch"); @@ -226,18 +227,18 @@ namespace detail lsb = static_cast<uint>(Value64); } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER void umulExtended(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & msb, vecType<uint, P> & lsb) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER void umulExtended(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& msb, vec<L, uint, Q>& lsb) { GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch"); - vecType<uint64, P> Value64(vecType<uint64, P>(x) * vecType<uint64, P>(y)); - msb = vecType<uint32, P>(Value64 >> static_cast<uint64>(32)); - lsb = vecType<uint32, P>(Value64); + vec<L, uint64, Q> Value64(vec<L, uint64, Q>(x) * vec<L, uint64, Q>(y)); + msb = vec<L, uint32, Q>(Value64 >> static_cast<uint64>(32)); + lsb = vec<L, uint32, Q>(Value64); } // imulExtended - GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int & msb, int & lsb) + GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) { GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch"); @@ -246,25 +247,25 @@ namespace detail lsb = static_cast<int>(Value64); } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER void imulExtended(vecType<int, P> const & x, vecType<int, P> const & y, vecType<int, P> & msb, vecType<int, P> & lsb) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER void imulExtended(vec<L, int, Q> const& x, vec<L, int, Q> const& y, vec<L, int, Q>& msb, vec<L, int, Q>& lsb) { GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch"); - vecType<int64, P> Value64(vecType<int64, P>(x) * vecType<int64, P>(y)); - lsb = vecType<int32, P>(Value64 & static_cast<int64>(0xFFFFFFFF)); - msb = vecType<int32, P>((Value64 >> static_cast<int64>(32)) & static_cast<int64>(0xFFFFFFFF)); + vec<L, int64, Q> Value64(vec<L, int64, Q>(x) * vec<L, int64, Q>(y)); + lsb = vec<L, int32, Q>(Value64 & static_cast<int64>(0xFFFFFFFF)); + msb = vec<L, int32, Q>((Value64 >> static_cast<int64>(32)) & static_cast<int64>(0xFFFFFFFF)); } // bitfieldExtract - template <typename genIUType> + template<typename genIUType> GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) { - return bitfieldExtract(tvec1<genIUType>(Value), Offset, Bits).x; + return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> bitfieldExtract(vecType<T, P> const & Value, int Offset, int Bits) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldExtract(vec<L, T, Q> const& Value, int Offset, int Bits) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldExtract' only accept integer inputs"); @@ -272,14 +273,14 @@ namespace detail } // bitfieldInsert - template <typename genIUType> - GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const & Base, genIUType const & Insert, int Offset, int Bits) + template<typename genIUType> + GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) { - return bitfieldInsert(tvec1<genIUType>(Base), tvec1<genIUType>(Insert), Offset, Bits).x; + return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> bitfieldInsert(vecType<T, P> const & Base, vecType<T, P> const & Insert, int Offset, int Bits) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldInsert(vec<L, T, Q> const& Base, vec<L, T, Q> const& Insert, int Offset, int Bits) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldInsert' only accept integer values"); @@ -288,47 +289,56 @@ namespace detail } // bitfieldReverse - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType bitfieldReverse(genType x) { - return bitfieldReverse(glm::tvec1<genType, glm::defaultp>(x)).x; + return bitfieldReverse(glm::vec<1, genType, glm::defaultp>(x)).x; } - template <typename T, glm::precision P, template <typename, glm::precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> bitfieldReverse(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v) { - vecType<T, P> x(v); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, T(0x5555555555555555ull), static_cast<T>( 1)); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, T(0x3333333333333333ull), static_cast<T>( 2)); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, T(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4)); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, T(0x00FF00FF00FF00FFull), static_cast<T>( 8)); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, T(0x0000FFFF0000FFFFull), static_cast<T>(16)); - x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, T(0x00000000FFFFFFFFull), static_cast<T>(32)); + vec<L, T, Q> x(v); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1)); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2)); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4)); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8)); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16)); + x = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32)); return x; } // bitCount - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER int bitCount(genType x) { - return bitCount(glm::tvec1<genType, glm::defaultp>(x)).x; + return bitCount(glm::vec<1, genType, glm::defaultp>(x)).x; } - template <typename T, glm::precision P, template <typename, glm::precision> class vecType> - GLM_FUNC_QUALIFIER vecType<int, P> bitCount(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, int, Q> bitCount(vec<L, T, Q> const& v) { - vecType<typename detail::make_unsigned<T>::type, P> x(*reinterpret_cast<vecType<typename detail::make_unsigned<T>::type, P> const *>(&v)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16)); - x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32)); - return vecType<int, P>(x); +# if GLM_COMPILER & GLM_COMPILER_VC +# pragma warning(push) +# pragma warning(disable : 4310) //cast truncates constant value +# endif + + vec<L, typename detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<vec<L, typename detail::make_unsigned<T>::type, Q> const *>(&v)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16)); + x = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32)); + return vec<L, int, Q>(x); + +# if GLM_COMPILER & GLM_COMPILER_VC +# pragma warning(pop) +# endif } // findLSB - template <typename genIUType> + template<typename genIUType> GLM_FUNC_QUALIFIER int findLSB(genIUType Value) { GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values"); @@ -336,29 +346,29 @@ namespace detail return detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<int, P> findLSB(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, int, Q> findLSB(vec<L, T, Q> const& x) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findLSB' only accept integer values"); - return detail::functor1<int, T, P, vecType>::call(findLSB, x); + return detail::functor1<L, int, T, Q>::call(findLSB, x); } // findMSB - template <typename genIUType> - GLM_FUNC_QUALIFIER int findMSB(genIUType x) + template<typename genIUType> + GLM_FUNC_QUALIFIER int findMSB(genIUType v) { GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values"); - return findMSB(tvec1<genIUType>(x)).x; + return findMSB(vec<1, genIUType>(v)).x; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<int, P> findMSB(vecType<T, P> const & x) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, int, Q> findMSB(vec<L, T, Q> const& v) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findMSB' only accept integer values"); - return detail::compute_findMSB_vec<T, P, vecType, sizeof(T) * 8>::call(x); + return detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v); } }//namespace glm diff --git a/external/include/glm/detail/func_integer_simd.inl b/external/include/glm/detail/func_integer_simd.inl index 6175860..690671a 100644 --- a/external/include/glm/detail/func_integer_simd.inl +++ b/external/include/glm/detail/func_integer_simd.inl @@ -8,54 +8,54 @@ namespace glm{ namespace detail { - template <glm::precision P> - struct compute_bitfieldReverseStep<uint32, P, tvec4, true, true> + template<qualifier Q> + struct compute_bitfieldReverseStep<4, uint32, Q, true, true> { - GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift) + GLM_FUNC_QUALIFIER static vec<4, uint32, Q> call(vec<4, uint32, Q> const& v, uint32 Mask, uint32 Shift) { __m128i const set0 = v.data; - __m128i const set1 = _mm_set1_epi32(Mask); + __m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask)); __m128i const and1 = _mm_and_si128(set0, set1); __m128i const sft1 = _mm_slli_epi32(and1, Shift); __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); __m128i const and2 = _mm_and_si128(set0, set2); __m128i const sft2 = _mm_srai_epi32(and2, Shift); - + __m128i const or0 = _mm_or_si128(sft1, sft2); - + return or0; } }; - template <glm::precision P> - struct compute_bitfieldBitCountStep<uint32, P, tvec4, true, true> + template<qualifier Q> + struct compute_bitfieldBitCountStep<4, uint32, Q, true, true> { - GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift) + GLM_FUNC_QUALIFIER static vec<4, uint32, Q> call(vec<4, uint32, Q> const& v, uint32 Mask, uint32 Shift) { __m128i const set0 = v.data; - __m128i const set1 = _mm_set1_epi32(Mask); + __m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask)); __m128i const and0 = _mm_and_si128(set0, set1); __m128i const sft0 = _mm_slli_epi32(set0, Shift); __m128i const and1 = _mm_and_si128(sft0, set1); __m128i const add0 = _mm_add_epi32(and0, and1); - + return add0; } }; }//namespace detail # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <> + template<> GLM_FUNC_QUALIFIER int bitCount(uint32 x) { return _mm_popcnt_u32(x); } # if(GLM_MODEL == GLM_MODEL_64) - template <> + template<> GLM_FUNC_QUALIFIER int bitCount(uint64 x) { return static_cast<int>(_mm_popcnt_u64(x)); diff --git a/external/include/glm/detail/func_matrix.hpp b/external/include/glm/detail/func_matrix.hpp deleted file mode 100644 index 9be3449..0000000 --- a/external/include/glm/detail/func_matrix.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref core -/// @file glm/detail/func_matrix.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// For each of the following built-in matrix functions, there is both a -/// single-precision floating point version, where all arguments and return values -/// are single precision, and a double-precision floating version, where all -/// arguments and return values are double precision. Only the single-precision -/// floating point version is shown. - -#pragma once - -// Dependencies -#include "../detail/precision.hpp" -#include "../detail/setup.hpp" -#include "../detail/type_mat.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -namespace glm{ -namespace detail -{ - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec2, tvec2> - { - typedef tmat2x2<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec2, tvec3> - { - typedef tmat3x2<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec2, tvec4> - { - typedef tmat4x2<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec3, tvec2> - { - typedef tmat2x3<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec3, tvec3> - { - typedef tmat3x3<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec3, tvec4> - { - typedef tmat4x3<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec4, tvec2> - { - typedef tmat2x4<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec4, tvec3> - { - typedef tmat3x4<T, P> type; - }; - - template <typename T, precision P> - struct outerProduct_trait<T, P, tvec4, tvec4> - { - typedef tmat4x4<T, P> type; - }; - -}//namespace detail - - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_DECL matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> - template <typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB> - GLM_FUNC_DECL typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r); - - /// Returns the transposed matrix of x - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> -# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_DECL typename matType<T, P>::transpose_type transpose(matType<T, P> const & x); -# endif - - /// Return the determinant of a squared matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_DECL T determinant(matType<T, P> const & m); - - /// Return the inverse of a squared matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m); - - /// @} -}//namespace glm - -#include "func_matrix.inl" diff --git a/external/include/glm/detail/func_matrix.inl b/external/include/glm/detail/func_matrix.inl index 6d1746b..d823d76 100644 --- a/external/include/glm/detail/func_matrix.inl +++ b/external/include/glm/detail/func_matrix.inl @@ -7,213 +7,213 @@ namespace glm{ namespace detail { - template <template <typename, precision> class matType, typename T, precision P, bool Aligned> + template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> struct compute_matrixCompMult { - GLM_FUNC_QUALIFIER static matType<T, P> call(matType<T, P> const& x, matType<T, P> const& y) + GLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y) { - matType<T, P> result(uninitialize); - for(length_t i = 0; i < result.length(); ++i) - result[i] = x[i] * y[i]; - return result; + mat<C, R, T, Q> Result; + for(length_t i = 0; i < Result.length(); ++i) + Result[i] = x[i] * y[i]; + return Result; } }; - template <template <class, precision> class matType, typename T, precision P, bool Aligned> + template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> struct compute_transpose{}; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat2x2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<2, 2, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) { - tmat2x2<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - return result; + mat<2, 2, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat2x3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<2, 3, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat3x2<T, P> call(tmat2x3<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) { - tmat3x2<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - return result; + mat<3,2, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat2x4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<2, 4, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat4x2<T, P> call(tmat2x4<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) { - tmat4x2<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - return result; + mat<4, 2, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + Result[3][0] = m[0][3]; + Result[3][1] = m[1][3]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat3x2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<3, 2, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat2x3<T, P> call(tmat3x2<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) { - tmat2x3<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - return result; + mat<2, 3, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat3x3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<3, 3, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) { - tmat3x3<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - return result; + mat<3, 3, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + Result[2][2] = m[2][2]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat3x4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<3, 4, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat4x3<T, P> call(tmat3x4<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) { - tmat4x3<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - result[3][2] = m[2][3]; - return result; + mat<4, 3, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + Result[2][2] = m[2][2]; + Result[3][0] = m[0][3]; + Result[3][1] = m[1][3]; + Result[3][2] = m[2][3]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat4x2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<4, 2, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat2x4<T, P> call(tmat4x2<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) { - tmat2x4<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - return result; + mat<2, 4, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + Result[0][3] = m[3][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + Result[1][3] = m[3][1]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat4x3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<4, 3, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat3x4<T, P> call(tmat4x3<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) { - tmat3x4<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[2][3] = m[3][2]; - return result; + mat<3, 4, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + Result[0][3] = m[3][0]; + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + Result[1][3] = m[3][1]; + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + Result[2][2] = m[2][2]; + Result[2][3] = m[3][2]; + return Result; } }; - template <typename T, precision P, bool Aligned> - struct compute_transpose<tmat4x4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_transpose<4, 4, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const & m) + GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) { - tmat4x4<T, P> result(uninitialize); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[2][3] = m[3][2]; - - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - result[3][2] = m[2][3]; - result[3][3] = m[3][3]; - return result; + mat<4, 4, T, Q> Result; + Result[0][0] = m[0][0]; + Result[0][1] = m[1][0]; + Result[0][2] = m[2][0]; + Result[0][3] = m[3][0]; + + Result[1][0] = m[0][1]; + Result[1][1] = m[1][1]; + Result[1][2] = m[2][1]; + Result[1][3] = m[3][1]; + + Result[2][0] = m[0][2]; + Result[2][1] = m[1][2]; + Result[2][2] = m[2][2]; + Result[2][3] = m[3][2]; + + Result[3][0] = m[0][3]; + Result[3][1] = m[1][3]; + Result[3][2] = m[2][3]; + Result[3][3] = m[3][3]; + return Result; } }; - template <template <typename, precision> class matType, typename T, precision P, bool Aligned> + template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> struct compute_determinant{}; - template <typename T, precision P, bool Aligned> - struct compute_determinant<tmat2x2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_determinant<2, 2, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static T call(tmat2x2<T, P> const & m) + GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) { return m[0][0] * m[1][1] - m[1][0] * m[0][1]; } }; - template <typename T, precision P, bool Aligned> - struct compute_determinant<tmat3x3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_determinant<3, 3, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static T call(tmat3x3<T, P> const & m) + GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) { return + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) @@ -222,10 +222,10 @@ namespace detail } }; - template <typename T, precision P, bool Aligned> - struct compute_determinant<tmat4x4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_determinant<4, 4, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static T call(tmat4x4<T, P> const & m) + GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) { T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; @@ -234,7 +234,7 @@ namespace detail T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - tvec4<T, P> DetCof( + vec<4, T, Q> DetCof( + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), @@ -246,19 +246,19 @@ namespace detail } }; - template <template <typename, precision> class matType, typename T, precision P, bool Aligned> + template<length_t C, length_t R, typename T, qualifier Q, bool Aligned> struct compute_inverse{}; - template <typename T, precision P, bool Aligned> - struct compute_inverse<tmat2x2, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_inverse<2, 2, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const& m) + GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) { T OneOverDeterminant = static_cast<T>(1) / ( + m[0][0] * m[1][1] - m[1][0] * m[0][1]); - tmat2x2<T, P> Inverse( + mat<2, 2, T, Q> Inverse( + m[1][1] * OneOverDeterminant, - m[0][1] * OneOverDeterminant, - m[1][0] * OneOverDeterminant, @@ -268,17 +268,17 @@ namespace detail } }; - template <typename T, precision P, bool Aligned> - struct compute_inverse<tmat3x3, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_inverse<3, 3, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const& m) + GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) { T OneOverDeterminant = static_cast<T>(1) / ( + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); - tmat3x3<T, P> Inverse(uninitialize); + mat<3, 3, T, Q> Inverse; Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; @@ -293,10 +293,10 @@ namespace detail } }; - template <typename T, precision P, bool Aligned> - struct compute_inverse<tmat4x4, T, P, Aligned> + template<typename T, qualifier Q, bool Aligned> + struct compute_inverse<4, 4, T, Q, Aligned> { - GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const& m) + GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) { T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; @@ -322,30 +322,30 @@ namespace detail T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - tvec4<T, P> Fac0(Coef00, Coef00, Coef02, Coef03); - tvec4<T, P> Fac1(Coef04, Coef04, Coef06, Coef07); - tvec4<T, P> Fac2(Coef08, Coef08, Coef10, Coef11); - tvec4<T, P> Fac3(Coef12, Coef12, Coef14, Coef15); - tvec4<T, P> Fac4(Coef16, Coef16, Coef18, Coef19); - tvec4<T, P> Fac5(Coef20, Coef20, Coef22, Coef23); + vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); + vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); + vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); + vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); + vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); + vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); - tvec4<T, P> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - tvec4<T, P> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - tvec4<T, P> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - tvec4<T, P> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); + vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); + vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); + vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); + vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - tvec4<T, P> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - tvec4<T, P> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - tvec4<T, P> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - tvec4<T, P> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); + vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); + vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); + vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); + vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - tvec4<T, P> SignA(+1, -1, +1, -1); - tvec4<T, P> SignB(-1, +1, -1, +1); - tmat4x4<T, P> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); + vec<4, T, Q> SignA(+1, -1, +1, -1); + vec<4, T, Q> SignB(-1, +1, -1, +1); + mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); - tvec4<T, P> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); + vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - tvec4<T, P> Dot0(m[0] * Row0); + vec<4, T, Q> Dot0(m[0] * Row0); T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); T OneOverDeterminant = static_cast<T>(1) / Dot1; @@ -355,43 +355,43 @@ namespace detail }; }//namespace detail - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_QUALIFIER matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y) + template<length_t C, length_t R, typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); - return detail::compute_matrixCompMult<matType, T, P, detail::is_aligned<P>::value>::call(x, y); + return detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y); } - template<typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB> - GLM_FUNC_QUALIFIER typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r) + template<length_t DA, length_t DB, typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename detail::outerProduct_trait<DA, DB, T, Q>::type outerProduct(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); - typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type m(uninitialize); + typename detail::outerProduct_trait<DA, DB, T, Q>::type m; for(length_t i = 0; i < m.length(); ++i) m[i] = c * r[i]; return m; } - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_QUALIFIER typename matType<T, P>::transpose_type transpose(matType<T, P> const & m) + template<length_t C, length_t R, typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& m) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); - return detail::compute_transpose<matType, T, P, detail::is_aligned<P>::value>::call(m); + return detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); } - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_QUALIFIER T determinant(matType<T, P> const & m) + template<length_t C, length_t R, typename T, qualifier Q> + GLM_FUNC_QUALIFIER T determinant(mat<C, R, T, Q> const& m) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); - return detail::compute_determinant<matType, T, P, detail::is_aligned<P>::value>::call(m); + return detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); } - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_QUALIFIER matType<T, P> inverse(matType<T, P> const & m) + template<length_t C, length_t R, typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m) { GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); - return detail::compute_inverse<matType, T, P, detail::is_aligned<P>::value>::call(m); + return detail::compute_inverse<C, R, T, Q, detail::is_aligned<Q>::value>::call(m); } }//namespace glm diff --git a/external/include/glm/detail/func_matrix_simd.inl b/external/include/glm/detail/func_matrix_simd.inl index 61b0a5b..b96c028 100644 --- a/external/include/glm/detail/func_matrix_simd.inl +++ b/external/include/glm/detail/func_matrix_simd.inl @@ -4,56 +4,57 @@ #if GLM_ARCH & GLM_ARCH_SSE2_BIT #include "type_mat4x4.hpp" -#include "func_geometric.hpp" +#include "../geometric.hpp" #include "../simd/matrix.h" +#include <cstring> namespace glm{ namespace detail { - template <precision P> - struct compute_matrixCompMult<tmat4x4, float, P, true> + template<qualifier Q> + struct compute_matrixCompMult<4, 4, float, Q, true> { - GLM_STATIC_ASSERT(detail::is_aligned<P>::value, "Specialization requires aligned"); + GLM_STATIC_ASSERT(detail::is_aligned<Q>::value, "Specialization requires aligned"); - GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & x, tmat4x4<float, P> const & y) + GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) { - tmat4x4<float, P> result(uninitialize); + mat<4, 4, float, Q> Result; glm_mat4_matrixCompMult( - *(glm_vec4 const (*)[4])&x[0].data, - *(glm_vec4 const (*)[4])&y[0].data, - *(glm_vec4(*)[4])&result[0].data); - return result; + *static_cast<glm_vec4 const (*)[4]>(&x[0].data), + *static_cast<glm_vec4 const (*)[4]>(&y[0].data), + *static_cast<glm_vec4(*)[4]>(&Result[0].data)); + return Result; } }; - template <precision P> - struct compute_transpose<tmat4x4, float, P, true> + template<qualifier Q> + struct compute_transpose<4, 4, float, Q, true> { - GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & m) + GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) { - tmat4x4<float, P> result(uninitialize); + mat<4, 4, float, Q> Result; glm_mat4_transpose( - *(glm_vec4 const (*)[4])&m[0].data, - *(glm_vec4(*)[4])&result[0].data); - return result; + *static_cast<glm_vec4 const (*)[4]>(&m[0].data), + *static_cast<glm_vec4(*)[4]>(&Result[0].data)); + return Result; } }; - template <precision P> - struct compute_determinant<tmat4x4, float, P, true> + template<qualifier Q> + struct compute_determinant<4, 4, float, Q, true> { - GLM_FUNC_QUALIFIER static float call(tmat4x4<float, P> const& m) + GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) { return _mm_cvtss_f32(glm_mat4_determinant(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data))); } }; - template <precision P> - struct compute_inverse<tmat4x4, float, P, true> + template<qualifier Q> + struct compute_inverse<4, 4, float, Q, true> { - GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const& m) + GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) { - tmat4x4<float, P> Result(uninitialize); + mat<4, 4, float, Q> Result; glm_mat4_inverse(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data), *reinterpret_cast<__m128(*)[4]>(&Result[0].data)); return Result; } @@ -61,27 +62,33 @@ namespace detail }//namespace detail template<> - GLM_FUNC_QUALIFIER tmat4x4<float, aligned_lowp> outerProduct<float, aligned_lowp, tvec4, tvec4>(tvec4<float, aligned_lowp> const & c, tvec4<float, aligned_lowp> const & r) + GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) { - tmat4x4<float, aligned_lowp> m(uninitialize); - glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data)); - return m; + __m128 NativeResult[4]; + glm_mat4_outerProduct(c.data, r.data, NativeResult); + mat<4, 4, float, aligned_lowp> Result; + std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); + return Result; } template<> - GLM_FUNC_QUALIFIER tmat4x4<float, aligned_mediump> outerProduct<float, aligned_mediump, tvec4, tvec4>(tvec4<float, aligned_mediump> const & c, tvec4<float, aligned_mediump> const & r) + GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) { - tmat4x4<float, aligned_mediump> m(uninitialize); - glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data)); - return m; + __m128 NativeResult[4]; + glm_mat4_outerProduct(c.data, r.data, NativeResult); + mat<4, 4, float, aligned_mediump> Result; + std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); + return Result; } template<> - GLM_FUNC_QUALIFIER tmat4x4<float, aligned_highp> outerProduct<float, aligned_highp, tvec4, tvec4>(tvec4<float, aligned_highp> const & c, tvec4<float, aligned_highp> const & r) + GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) { - tmat4x4<float, aligned_highp> m(uninitialize); - glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data)); - return m; + __m128 NativeResult[4]; + glm_mat4_outerProduct(c.data, r.data, NativeResult); + mat<4, 4, float, aligned_highp> Result; + std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); + return Result; } }//namespace glm diff --git a/external/include/glm/detail/func_packing.hpp b/external/include/glm/detail/func_packing.hpp deleted file mode 100644 index 47e074b..0000000 --- a/external/include/glm/detail/func_packing.hpp +++ /dev/null @@ -1,168 +0,0 @@ -/// @ref core -/// @file glm/detail/func_packing.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> -/// @see gtc_packing -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// These functions do not operate component-wise, rather as described in each case. - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uint packUnorm2x16(vec2 const & v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml">GLSL packSnorm2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uint packSnorm2x16(vec2 const & v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uint packUnorm4x8(vec4 const & v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uint packSnorm4x8(vec4 const & v); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm2x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); - - /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL double packDouble2x32(uvec2 const & v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL uint packHalf2x16(vec2 const & v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> - GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); - - /// @} -}//namespace glm - -#include "func_packing.inl" diff --git a/external/include/glm/detail/func_packing.inl b/external/include/glm/detail/func_packing.inl index 505c80a..7c22eb9 100644 --- a/external/include/glm/detail/func_packing.inl +++ b/external/include/glm/detail/func_packing.inl @@ -1,13 +1,13 @@ /// @ref core /// @file glm/detail/func_packing.inl -#include "func_common.hpp" +#include "../common.hpp" #include "type_half.hpp" #include "../fwd.hpp" namespace glm { - GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const & v) + GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) { union { @@ -36,7 +36,7 @@ namespace glm return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; } - GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const & v) + GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) { union { @@ -65,7 +65,7 @@ namespace glm return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); } - GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const & v) + GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) { union { @@ -95,8 +95,8 @@ namespace glm return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; } - - GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const & v) + + GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) { union { @@ -113,7 +113,7 @@ namespace glm return u.out; } - + GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) { union @@ -127,7 +127,7 @@ namespace glm return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); } - GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const & v) + GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) { union { @@ -154,7 +154,7 @@ namespace glm return uvec2(u.out[0], u.out[1]); } - GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const & v) + GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) { union { diff --git a/external/include/glm/detail/func_trigonometric.hpp b/external/include/glm/detail/func_trigonometric.hpp deleted file mode 100644 index 719cff0..0000000 --- a/external/include/glm/detail/func_trigonometric.hpp +++ /dev/null @@ -1,176 +0,0 @@ -/// @ref core -/// @file glm/detail/func_trigonometric.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. - -#pragma once - -#include "setup.hpp" -#include "precision.hpp" - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> sin(vecType<T, P> const & angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> cos(vecType<T, P> const & angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> tan(vecType<T, P> const & angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> asin(vecType<T, P> const & x); - - /// Arc cosine. Returns an angle whose sine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> acos(vecType<T, P> const & x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y, vecType<T, P> const & x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> sinh(vecType<T, P> const & angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> cosh(vecType<T, P> const & angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> tanh(vecType<T, P> const & angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> asinh(vecType<T, P> const & x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> acosh(vecType<T, P> const & x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<T, P> atanh(vecType<T, P> const & x); - - /// @} -}//namespace glm - -#include "func_trigonometric.inl" diff --git a/external/include/glm/detail/func_trigonometric.inl b/external/include/glm/detail/func_trigonometric.inl index 2986673..291fccd 100644 --- a/external/include/glm/detail/func_trigonometric.inl +++ b/external/include/glm/detail/func_trigonometric.inl @@ -8,7 +8,7 @@ namespace glm { // radians - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'radians' only accept floating-point input"); @@ -16,14 +16,14 @@ namespace glm return degrees * static_cast<genType>(0.01745329251994329576923690768489); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(radians, v); + return detail::functor1<L, T, T, Q>::call(radians, v); } - + // degrees - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'degrees' only accept floating-point input"); @@ -31,59 +31,59 @@ namespace glm return radians * static_cast<genType>(57.295779513082320876798154814105); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(degrees, v); + return detail::functor1<L, T, T, Q>::call(degrees, v); } // sin using ::std::sin; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> sin(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> sin(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(sin, v); + return detail::functor1<L, T, T, Q>::call(sin, v); } // cos using std::cos; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> cos(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> cos(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(cos, v); + return detail::functor1<L, T, T, Q>::call(cos, v); } // tan using std::tan; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> tan(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> tan(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(tan, v); + return detail::functor1<L, T, T, Q>::call(tan, v); } // asin using std::asin; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> asin(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> asin(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(asin, v); + return detail::functor1<L, T, T, Q>::call(asin, v); } // acos using std::acos; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> acos(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> acos(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(acos, v); + return detail::functor1<L, T, T, Q>::call(acos, v); } // atan - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType atan(genType y, genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atan' only accept floating-point input"); @@ -91,52 +91,52 @@ namespace glm return ::std::atan2(y, x); } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & a, vecType<T, P> const & b) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& a, vec<L, T, Q> const& b) { - return detail::functor2<T, P, vecType>::call(::std::atan2, a, b); + return detail::functor2<L, T, Q>::call(::std::atan2, a, b); } using std::atan; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(atan, v); + return detail::functor1<L, T, T, Q>::call(atan, v); } // sinh using std::sinh; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> sinh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> sinh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(sinh, v); + return detail::functor1<L, T, T, Q>::call(sinh, v); } // cosh using std::cosh; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> cosh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> cosh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(cosh, v); + return detail::functor1<L, T, T, Q>::call(cosh, v); } // tanh using std::tanh; - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> tanh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> tanh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(tanh, v); + return detail::functor1<L, T, T, Q>::call(tanh, v); } // asinh # if GLM_HAS_CXX11_STL using std::asinh; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType asinh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asinh' only accept floating-point input"); @@ -145,17 +145,17 @@ namespace glm } # endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> asinh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> asinh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(asinh, v); + return detail::functor1<L, T, T, Q>::call(asinh, v); } // acosh # if GLM_HAS_CXX11_STL using std::acosh; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType acosh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acosh' only accept floating-point input"); @@ -166,31 +166,31 @@ namespace glm } # endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> acosh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> acosh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(acosh, v); + return detail::functor1<L, T, T, Q>::call(acosh, v); } // atanh # if GLM_HAS_CXX11_STL using std::atanh; # else - template <typename genType> + template<typename genType> GLM_FUNC_QUALIFIER genType atanh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atanh' only accept floating-point input"); - + if(std::abs(x) >= static_cast<genType>(1)) return 0; return static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x)); } # endif - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<T, P> atanh(vecType<T, P> const & v) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, T, Q> atanh(vec<L, T, Q> const& v) { - return detail::functor1<T, T, P, vecType>::call(atanh, v); + return detail::functor1<L, T, T, Q>::call(atanh, v); } }//namespace glm diff --git a/external/include/glm/detail/func_vector_relational.hpp b/external/include/glm/detail/func_vector_relational.hpp deleted file mode 100644 index ec0f68a..0000000 --- a/external/include/glm/detail/func_vector_relational.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/// @ref core -/// @file glm/detail/func_vector_relational.hpp -/// -/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. - -#pragma once - -#include "precision.hpp" -#include "setup.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam vecType Floating-point, integer or boolean vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam vecType Floating-point, integer or boolean vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y); - - /// Returns true if any component of x is true. - /// - /// @tparam vecType Boolean vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL bool any(vecType<bool, P> const & v); - - /// Returns true if all components of x are true. - /// - /// @tparam vecType Boolean vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL bool all(vecType<bool, P> const & v); - - /// Returns the component-wise logical complement of x. - /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. - /// - /// @tparam vecType Boolean vector types. - /// - /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a> - /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_DECL vecType<bool, P> not_(vecType<bool, P> const & v); - - /// @} -}//namespace glm - -#include "func_vector_relational.inl" diff --git a/external/include/glm/detail/func_vector_relational.inl b/external/include/glm/detail/func_vector_relational.inl index 3d8d2b7..b081a90 100644 --- a/external/include/glm/detail/func_vector_relational.inl +++ b/external/include/glm/detail/func_vector_relational.inl @@ -1,79 +1,79 @@ /// @ref core /// @file glm/detail/func_vector_relational.inl -#include <limits> +#include "compute_vector_relational.hpp" namespace glm { - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] < y[i]; return Result; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] <= y[i]; return Result; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] > y[i]; return Result; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] >= y[i]; return Result; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] == y[i]; + Result[i] = detail::compute_equal<T>::call(x[i], y[i]); return Result; } - template <typename T, precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y) + template<length_t L, typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y) { assert(x.length() == y.length()); - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] != y[i]; + Result[i] = !detail::compute_equal<T>::call(x[i], y[i]); return Result; } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER bool any(vecType<bool, P> const & v) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER bool any(vec<L, bool, Q> const& v) { bool Result = false; for(length_t i = 0; i < v.length(); ++i) @@ -81,8 +81,8 @@ namespace glm return Result; } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER bool all(vecType<bool, P> const & v) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER bool all(vec<L, bool, Q> const& v) { bool Result = true; for(length_t i = 0; i < v.length(); ++i) @@ -90,10 +90,10 @@ namespace glm return Result; } - template <precision P, template <typename, precision> class vecType> - GLM_FUNC_QUALIFIER vecType<bool, P> not_(vecType<bool, P> const & v) + template<length_t L, qualifier Q> + GLM_FUNC_QUALIFIER vec<L, bool, Q> not_(vec<L, bool, Q> const& v) { - vecType<bool, P> Result(uninitialize); + vec<L, bool, Q> Result; for(length_t i = 0; i < v.length(); ++i) Result[i] = !v[i]; return Result; diff --git a/external/include/glm/detail/glm.cpp b/external/include/glm/detail/glm.cpp index da3be4e..f4224ac 100644 --- a/external/include/glm/detail/glm.cpp +++ b/external/include/glm/detail/glm.cpp @@ -1,237 +1,239 @@ /// @ref core /// @file glm/glm.cpp +#define GLM_ENABLE_EXPERIMENTAL #include <glm/glm.hpp> +#include <glm/ext/vec1.hpp> #include <glm/gtc/quaternion.hpp> #include <glm/gtx/dual_quaternion.hpp> namespace glm { // tvec1 type explicit instantiation -template struct tvec1<uint8, lowp>; -template struct tvec1<uint16, lowp>; -template struct tvec1<uint32, lowp>; -template struct tvec1<uint64, lowp>; -template struct tvec1<int8, lowp>; -template struct tvec1<int16, lowp>; -template struct tvec1<int32, lowp>; -template struct tvec1<int64, lowp>; -template struct tvec1<float32, lowp>; -template struct tvec1<float64, lowp>; - -template struct tvec1<uint8, mediump>; -template struct tvec1<uint16, mediump>; -template struct tvec1<uint32, mediump>; -template struct tvec1<uint64, mediump>; -template struct tvec1<int8, mediump>; -template struct tvec1<int16, mediump>; -template struct tvec1<int32, mediump>; -template struct tvec1<int64, mediump>; -template struct tvec1<float32, mediump>; -template struct tvec1<float64, mediump>; - -template struct tvec1<uint8, highp>; -template struct tvec1<uint16, highp>; -template struct tvec1<uint32, highp>; -template struct tvec1<uint64, highp>; -template struct tvec1<int8, highp>; -template struct tvec1<int16, highp>; -template struct tvec1<int32, highp>; -template struct tvec1<int64, highp>; -template struct tvec1<float32, highp>; -template struct tvec1<float64, highp>; +template struct vec<1, uint8, lowp>; +template struct vec<1, uint16, lowp>; +template struct vec<1, uint32, lowp>; +template struct vec<1, uint64, lowp>; +template struct vec<1, int8, lowp>; +template struct vec<1, int16, lowp>; +template struct vec<1, int32, lowp>; +template struct vec<1, int64, lowp>; +template struct vec<1, float32, lowp>; +template struct vec<1, float64, lowp>; + +template struct vec<1, uint8, mediump>; +template struct vec<1, uint16, mediump>; +template struct vec<1, uint32, mediump>; +template struct vec<1, uint64, mediump>; +template struct vec<1, int8, mediump>; +template struct vec<1, int16, mediump>; +template struct vec<1, int32, mediump>; +template struct vec<1, int64, mediump>; +template struct vec<1, float32, mediump>; +template struct vec<1, float64, mediump>; + +template struct vec<1, uint8, highp>; +template struct vec<1, uint16, highp>; +template struct vec<1, uint32, highp>; +template struct vec<1, uint64, highp>; +template struct vec<1, int8, highp>; +template struct vec<1, int16, highp>; +template struct vec<1, int32, highp>; +template struct vec<1, int64, highp>; +template struct vec<1, float32, highp>; +template struct vec<1, float64, highp>; // tvec2 type explicit instantiation -template struct tvec2<uint8, lowp>; -template struct tvec2<uint16, lowp>; -template struct tvec2<uint32, lowp>; -template struct tvec2<uint64, lowp>; -template struct tvec2<int8, lowp>; -template struct tvec2<int16, lowp>; -template struct tvec2<int32, lowp>; -template struct tvec2<int64, lowp>; -template struct tvec2<float32, lowp>; -template struct tvec2<float64, lowp>; - -template struct tvec2<uint8, mediump>; -template struct tvec2<uint16, mediump>; -template struct tvec2<uint32, mediump>; -template struct tvec2<uint64, mediump>; -template struct tvec2<int8, mediump>; -template struct tvec2<int16, mediump>; -template struct tvec2<int32, mediump>; -template struct tvec2<int64, mediump>; -template struct tvec2<float32, mediump>; -template struct tvec2<float64, mediump>; - -template struct tvec2<uint8, highp>; -template struct tvec2<uint16, highp>; -template struct tvec2<uint32, highp>; -template struct tvec2<uint64, highp>; -template struct tvec2<int8, highp>; -template struct tvec2<int16, highp>; -template struct tvec2<int32, highp>; -template struct tvec2<int64, highp>; -template struct tvec2<float32, highp>; -template struct tvec2<float64, highp>; +template struct vec<2, uint8, lowp>; +template struct vec<2, uint16, lowp>; +template struct vec<2, uint32, lowp>; +template struct vec<2, uint64, lowp>; +template struct vec<2, int8, lowp>; +template struct vec<2, int16, lowp>; +template struct vec<2, int32, lowp>; +template struct vec<2, int64, lowp>; +template struct vec<2, float32, lowp>; +template struct vec<2, float64, lowp>; + +template struct vec<2, uint8, mediump>; +template struct vec<2, uint16, mediump>; +template struct vec<2, uint32, mediump>; +template struct vec<2, uint64, mediump>; +template struct vec<2, int8, mediump>; +template struct vec<2, int16, mediump>; +template struct vec<2, int32, mediump>; +template struct vec<2, int64, mediump>; +template struct vec<2, float32, mediump>; +template struct vec<2, float64, mediump>; + +template struct vec<2, uint8, highp>; +template struct vec<2, uint16, highp>; +template struct vec<2, uint32, highp>; +template struct vec<2, uint64, highp>; +template struct vec<2, int8, highp>; +template struct vec<2, int16, highp>; +template struct vec<2, int32, highp>; +template struct vec<2, int64, highp>; +template struct vec<2, float32, highp>; +template struct vec<2, float64, highp>; // tvec3 type explicit instantiation -template struct tvec3<uint8, lowp>; -template struct tvec3<uint16, lowp>; -template struct tvec3<uint32, lowp>; -template struct tvec3<uint64, lowp>; -template struct tvec3<int8, lowp>; -template struct tvec3<int16, lowp>; -template struct tvec3<int32, lowp>; -template struct tvec3<int64, lowp>; -template struct tvec3<float32, lowp>; -template struct tvec3<float64, lowp>; - -template struct tvec3<uint8, mediump>; -template struct tvec3<uint16, mediump>; -template struct tvec3<uint32, mediump>; -template struct tvec3<uint64, mediump>; -template struct tvec3<int8, mediump>; -template struct tvec3<int16, mediump>; -template struct tvec3<int32, mediump>; -template struct tvec3<int64, mediump>; -template struct tvec3<float32, mediump>; -template struct tvec3<float64, mediump>; - -template struct tvec3<uint8, highp>; -template struct tvec3<uint16, highp>; -template struct tvec3<uint32, highp>; -template struct tvec3<uint64, highp>; -template struct tvec3<int8, highp>; -template struct tvec3<int16, highp>; -template struct tvec3<int32, highp>; -template struct tvec3<int64, highp>; -template struct tvec3<float32, highp>; -template struct tvec3<float64, highp>; +template struct vec<3, uint8, lowp>; +template struct vec<3, uint16, lowp>; +template struct vec<3, uint32, lowp>; +template struct vec<3, uint64, lowp>; +template struct vec<3, int8, lowp>; +template struct vec<3, int16, lowp>; +template struct vec<3, int32, lowp>; +template struct vec<3, int64, lowp>; +template struct vec<3, float32, lowp>; +template struct vec<3, float64, lowp>; + +template struct vec<3, uint8, mediump>; +template struct vec<3, uint16, mediump>; +template struct vec<3, uint32, mediump>; +template struct vec<3, uint64, mediump>; +template struct vec<3, int8, mediump>; +template struct vec<3, int16, mediump>; +template struct vec<3, int32, mediump>; +template struct vec<3, int64, mediump>; +template struct vec<3, float32, mediump>; +template struct vec<3, float64, mediump>; + +template struct vec<3, uint8, highp>; +template struct vec<3, uint16, highp>; +template struct vec<3, uint32, highp>; +template struct vec<3, uint64, highp>; +template struct vec<3, int8, highp>; +template struct vec<3, int16, highp>; +template struct vec<3, int32, highp>; +template struct vec<3, int64, highp>; +template struct vec<3, float32, highp>; +template struct vec<3, float64, highp>; // tvec4 type explicit instantiation -template struct tvec4<uint8, lowp>; -template struct tvec4<uint16, lowp>; -template struct tvec4<uint32, lowp>; -template struct tvec4<uint64, lowp>; -template struct tvec4<int8, lowp>; -template struct tvec4<int16, lowp>; -template struct tvec4<int32, lowp>; -template struct tvec4<int64, lowp>; -template struct tvec4<float32, lowp>; -template struct tvec4<float64, lowp>; - -template struct tvec4<uint8, mediump>; -template struct tvec4<uint16, mediump>; -template struct tvec4<uint32, mediump>; -template struct tvec4<uint64, mediump>; -template struct tvec4<int8, mediump>; -template struct tvec4<int16, mediump>; -template struct tvec4<int32, mediump>; -template struct tvec4<int64, mediump>; -template struct tvec4<float32, mediump>; -template struct tvec4<float64, mediump>; - -template struct tvec4<uint8, highp>; -template struct tvec4<uint16, highp>; -template struct tvec4<uint32, highp>; -template struct tvec4<uint64, highp>; -template struct tvec4<int8, highp>; -template struct tvec4<int16, highp>; -template struct tvec4<int32, highp>; -template struct tvec4<int64, highp>; -template struct tvec4<float32, highp>; -template struct tvec4<float64, highp>; +template struct vec<4, uint8, lowp>; +template struct vec<4, uint16, lowp>; +template struct vec<4, uint32, lowp>; +template struct vec<4, uint64, lowp>; +template struct vec<4, int8, lowp>; +template struct vec<4, int16, lowp>; +template struct vec<4, int32, lowp>; +template struct vec<4, int64, lowp>; +template struct vec<4, float32, lowp>; +template struct vec<4, float64, lowp>; + +template struct vec<4, uint8, mediump>; +template struct vec<4, uint16, mediump>; +template struct vec<4, uint32, mediump>; +template struct vec<4, uint64, mediump>; +template struct vec<4, int8, mediump>; +template struct vec<4, int16, mediump>; +template struct vec<4, int32, mediump>; +template struct vec<4, int64, mediump>; +template struct vec<4, float32, mediump>; +template struct vec<4, float64, mediump>; + +template struct vec<4, uint8, highp>; +template struct vec<4, uint16, highp>; +template struct vec<4, uint32, highp>; +template struct vec<4, uint64, highp>; +template struct vec<4, int8, highp>; +template struct vec<4, int16, highp>; +template struct vec<4, int32, highp>; +template struct vec<4, int64, highp>; +template struct vec<4, float32, highp>; +template struct vec<4, float64, highp>; // tmat2x2 type explicit instantiation -template struct tmat2x2<float32, lowp>; -template struct tmat2x2<float64, lowp>; +template struct mat<2, 2, float32, lowp>; +template struct mat<2, 2, float64, lowp>; -template struct tmat2x2<float32, mediump>; -template struct tmat2x2<float64, mediump>; +template struct mat<2, 2, float32, mediump>; +template struct mat<2, 2, float64, mediump>; -template struct tmat2x2<float32, highp>; -template struct tmat2x2<float64, highp>; +template struct mat<2, 2, float32, highp>; +template struct mat<2, 2, float64, highp>; // tmat2x3 type explicit instantiation -template struct tmat2x3<float32, lowp>; -template struct tmat2x3<float64, lowp>; +template struct mat<2, 3, float32, lowp>; +template struct mat<2, 3, float64, lowp>; -template struct tmat2x3<float32, mediump>; -template struct tmat2x3<float64, mediump>; +template struct mat<2, 3, float32, mediump>; +template struct mat<2, 3, float64, mediump>; -template struct tmat2x3<float32, highp>; -template struct tmat2x3<float64, highp>; +template struct mat<2, 3, float32, highp>; +template struct mat<2, 3, float64, highp>; // tmat2x4 type explicit instantiation -template struct tmat2x4<float32, lowp>; -template struct tmat2x4<float64, lowp>; +template struct mat<2, 4, float32, lowp>; +template struct mat<2, 4, float64, lowp>; -template struct tmat2x4<float32, mediump>; -template struct tmat2x4<float64, mediump>; +template struct mat<2, 4, float32, mediump>; +template struct mat<2, 4, float64, mediump>; -template struct tmat2x4<float32, highp>; -template struct tmat2x4<float64, highp>; +template struct mat<2, 4, float32, highp>; +template struct mat<2, 4, float64, highp>; // tmat3x2 type explicit instantiation -template struct tmat3x2<float32, lowp>; -template struct tmat3x2<float64, lowp>; +template struct mat<3, 2, float32, lowp>; +template struct mat<3, 2, float64, lowp>; -template struct tmat3x2<float32, mediump>; -template struct tmat3x2<float64, mediump>; +template struct mat<3, 2, float32, mediump>; +template struct mat<3, 2, float64, mediump>; -template struct tmat3x2<float32, highp>; -template struct tmat3x2<float64, highp>; +template struct mat<3, 2, float32, highp>; +template struct mat<3, 2, float64, highp>; // tmat3x3 type explicit instantiation -template struct tmat3x3<float32, lowp>; -template struct tmat3x3<float64, lowp>; +template struct mat<3, 3, float32, lowp>; +template struct mat<3, 3, float64, lowp>; -template struct tmat3x3<float32, mediump>; -template struct tmat3x3<float64, mediump>; +template struct mat<3, 3, float32, mediump>; +template struct mat<3, 3, float64, mediump>; -template struct tmat3x3<float32, highp>; -template struct tmat3x3<float64, highp>; +template struct mat<3, 3, float32, highp>; +template struct mat<3, 3, float64, highp>; // tmat3x4 type explicit instantiation -template struct tmat3x4<float32, lowp>; -template struct tmat3x4<float64, lowp>; +template struct mat<3, 4, float32, lowp>; +template struct mat<3, 4, float64, lowp>; -template struct tmat3x4<float32, mediump>; -template struct tmat3x4<float64, mediump>; +template struct mat<3, 4, float32, mediump>; +template struct mat<3, 4, float64, mediump>; -template struct tmat3x4<float32, highp>; -template struct tmat3x4<float64, highp>; +template struct mat<3, 4, float32, highp>; +template struct mat<3, 4, float64, highp>; // tmat4x2 type explicit instantiation -template struct tmat4x2<float32, lowp>; -template struct tmat4x2<float64, lowp>; +template struct mat<4, 2, float32, lowp>; +template struct mat<4, 2, float64, lowp>; -template struct tmat4x2<float32, mediump>; -template struct tmat4x2<float64, mediump>; +template struct mat<4, 2, float32, mediump>; +template struct mat<4, 2, float64, mediump>; -template struct tmat4x2<float32, highp>; -template struct tmat4x2<float64, highp>; +template struct mat<4, 2, float32, highp>; +template struct mat<4, 2, float64, highp>; // tmat4x3 type explicit instantiation -template struct tmat4x3<float32, lowp>; -template struct tmat4x3<float64, lowp>; +template struct mat<4, 3, float32, lowp>; +template struct mat<4, 3, float64, lowp>; -template struct tmat4x3<float32, mediump>; -template struct tmat4x3<float64, mediump>; +template struct mat<4, 3, float32, mediump>; +template struct mat<4, 3, float64, mediump>; -template struct tmat4x3<float32, highp>; -template struct tmat4x3<float64, highp>; +template struct mat<4, 3, float32, highp>; +template struct mat<4, 3, float64, highp>; // tmat4x4 type explicit instantiation -template struct tmat4x4<float32, lowp>; -template struct tmat4x4<float64, lowp>; +template struct mat<4, 4, float32, lowp>; +template struct mat<4, 4, float64, lowp>; -template struct tmat4x4<float32, mediump>; -template struct tmat4x4<float64, mediump>; +template struct mat<4, 4, float32, mediump>; +template struct mat<4, 4, float64, mediump>; -template struct tmat4x4<float32, highp>; -template struct tmat4x4<float64, highp>; +template struct mat<4, 4, float32, highp>; +template struct mat<4, 4, float64, highp>; // tquat type explicit instantiation template struct tquat<float32, lowp>; diff --git a/external/include/glm/detail/precision.hpp b/external/include/glm/detail/precision.hpp deleted file mode 100644 index 7c54437..0000000 --- a/external/include/glm/detail/precision.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref core -/// @file glm/detail/precision.hpp - -#pragma once - -#include "setup.hpp" - -namespace glm -{ - enum precision - { - packed_highp, - packed_mediump, - packed_lowp, - -# if GLM_HAS_ALIGNED_TYPE - aligned_highp, - aligned_mediump, - aligned_lowp, - aligned = aligned_highp, -# endif - - highp = packed_highp, - mediump = packed_mediump, - lowp = packed_lowp, - packed = packed_highp, - -# if GLM_HAS_ALIGNED_TYPE && defined(GLM_FORCE_ALIGNED) - defaultp = aligned_highp -# else - defaultp = highp -# endif - }; - -namespace detail -{ - template <glm::precision P> - struct is_aligned - { - static const bool value = false; - }; - -# if GLM_HAS_ALIGNED_TYPE - template<> - struct is_aligned<glm::aligned_lowp> - { - static const bool value = true; - }; - - template<> - struct is_aligned<glm::aligned_mediump> - { - static const bool value = true; - }; - - template<> - struct is_aligned<glm::aligned_highp> - { - static const bool value = true; - }; -# endif -}//namespace detail -}//namespace glm diff --git a/external/include/glm/detail/qualifier.hpp b/external/include/glm/detail/qualifier.hpp new file mode 100644 index 0000000..262ec32 --- /dev/null +++ b/external/include/glm/detail/qualifier.hpp @@ -0,0 +1,69 @@ +/// @ref core +/// @file glm/detail/qualifier.hpp + +#pragma once + +#include "setup.hpp" + +namespace glm +{ + /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) + enum qualifier + { + packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs + packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance + packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance + +# if GLM_HAS_ALIGNED_TYPE + aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs + aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance + aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance + aligned = aligned_highp, ///< By default aligned qualifier is also high precision +# endif + + highp = packed_highp, ///< By default highp qualifier is also packed + mediump = packed_mediump, ///< By default mediump qualifier is also packed + lowp = packed_lowp, ///< By default lowp qualifier is also packed + packed = packed_highp, ///< By default packed qualifier is also high precision + +# if GLM_HAS_ALIGNED_TYPE && defined(GLM_FORCE_ALIGNED) + defaultp = aligned_highp +# else + defaultp = highp +# endif + }; + + typedef qualifier precision; + + template<length_t L, typename T, qualifier Q = defaultp> struct vec; + template<length_t C, length_t R, typename T, qualifier Q = defaultp> struct mat; + +namespace detail +{ + template<glm::qualifier P> + struct is_aligned + { + static const bool value = false; + }; + +# if GLM_HAS_ALIGNED_TYPE + template<> + struct is_aligned<glm::aligned_lowp> + { + static const bool value = true; + }; + + template<> + struct is_aligned<glm::aligned_mediump> + { + static const bool value = true; + }; + + template<> + struct is_aligned<glm::aligned_highp> + { + static const bool value = true; + }; +# endif +}//namespace detail +}//namespace glm diff --git a/external/include/glm/detail/setup.hpp b/external/include/glm/detail/setup.hpp index 68c8cb4..7475916 100644 --- a/external/include/glm/detail/setup.hpp +++ b/external/include/glm/detail/setup.hpp @@ -1,46 +1,46 @@ /// @ref core /// @file glm/detail/setup.hpp -#pragma once +#ifndef GLM_SETUP_INCLUDED -#if (defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE)) && defined(GLM_FORCE_UNRESTRICTED_GENTYPE) +#define GLM_VERSION_MAJOR 0 +#define GLM_VERSION_MINOR 9 +#define GLM_VERSION_PATCH 9 +#define GLM_VERSION_REVISION 0 +#define GLM_VERSION 990 + +#define GLM_SETUP_INCLUDED GLM_VERSION + +#if defined(GLM_FORCE_SWIZZLE) && defined(GLM_FORCE_UNRESTRICTED_GENTYPE) # error "Both GLM_FORCE_SWIZZLE and GLM_FORCE_UNRESTRICTED_GENTYPE can't be defined at the same time" #endif +#include <cassert> +#include <cstddef> + /////////////////////////////////////////////////////////////////////////////////// // Messages -#ifdef GLM_MESSAGES -# pragma message("GLM: GLM_MESSAGES is deprecated, use GLM_FORCE_MESSAGES instead") -#endif - #define GLM_MESSAGES_ENABLED 1 #define GLM_MESSAGES_DISABLE 0 -#if defined(GLM_FORCE_MESSAGES) || defined(GLM_MESSAGES) -# undef GLM_MESSAGES +#if defined(GLM_FORCE_MESSAGES) # define GLM_MESSAGES GLM_MESSAGES_ENABLED #else -# undef GLM_MESSAGES # define GLM_MESSAGES GLM_MESSAGES_DISABLE #endif -#include <cassert> -#include <cstddef> +/////////////////////////////////////////////////////////////////////////////////// +// Detect the platform + #include "../simd/platform.h" /////////////////////////////////////////////////////////////////////////////////// // Version -#define GLM_VERSION 98 -#define GLM_VERSION_MAJOR 0 -#define GLM_VERSION_MINOR 9 -#define GLM_VERSION_PATCH 8 -#define GLM_VERSION_REVISION 4 - #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_VERSION_DISPLAYED) # define GLM_MESSAGE_VERSION_DISPLAYED -# pragma message ("GLM: version 0.9.8.4") +# pragma message ("GLM: version 0.9.9.0") #endif//GLM_MESSAGES // Report compiler detection @@ -194,28 +194,18 @@ # ifdef _MSC_EXTENSIONS # if __cplusplus >= 201402L # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG) -//# elif GLM_COMPILER >= GLM_COMPILER_VC14 -//# define GLM_LANG (GLM_LANG_CXX1Y | GLM_LANG_CXXMS_FLAG) # elif __cplusplus >= 201103L # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG) -# elif GLM_COMPILER >= GLM_COMPILER_VC10 -# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG) -# elif __cplusplus >= 199711L -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG) # else -# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG) +# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG) # endif # else # if __cplusplus >= 201402L # define GLM_LANG GLM_LANG_CXX14 # elif __cplusplus >= 201103L # define GLM_LANG GLM_LANG_CXX11 -# elif GLM_COMPILER >= GLM_COMPILER_VC10 -# define GLM_LANG GLM_LANG_CXX0X -# elif __cplusplus >= 199711L -# define GLM_LANG GLM_LANG_CXX98 # else -# define GLM_LANG GLM_LANG_CXX +# define GLM_LANG GLM_LANG_CXX0X # endif # endif # elif GLM_COMPILER & GLM_COMPILER_INTEL @@ -328,7 +318,7 @@ # define GLM_HAS_EXTENDED_INTEGER_TYPE 1 #else # define GLM_HAS_EXTENDED_INTEGER_TYPE (\ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \ + ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) @@ -383,7 +373,7 @@ # define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_GCC)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12)) || \ + ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ (GLM_COMPILER & GLM_COMPILER_CUDA))) #endif @@ -395,8 +385,8 @@ #else # define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_GCC)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) + ((GLM_COMPILER & GLM_COMPILER_VC)) || \ + ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf @@ -406,10 +396,10 @@ # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 #else # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC45)) || \ + ((GLM_COMPILER & GLM_COMPILER_GCC)) || \ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) + ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf @@ -419,10 +409,10 @@ # define GLM_HAS_TEMPLATE_ALIASES 1 #else # define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12_1)) || \ + ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC47)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) + ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html @@ -433,9 +423,9 @@ #else # define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL13)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) + ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ + ((GLM_COMPILER & GLM_COMPILER_VC)) || \ + ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf @@ -474,7 +464,7 @@ #else # define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) + ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif #if GLM_ARCH == GLM_ARCH_PURE @@ -494,10 +484,6 @@ # define GLM_HAS_OPENMP 40 # elif GLM_COMPILER >= GLM_COMPILER_GCC47 # define GLM_HAS_OPENMP 31 -# elif GLM_COMPILER >= GLM_COMPILER_GCC44 -# define GLM_HAS_OPENMP 30 -# elif GLM_COMPILER >= GLM_COMPILER_GCC42 -# define GLM_HAS_OPENMP 25 # else # define GLM_HAS_OPENMP 0 # endif @@ -508,22 +494,34 @@ # define GLM_HAS_OPENMP 0 # endif # elif GLM_COMPILER & GLM_COMPILER_VC -# if GLM_COMPILER >= GLM_COMPILER_VC10 -# define GLM_HAS_OPENMP 20 -# else -# define GLM_HAS_OPENMP 0 -# endif +# define GLM_HAS_OPENMP 20 # elif GLM_COMPILER & GLM_COMPILER_INTEL # if GLM_COMPILER >= GLM_COMPILER_INTEL16 # define GLM_HAS_OPENMP 40 -# elif GLM_COMPILER >= GLM_COMPILER_INTEL12 -# define GLM_HAS_OPENMP 31 # else # define GLM_HAS_OPENMP 0 # endif # else # define GLM_HAS_OPENMP 0 -# endif// GLM_COMPILER & GLM_COMPILER_VC +# endif +#else +# define GLM_HAS_OPENMP 0 +#endif + +/////////////////////////////////////////////////////////////////////////////////// +// nullptr + +// +#if GLM_LANG & GLM_LANG_CXX0X_FLAG +# define GLM_HAS_NULLPTR 1 +#else +# define GLM_HAS_NULLPTR 0 +#endif + +#if GLM_HAS_NULLPTR +# define GLM_NULLPTR nullptr +#else +# define GLM_NULLPTR 0 #endif /////////////////////////////////////////////////////////////////////////////////// @@ -531,8 +529,6 @@ #if GLM_HAS_STATIC_ASSERT # define GLM_STATIC_ASSERT(x, message) static_assert(x, message) -#elif defined(BOOST_STATIC_ASSERT) -# define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x) #elif GLM_COMPILER & GLM_COMPILER_VC # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] #else @@ -584,18 +580,12 @@ // User defines: GLM_FORCE_SWIZZLE -#ifdef GLM_SWIZZLE -# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead") -#endif - #define GLM_SWIZZLE_ENABLED 1 #define GLM_SWIZZLE_DISABLE 0 -#if defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE) -# undef GLM_SWIZZLE +#if defined(GLM_FORCE_SWIZZLE) # define GLM_SWIZZLE GLM_SWIZZLE_ENABLED #else -# undef GLM_SWIZZLE # define GLM_SWIZZLE GLM_SWIZZLE_DISABLE #endif @@ -627,11 +617,17 @@ #endif//GLM_MESSAGES /////////////////////////////////////////////////////////////////////////////////// -// Clip control +// Force single only (remove explicit float64 types) -#ifdef GLM_DEPTH_ZERO_TO_ONE // Legacy 0.9.8 development -# error Define GLM_FORCE_DEPTH_ZERO_TO_ONE instead of GLM_DEPTH_ZERO_TO_ONE to use 0 to 1 clip space. -#endif +#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_SINGLE_ONLY_DISPLAYED) +# define GLM_MESSAGE_SINGLE_ONLY_DISPLAYED +# ifdef GLM_FORCE_SINGLE_ONLY +# pragma message("GLM: Using only single precision floating-point types") +# endif +#endif//GLM_MESSAGES + +/////////////////////////////////////////////////////////////////////////////////// +// Clip control #define GLM_DEPTH_ZERO_TO_ONE 0x00000001 #define GLM_DEPTH_NEGATIVE_ONE_TO_ONE 0x00000002 @@ -655,10 +651,6 @@ // Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM // to use left handed coordinate system by default. -#ifdef GLM_LEFT_HANDED // Legacy 0.9.8 development -# error Define GLM_FORCE_LEFT_HANDED instead of GLM_LEFT_HANDED left handed coordinate system by default. -#endif - #define GLM_LEFT_HANDED 0x00000001 // For DirectX, Metal, Vulkan #define GLM_RIGHT_HANDED 0x00000002 // For OpenGL, default in GLM @@ -728,10 +720,15 @@ #if GLM_HAS_DEFAULTED_FUNCTIONS # define GLM_DEFAULT = default + # ifdef GLM_FORCE_NO_CTOR_INIT -# define GLM_DEFAULT_CTOR = default -# else +# undef GLM_FORCE_CTOR_INIT +# endif + +# ifdef GLM_FORCE_CTOR_INIT # define GLM_DEFAULT_CTOR +# else +# define GLM_DEFAULT_CTOR = default # endif #else # define GLM_DEFAULT @@ -740,7 +737,7 @@ #if GLM_HAS_CONSTEXPR || GLM_HAS_CONSTEXPR_PARTIAL # define GLM_CONSTEXPR constexpr -# if GLM_COMPILER & GLM_COMPILER_VC // Visual C++ has a bug #594 https://github.com/g-truc/glm/issues/594 +# if ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER <= GLM_COMPILER_VC14)) // Visual C++ has a bug #594 https://github.com/g-truc/glm/issues/594 # define GLM_CONSTEXPR_CTOR # else # define GLM_CONSTEXPR_CTOR constexpr @@ -756,6 +753,18 @@ # define GLM_RELAXED_CONSTEXPR const #endif +#if GLM_LANG >= GLM_LANG_CXX14 +# if ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER <= GLM_COMPILER_VC14)) // Visual C++ < 2017 does not support extended const expressions https://msdn.microsoft.com/en-us/library/hh567368.aspx https://github.com/g-truc/glm/issues/749 +# define GLM_CONSTEXPR_CXX14 +# else +# define GLM_CONSTEXPR_CXX14 GLM_CONSTEXPR +# endif +# define GLM_CONSTEXPR_CTOR_CXX14 GLM_CONSTEXPR_CTOR +#else +# define GLM_CONSTEXPR_CXX14 +# define GLM_CONSTEXPR_CTOR_CXX14 +#endif + #if GLM_ARCH == GLM_ARCH_PURE # define GLM_CONSTEXPR_SIMD GLM_CONSTEXPR_CTOR #else @@ -773,9 +782,11 @@ #define GLM_HAS_ALIGNED_TYPE GLM_HAS_UNRESTRICTED_UNIONS /////////////////////////////////////////////////////////////////////////////////// -// Length type +// Length type: all length functions returns a length_t type. +// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise +// length_t is a typedef of int like GLSL defines it. -// User defines: GLM_FORCE_SIZE_T_LENGTH GLM_FORCE_SIZE_FUNC +// User define: GLM_FORCE_SIZE_T_LENGTH namespace glm { @@ -799,14 +810,10 @@ namespace glm /////////////////////////////////////////////////////////////////////////////////// // countof -#ifndef __has_feature -# define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif - #if GLM_HAS_CONSTEXPR_PARTIAL namespace glm { - template <typename T, std::size_t N> + template<typename T, std::size_t N> constexpr std::size_t countof(T const (&)[N]) { return N; @@ -820,9 +827,10 @@ namespace glm #endif /////////////////////////////////////////////////////////////////////////////////// -// Uninitialize constructors +// Check inclusions of different versions of GLM -namespace glm -{ - enum ctor{uninitialize}; -}//namespace glm +#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) +# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." +#elif GLM_SETUP_INCLUDED == GLM_VERSION + +#endif//GLM_SETUP_INCLUDED diff --git a/external/include/glm/detail/type_float.hpp b/external/include/glm/detail/type_float.hpp index 900a3fb..28abb5f 100644 --- a/external/include/glm/detail/type_float.hpp +++ b/external/include/glm/detail/type_float.hpp @@ -9,9 +9,12 @@ namespace glm{ namespace detail { typedef float float32; - typedef double float64; + +# ifndef GLM_FORCE_SINGLE_ONLY + typedef double float64; +# endif//GLM_FORCE_SINGLE_ONLY }//namespace detail - + typedef float lowp_float_t; typedef float mediump_float_t; typedef double highp_float_t; @@ -19,23 +22,23 @@ namespace detail /// @addtogroup core_precision /// @{ - /// Low precision floating-point numbers. - /// There is no guarantee on the actual precision. - /// + /// Low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef lowp_float_t lowp_float; - /// Medium precision floating-point numbers. - /// There is no guarantee on the actual precision. - /// + /// Medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef mediump_float_t mediump_float; - /// High precision floating-point numbers. - /// There is no guarantee on the actual precision. - /// + /// High qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef highp_float_t highp_float; @@ -53,13 +56,18 @@ namespace detail #endif typedef float float32; - typedef double float64; + +# ifndef GLM_FORCE_SINGLE_ONLY + typedef double float64; +# endif//GLM_FORCE_SINGLE_ONLY //////////////////// // check type sizes #ifndef GLM_STATIC_ASSERT_NULL GLM_STATIC_ASSERT(sizeof(glm::float32) == 4, "float32 size isn't 4 bytes on this platform"); - GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform"); +# ifndef GLM_FORCE_SINGLE_ONLY + GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform"); +# endif//GLM_FORCE_SINGLE_ONLY #endif//GLM_STATIC_ASSERT_NULL /// @} diff --git a/external/include/glm/detail/type_gentype.hpp b/external/include/glm/detail/type_gentype.hpp index 8fd202e..b45cdf4 100644 --- a/external/include/glm/detail/type_gentype.hpp +++ b/external/include/glm/detail/type_gentype.hpp @@ -13,13 +13,13 @@ namespace glm }; typedef std::size_t sizeType; - + namespace detail { template < - typename VALTYPE, - template <typename> class TYPE + typename VALTYPE, + template<typename> class TYPE > struct genType { @@ -35,15 +35,15 @@ namespace detail typedef sizeType size_type; static bool is_vector(); static bool is_matrix(); - + typedef TYPE<VALTYPE> type; typedef TYPE<VALTYPE> * pointer; typedef TYPE<VALTYPE> const * const_pointer; typedef TYPE<VALTYPE> const * const const_pointer_const; typedef TYPE<VALTYPE> * const pointer_const; typedef TYPE<VALTYPE> & reference; - typedef TYPE<VALTYPE> const & const_reference; - typedef TYPE<VALTYPE> const & param_type; + typedef TYPE<VALTYPE> const& const_reference; + typedef TYPE<VALTYPE> const& param_type; ////////////////////////////////////// // Address (Implementation details) @@ -64,15 +64,15 @@ namespace detail template < - typename VALTYPE, - template <typename> class TYPE + typename VALTYPE, + template<typename> class TYPE > bool genType<VALTYPE, TYPE>::is_vector() { return true; } /* - template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice> + template<typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice> class base { public: @@ -97,46 +97,46 @@ namespace detail static bool is_matrix(); private: - // Data - col_type value[colT]; + // Data + col_type value[colT]; public: ////////////////////////////////////// // Constructors base(); - base(class_type const & m); + base(class_type const& m); - explicit base(T const & x); + explicit base(T const& x); explicit base(value_type const * const x); explicit base(col_type const * const x); ////////////////////////////////////// // Conversions - template <typename vU, uint cU, uint rU, profile pU> - explicit base(base<vU, cU, rU, pU> const & m); + template<typename vU, uint cU, uint rU, profile pU> + explicit base(base<vU, cU, rU, pU> const& m); ////////////////////////////////////// // Accesses col_type& operator[](size_type i); - col_type const & operator[](size_type i) const; + col_type const& operator[](size_type i) const; ////////////////////////////////////// // Unary updatable operators - class_type& operator= (class_type const & x); - class_type& operator+= (T const & x); - class_type& operator+= (class_type const & x); - class_type& operator-= (T const & x); - class_type& operator-= (class_type const & x); - class_type& operator*= (T const & x); - class_type& operator*= (class_type const & x); - class_type& operator/= (T const & x); - class_type& operator/= (class_type const & x); + class_type& operator= (class_type const& x); + class_type& operator+= (T const& x); + class_type& operator+= (class_type const& x); + class_type& operator-= (T const& x); + class_type& operator-= (class_type const& x); + class_type& operator*= (T const& x); + class_type& operator*= (class_type const& x); + class_type& operator/= (T const& x); + class_type& operator/= (class_type const& x); class_type& operator++ (); class_type& operator-- (); }; */ - - //template <typename T> + + //template<typename T> //struct traits //{ // static const bool is_signed = false; @@ -147,29 +147,29 @@ namespace detail // static const bool is_genIType = false; // static const bool is_genUType = false; //}; - - //template <> + + //template<> //struct traits<half> //{ // static const bool is_float = true; // static const bool is_genType = true; //}; - - //template <> + + //template<> //struct traits<float> //{ // static const bool is_float = true; // static const bool is_genType = true; //}; - - //template <> + + //template<> //struct traits<double> //{ // static const bool is_float = true; // static const bool is_genType = true; //}; - - //template <typename genType> + + //template<typename genType> //struct desc //{ // typedef genType type; @@ -180,15 +180,15 @@ namespace detail // typedef genType & reference; // typedef genType const& const_reference; // typedef genType const& param_type; - + // typedef typename genType::value_type value_type; // typedef typename genType::size_type size_type; // static const typename size_type value_size; //}; - - //template <typename genType> + + //template<typename genType> //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size(); - + }//namespace detail }//namespace glm diff --git a/external/include/glm/detail/type_gentype.inl b/external/include/glm/detail/type_gentype.inl index 6a90288..60ffa9a 100644 --- a/external/include/glm/detail/type_gentype.inl +++ b/external/include/glm/detail/type_gentype.inl @@ -7,37 +7,37 @@ namespace detail{ ///////////////////////////////// // Static functions -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size() { return cT; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size() { return rT; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size() { return rT * cT; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> bool base<vT, cT, rT, pT>::is_scalar() { return rT == 1 && cT == 1; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> bool base<vT, cT, rT, pT>::is_vector() { return rT == 1; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> bool base<vT, cT, rT, pT>::is_matrix() { return rT != 1; @@ -46,16 +46,16 @@ bool base<vT, cT, rT, pT>::is_matrix() ///////////////////////////////// // Constructor -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> base<vT, cT, rT, pT>::base() { memset(&this->value, 0, cT * rT * sizeof(vT)); } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> base<vT, cT, rT, pT>::base ( - typename base<vT, cT, rT, pT>::class_type const & m + typename base<vT, cT, rT, pT>::class_type const& m ) { for @@ -69,10 +69,10 @@ base<vT, cT, rT, pT>::base } } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> base<vT, cT, rT, pT>::base ( - typename base<vT, cT, rT, pT>::T const & x + typename base<vT, cT, rT, pT>::T const& x ) { if(rT == 1) // vector @@ -105,7 +105,7 @@ base<vT, cT, rT, pT>::base } } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> base<vT, cT, rT, pT>::base ( typename base<vT, cT, rT, pT>::value_type const * const x @@ -114,7 +114,7 @@ base<vT, cT, rT, pT>::base memcpy(&this->value, &x.value, cT * rT * sizeof(vT)); } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> base<vT, cT, rT, pT>::base ( typename base<vT, cT, rT, pT>::col_type const * const x @@ -131,11 +131,11 @@ base<vT, cT, rT, pT>::base } } -template <typename vT, uint cT, uint rT, profile pT> -template <typename vU, uint cU, uint rU, profile pU> +template<typename vT, uint cT, uint rT, profile pT> +template<typename vU, uint cU, uint rU, profile pU> base<vT, cT, rT, pT>::base ( - base<vU, cU, rU, pU> const & m + base<vU, cU, rU, pU> const& m ) { for @@ -152,7 +152,7 @@ base<vT, cT, rT, pT>::base ////////////////////////////////////// // Accesses -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[] ( typename base<vT, cT, rT, pT>::size_type i @@ -161,8 +161,8 @@ typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[] return this->value[i]; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[] +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::col_type const& base<vT, cT, rT, pT>::operator[] ( typename base<vT, cT, rT, pT>::size_type i ) const @@ -173,20 +173,20 @@ typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[] ////////////////////////////////////// // Unary updatable operators -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator= ( - typename base<vT, cT, rT, pT>::class_type const & x + typename base<vT, cT, rT, pT>::class_type const& x ) { memcpy(&this->value, &x.value, cT * rT * sizeof(vT)); return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= ( - typename base<vT, cT, rT, pT>::T const & x + typename base<vT, cT, rT, pT>::T const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -199,10 +199,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= ( - typename base<vT, cT, rT, pT>::class_type const & x + typename base<vT, cT, rT, pT>::class_type const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -215,10 +215,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= ( - typename base<vT, cT, rT, pT>::T const & x + typename base<vT, cT, rT, pT>::T const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -231,10 +231,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= ( - typename base<vT, cT, rT, pT>::class_type const & x + typename base<vT, cT, rT, pT>::class_type const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -247,10 +247,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= ( - typename base<vT, cT, rT, pT>::T const & x + typename base<vT, cT, rT, pT>::T const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -263,10 +263,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= ( - typename base<vT, cT, rT, pT>::class_type const & x + typename base<vT, cT, rT, pT>::class_type const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -279,10 +279,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= ( - typename base<vT, cT, rT, pT>::T const & x + typename base<vT, cT, rT, pT>::T const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -295,10 +295,10 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= return *this; } -template <typename vT, uint cT, uint rT, profile pT> -typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= +template<typename vT, uint cT, uint rT, profile pT> +typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= ( - typename base<vT, cT, rT, pT>::class_type const & x + typename base<vT, cT, rT, pT>::class_type const& x ) { typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size(); @@ -311,7 +311,7 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= return *this; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ () { typename base<vT, cT, rT, pT>::size_type stop_col = col_size(); @@ -324,7 +324,7 @@ typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ () return *this; } -template <typename vT, uint cT, uint rT, profile pT> +template<typename vT, uint cT, uint rT, profile pT> typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- () { typename base<vT, cT, rT, pT>::size_type stop_col = col_size(); diff --git a/external/include/glm/detail/type_half.hpp b/external/include/glm/detail/type_half.hpp index c3ef617..57f7dec 100644 --- a/external/include/glm/detail/type_half.hpp +++ b/external/include/glm/detail/type_half.hpp @@ -11,7 +11,7 @@ namespace detail typedef short hdata; GLM_FUNC_DECL float toFloat32(hdata value); - GLM_FUNC_DECL hdata toFloat16(float const & value); + GLM_FUNC_DECL hdata toFloat16(float const& value); }//namespace detail }//namespace glm diff --git a/external/include/glm/detail/type_half.inl b/external/include/glm/detail/type_half.inl index 78d3e26..29e8160 100644 --- a/external/include/glm/detail/type_half.inl +++ b/external/include/glm/detail/type_half.inl @@ -8,7 +8,7 @@ namespace detail { volatile float f = 1e10; - for(int i = 0; i < 10; ++i) + for(int i = 0; i < 10; ++i) f *= f; // this will overflow before the for loop terminates return f; } @@ -46,7 +46,7 @@ namespace detail // detail::uif32 result; - result.i = (unsigned int)(s << 31); + result.i = static_cast<unsigned int>(s << 31); return result.f; } else @@ -74,7 +74,7 @@ namespace detail // uif32 result; - result.i = (unsigned int)((s << 31) | 0x7f800000); + result.i = static_cast<unsigned int>((s << 31) | 0x7f800000); return result.f; } else @@ -84,7 +84,7 @@ namespace detail // uif32 result; - result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13)); + result.i = static_cast<unsigned int>((s << 31) | 0x7f800000 | (m << 13)); return result.f; } } @@ -101,15 +101,15 @@ namespace detail // uif32 Result; - Result.i = (unsigned int)((s << 31) | (e << 23) | m); + Result.i = static_cast<unsigned int>((s << 31) | (e << 23) | m); return Result.f; } - GLM_FUNC_QUALIFIER hdata toFloat16(float const & f) + GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) { uif32 Entry; Entry.f = f; - int i = (int)Entry.i; + int i = static_cast<int>(Entry.i); // // Our floating point number, f, is represented by the bit @@ -149,7 +149,7 @@ namespace detail // whose magnitude is less than __half_NRM_MIN. // // We convert f to a denormalized half. - // + // m = (m | 0x00800000) >> (1 - e); @@ -160,9 +160,9 @@ namespace detail // our number normalized. Because of the way a half's bits // are laid out, we don't have to treat this case separately; // the code below will handle it correctly. - // + // - if(m & 0x00001000) + if(m & 0x00001000) m += 0x00002000; // @@ -188,7 +188,7 @@ namespace detail // F is a NAN; we produce a half NAN that preserves // the sign bit and the 10 leftmost bits of the // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn + // leftmost bits are all zero, the NAN would turn // into an infinity, so we have to set at least one // bit in the significand. // diff --git a/external/include/glm/detail/type_int.hpp b/external/include/glm/detail/type_int.hpp index 764a32c..c8b1d15 100644 --- a/external/include/glm/detail/type_int.hpp +++ b/external/include/glm/detail/type_int.hpp @@ -20,7 +20,7 @@ namespace detail typedef std::int16_t int16; typedef std::int32_t int32; typedef std::int64_t int64; - + typedef std::uint8_t uint8; typedef std::uint16_t uint16; typedef std::uint32_t uint32; @@ -29,41 +29,41 @@ namespace detail # if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available typedef int64_t sint64; typedef uint64_t uint64; - + # elif GLM_COMPILER & GLM_COMPILER_VC typedef signed __int64 sint64; typedef unsigned __int64 uint64; - + # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic ignored "-Wlong-long" __extension__ typedef signed long long sint64; __extension__ typedef unsigned long long uint64; - + # elif (GLM_COMPILER & GLM_COMPILER_CLANG) # pragma clang diagnostic ignored "-Wc++11-long-long" typedef signed long long sint64; typedef unsigned long long uint64; - + # else//unknown compiler typedef signed long long sint64; typedef unsigned long long uint64; # endif//GLM_COMPILER - + typedef signed char int8; typedef signed short int16; typedef signed int int32; typedef sint64 int64; - + typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef uint64 uint64; #endif// - + typedef signed int lowp_int_t; typedef signed int mediump_int_t; typedef signed int highp_int_t; - + typedef unsigned int lowp_uint_t; typedef unsigned int mediump_uint_t; typedef unsigned int highp_uint_t; @@ -73,129 +73,129 @@ namespace detail using std::make_unsigned; # else//GLM_HAS_MAKE_SIGNED - template <typename genType> + template<typename genType> struct make_signed {}; - template <> + template<> struct make_signed<char> { typedef char type; }; - template <> + template<> struct make_signed<short> { typedef short type; }; - template <> + template<> struct make_signed<int> { typedef int type; }; - template <> + template<> struct make_signed<long> { typedef long type; }; - - template <> + + template<> struct make_signed<unsigned char> { typedef char type; }; - template <> + template<> struct make_signed<unsigned short> { typedef short type; }; - template <> + template<> struct make_signed<unsigned int> { typedef int type; }; - template <> + template<> struct make_signed<unsigned long> { typedef long type; }; - template <typename genType> + template<typename genType> struct make_unsigned {}; - template <> + template<> struct make_unsigned<char> { typedef unsigned char type; }; - template <> + template<> struct make_unsigned<short> { typedef unsigned short type; }; - template <> + template<> struct make_unsigned<int> { typedef unsigned int type; }; - template <> + template<> struct make_unsigned<long> { typedef unsigned long type; }; - template <> + template<> struct make_unsigned<unsigned char> { typedef unsigned char type; }; - template <> + template<> struct make_unsigned<unsigned short> { typedef unsigned short type; }; - template <> + template<> struct make_unsigned<unsigned int> { typedef unsigned int type; }; - template <> + template<> struct make_unsigned<unsigned long> { typedef unsigned long type; }; - template <> + template<> struct make_signed<long long> { typedef long long type; }; - - template <> + + template<> struct make_signed<unsigned long long> { typedef long long type; }; - - template <> + + template<> struct make_unsigned<long long> { typedef unsigned long long type; }; - - template <> + + template<> struct make_unsigned<unsigned long long> { typedef unsigned long long type; @@ -207,7 +207,7 @@ namespace detail typedef detail::int16 int16; typedef detail::int32 int32; typedef detail::int64 int64; - + typedef detail::uint8 uint8; typedef detail::uint16 uint16; typedef detail::uint32 uint32; @@ -216,44 +216,44 @@ namespace detail /// @addtogroup core_precision /// @{ - /// Low precision signed integer. - /// There is no guarantee on the actual precision. - /// + /// Low qualifier signed integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::lowp_int_t lowp_int; - /// Medium precision signed integer. - /// There is no guarantee on the actual precision. - /// + /// Medium qualifier signed integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::mediump_int_t mediump_int; - /// High precision signed integer. - /// There is no guarantee on the actual precision. - /// + /// High qualifier signed integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::highp_int_t highp_int; - /// Low precision unsigned integer. - /// There is no guarantee on the actual precision. - /// + /// Low qualifier unsigned integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::lowp_uint_t lowp_uint; - /// Medium precision unsigned integer. - /// There is no guarantee on the actual precision. - /// + /// Medium qualifier unsigned integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::mediump_uint_t mediump_uint; - /// High precision unsigned integer. - /// There is no guarantee on the actual precision. - /// + /// High qualifier unsigned integer. + /// There is no guarantee on the actual qualifier. + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> typedef detail::highp_uint_t highp_uint; @@ -283,7 +283,7 @@ namespace detail #endif /// Unsigned integer type. - /// + /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> typedef unsigned int uint; diff --git a/external/include/glm/detail/type_mat.hpp b/external/include/glm/detail/type_mat.hpp index aad74e5..db839b3 100644 --- a/external/include/glm/detail/type_mat.hpp +++ b/external/include/glm/detail/type_mat.hpp @@ -3,335 +3,334 @@ #pragma once -#include "precision.hpp" +#include "qualifier.hpp" namespace glm{ namespace detail { - template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType> + template<length_t C, length_t R, typename T, qualifier Q> struct outerProduct_trait{}; }//namespace detail - template <typename T, precision P> struct tvec2; - template <typename T, precision P> struct tvec3; - template <typename T, precision P> struct tvec4; - template <typename T, precision P> struct tmat2x2; - template <typename T, precision P> struct tmat2x3; - template <typename T, precision P> struct tmat2x4; - template <typename T, precision P> struct tmat3x2; - template <typename T, precision P> struct tmat3x3; - template <typename T, precision P> struct tmat3x4; - template <typename T, precision P> struct tmat4x2; - template <typename T, precision P> struct tmat4x3; - template <typename T, precision P> struct tmat4x4; - - template <typename T, precision P, template <typename, precision> class matType> - GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m); +#if GLM_HAS_TEMPLATE_ALIASES + template <typename T, qualifier Q = defaultp> using tmat2x2 = mat<2, 2, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat2x3 = mat<2, 3, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat2x4 = mat<2, 4, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat3x2 = mat<3, 2, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat3x3 = mat<3, 3, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat3x4 = mat<3, 4, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat4x2 = mat<4, 2, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat4x3 = mat<4, 3, T, Q>; + template <typename T, qualifier Q = defaultp> using tmat4x4 = mat<4, 4, T, Q>; +#endif//GLM_HAS_TEMPLATE_ALIASES + + template<length_t C, length_t R, typename T, qualifier Q> + GLM_FUNC_DECL mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m); /// @addtogroup core_precision /// @{ - - /// 2 columns of 2 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 2 columns of 2 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, lowp> lowp_mat2; - - /// 2 columns of 2 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 2, float, lowp> lowp_mat2; + + /// 2 columns of 2 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, mediump> mediump_mat2; - - /// 2 columns of 2 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 2, float, mediump> mediump_mat2; + + /// 2 columns of 2 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, highp> highp_mat2; - - /// 2 columns of 2 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 2, float, highp> highp_mat2; + + /// 2 columns of 2 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, lowp> lowp_mat2x2; - - /// 2 columns of 2 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 2, float, lowp> lowp_mat2x2; + + /// 2 columns of 2 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, mediump> mediump_mat2x2; - - /// 2 columns of 2 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 2, float, mediump> mediump_mat2x2; + + /// 2 columns of 2 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<float, highp> highp_mat2x2; - + typedef mat<2, 2, float, highp> highp_mat2x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 2 columns of 3 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 2 columns of 3 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<float, lowp> lowp_mat2x3; - - /// 2 columns of 3 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 3, float, lowp> lowp_mat2x3; + + /// 2 columns of 3 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<float, mediump> mediump_mat2x3; - - /// 2 columns of 3 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 3, float, mediump> mediump_mat2x3; + + /// 2 columns of 3 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<float, highp> highp_mat2x3; - + typedef mat<2, 3, float, highp> highp_mat2x3; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 2 columns of 4 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 2 columns of 4 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<float, lowp> lowp_mat2x4; - - /// 2 columns of 4 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 4, float, lowp> lowp_mat2x4; + + /// 2 columns of 4 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<float, mediump> mediump_mat2x4; - - /// 2 columns of 4 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<2, 4, float, mediump> mediump_mat2x4; + + /// 2 columns of 4 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<float, highp> highp_mat2x4; - + typedef mat<2, 4, float, highp> highp_mat2x4; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 2 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 3 columns of 2 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<float, lowp> lowp_mat3x2; - - /// 3 columns of 2 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 2, float, lowp> lowp_mat3x2; + + /// 3 columns of 2 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<float, mediump> mediump_mat3x2; - - /// 3 columns of 2 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 2, float, mediump> mediump_mat3x2; + + /// 3 columns of 2 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<float, highp> highp_mat3x2; - + typedef mat<3, 2, float, highp> highp_mat3x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 3 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 3 columns of 3 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, lowp> lowp_mat3; - - /// 3 columns of 3 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 3, float, lowp> lowp_mat3; + + /// 3 columns of 3 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, mediump> mediump_mat3; - - /// 3 columns of 3 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 3, float, mediump> mediump_mat3; + + /// 3 columns of 3 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, highp> highp_mat3; - - /// 3 columns of 3 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 3, float, highp> highp_mat3; + + /// 3 columns of 3 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, lowp> lowp_mat3x3; - - /// 3 columns of 3 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 3, float, lowp> lowp_mat3x3; + + /// 3 columns of 3 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, mediump> mediump_mat3x3; - - /// 3 columns of 3 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 3, float, mediump> mediump_mat3x3; + + /// 3 columns of 3 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, highp> highp_mat3x3; - + typedef mat<3, 3, float, highp> highp_mat3x3; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 4 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 3 columns of 4 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<float, lowp> lowp_mat3x4; - - /// 3 columns of 4 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 4, float, lowp> lowp_mat3x4; + + /// 3 columns of 4 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<float, mediump> mediump_mat3x4; - - /// 3 columns of 4 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<3, 4, float, mediump> mediump_mat3x4; + + /// 3 columns of 4 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<float, highp> highp_mat3x4; - + typedef mat<3, 4, float, highp> highp_mat3x4; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 4 columns of 2 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 4 columns of 2 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<float, lowp> lowp_mat4x2; - - /// 4 columns of 2 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 2, float, lowp> lowp_mat4x2; + + /// 4 columns of 2 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<float, mediump> mediump_mat4x2; - - /// 4 columns of 2 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 2, float, mediump> mediump_mat4x2; + + /// 4 columns of 2 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<float, highp> highp_mat4x2; - + typedef mat<4, 2, float, highp> highp_mat4x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 4 columns of 3 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 4 columns of 3 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<float, lowp> lowp_mat4x3; - - /// 4 columns of 3 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 3, float, lowp> lowp_mat4x3; + + /// 4 columns of 3 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<float, mediump> mediump_mat4x3; - - /// 4 columns of 3 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 3, float, mediump> mediump_mat4x3; + + /// 4 columns of 3 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<float, highp> highp_mat4x3; - + typedef mat<4, 3, float, highp> highp_mat4x3; + /// @} - - + + /// @addtogroup core_precision /// @{ - - /// 4 columns of 4 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + + /// 4 columns of 4 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, lowp> lowp_mat4; - - /// 4 columns of 4 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 4, float, lowp> lowp_mat4; + + /// 4 columns of 4 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, mediump> mediump_mat4; - - /// 4 columns of 4 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 4, float, mediump> mediump_mat4; + + /// 4 columns of 4 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, highp> highp_mat4; - - /// 4 columns of 4 components matrix of low precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 4, float, highp> highp_mat4; + + /// 4 columns of 4 components matrix of low qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, lowp> lowp_mat4x4; - - /// 4 columns of 4 components matrix of medium precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 4, float, lowp> lowp_mat4x4; + + /// 4 columns of 4 components matrix of medium qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, mediump> mediump_mat4x4; - - /// 4 columns of 4 components matrix of high precision floating-point numbers. - /// There is no guarantee on the actual precision. + typedef mat<4, 4, float, mediump> mediump_mat4x4; + + /// 4 columns of 4 components matrix of high qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<float, highp> highp_mat4x4; - + typedef mat<4, 4, float, highp> highp_mat4x4; + /// @} - + /// @addtogroup core_types /// @{ - + ////////////////////////// // Float definition - + #if(defined(GLM_PRECISION_LOWP_FLOAT)) typedef lowp_mat2x2 mat2x2; typedef lowp_mat2x3 mat2x3; @@ -352,333 +351,333 @@ namespace detail typedef mediump_mat4x2 mat4x2; typedef mediump_mat4x3 mat4x3; typedef mediump_mat4x4 mat4x4; -#else +#else //! 2 columns of 2 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat2x2 mat2x2; - + //! 2 columns of 3 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat2x3 mat2x3; - + //! 2 columns of 4 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat2x4 mat2x4; - + //! 3 columns of 2 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat3x2 mat3x2; - + //! 3 columns of 3 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat3x3 mat3x3; - + //! 3 columns of 4 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat3x4 mat3x4; - + //! 4 columns of 2 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat4x2 mat4x2; - + //! 4 columns of 3 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat4x3 mat4x3; - + //! 4 columns of 4 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_mat4x4 mat4x4; - + #endif//GLM_PRECISION - + //! 2 columns of 2 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef mat2x2 mat2; - + //! 3 columns of 3 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef mat3x3 mat3; - + //! 4 columns of 4 components matrix of floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef mat4x4 mat4; - + ////////////////////////// // Double definition - + /// @addtogroup core_precision /// @{ - - /// 2 columns of 2 components matrix of low precision floating-point numbers. + + /// 2 columns of 2 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, lowp> lowp_dmat2; - - /// 2 columns of 2 components matrix of medium precision floating-point numbers. + typedef mat<2, 2, double, lowp> lowp_dmat2; + + /// 2 columns of 2 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, mediump> mediump_dmat2; - - /// 2 columns of 2 components matrix of high precision floating-point numbers. + typedef mat<2, 2, double, mediump> mediump_dmat2; + + /// 2 columns of 2 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, highp> highp_dmat2; - - /// 2 columns of 2 components matrix of low precision floating-point numbers. + typedef mat<2, 2, double, highp> highp_dmat2; + + /// 2 columns of 2 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, lowp> lowp_dmat2x2; - - /// 2 columns of 2 components matrix of medium precision floating-point numbers. + typedef mat<2, 2, double, lowp> lowp_dmat2x2; + + /// 2 columns of 2 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, mediump> mediump_dmat2x2; - - /// 2 columns of 2 components matrix of high precision floating-point numbers. + typedef mat<2, 2, double, mediump> mediump_dmat2x2; + + /// 2 columns of 2 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x2<double, highp> highp_dmat2x2; - + typedef mat<2, 2, double, highp> highp_dmat2x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 2 columns of 3 components matrix of low precision floating-point numbers. + + /// 2 columns of 3 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<double, lowp> lowp_dmat2x3; - - /// 2 columns of 3 components matrix of medium precision floating-point numbers. + typedef mat<2, 3, double, lowp> lowp_dmat2x3; + + /// 2 columns of 3 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<double, mediump> mediump_dmat2x3; - - /// 2 columns of 3 components matrix of high precision floating-point numbers. + typedef mat<2, 3, double, mediump> mediump_dmat2x3; + + /// 2 columns of 3 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x3<double, highp> highp_dmat2x3; - + typedef mat<2, 3, double, highp> highp_dmat2x3; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 2 columns of 4 components matrix of low precision floating-point numbers. + + /// 2 columns of 4 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<double, lowp> lowp_dmat2x4; - - /// 2 columns of 4 components matrix of medium precision floating-point numbers. + typedef mat<2, 4, double, lowp> lowp_dmat2x4; + + /// 2 columns of 4 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<double, mediump> mediump_dmat2x4; - - /// 2 columns of 4 components matrix of high precision floating-point numbers. + typedef mat<2, 4, double, mediump> mediump_dmat2x4; + + /// 2 columns of 4 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat2x4<double, highp> highp_dmat2x4; - + typedef mat<2, 4, double, highp> highp_dmat2x4; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 2 components matrix of low precision floating-point numbers. + + /// 3 columns of 2 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<double, lowp> lowp_dmat3x2; - - /// 3 columns of 2 components matrix of medium precision floating-point numbers. + typedef mat<3, 2, double, lowp> lowp_dmat3x2; + + /// 3 columns of 2 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<double, mediump> mediump_dmat3x2; - - /// 3 columns of 2 components matrix of high precision floating-point numbers. + typedef mat<3, 2, double, mediump> mediump_dmat3x2; + + /// 3 columns of 2 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x2<double, highp> highp_dmat3x2; - + typedef mat<3, 2, double, highp> highp_dmat3x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 3 components matrix of low precision floating-point numbers. + + /// 3 columns of 3 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<float, lowp> lowp_dmat3; - - /// 3 columns of 3 components matrix of medium precision floating-point numbers. + typedef mat<3, 3, float, lowp> lowp_dmat3; + + /// 3 columns of 3 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<double, mediump> mediump_dmat3; - - /// 3 columns of 3 components matrix of high precision floating-point numbers. + typedef mat<3, 3, double, mediump> mediump_dmat3; + + /// 3 columns of 3 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<double, highp> highp_dmat3; - - /// 3 columns of 3 components matrix of low precision floating-point numbers. + typedef mat<3, 3, double, highp> highp_dmat3; + + /// 3 columns of 3 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<double, lowp> lowp_dmat3x3; - - /// 3 columns of 3 components matrix of medium precision floating-point numbers. + typedef mat<3, 3, double, lowp> lowp_dmat3x3; + + /// 3 columns of 3 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<double, mediump> mediump_dmat3x3; - - /// 3 columns of 3 components matrix of high precision floating-point numbers. + typedef mat<3, 3, double, mediump> mediump_dmat3x3; + + /// 3 columns of 3 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x3<double, highp> highp_dmat3x3; - + typedef mat<3, 3, double, highp> highp_dmat3x3; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 3 columns of 4 components matrix of low precision floating-point numbers. + + /// 3 columns of 4 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<double, lowp> lowp_dmat3x4; - - /// 3 columns of 4 components matrix of medium precision floating-point numbers. + typedef mat<3, 4, double, lowp> lowp_dmat3x4; + + /// 3 columns of 4 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<double, mediump> mediump_dmat3x4; - - /// 3 columns of 4 components matrix of high precision floating-point numbers. + typedef mat<3, 4, double, mediump> mediump_dmat3x4; + + /// 3 columns of 4 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat3x4<double, highp> highp_dmat3x4; - + typedef mat<3, 4, double, highp> highp_dmat3x4; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 4 columns of 2 components matrix of low precision floating-point numbers. + + /// 4 columns of 2 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<double, lowp> lowp_dmat4x2; - - /// 4 columns of 2 components matrix of medium precision floating-point numbers. + typedef mat<4, 2, double, lowp> lowp_dmat4x2; + + /// 4 columns of 2 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<double, mediump> mediump_dmat4x2; - - /// 4 columns of 2 components matrix of high precision floating-point numbers. + typedef mat<4, 2, double, mediump> mediump_dmat4x2; + + /// 4 columns of 2 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x2<double, highp> highp_dmat4x2; - + typedef mat<4, 2, double, highp> highp_dmat4x2; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 4 columns of 3 components matrix of low precision floating-point numbers. + + /// 4 columns of 3 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<double, lowp> lowp_dmat4x3; - - /// 4 columns of 3 components matrix of medium precision floating-point numbers. + typedef mat<4, 3, double, lowp> lowp_dmat4x3; + + /// 4 columns of 3 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<double, mediump> mediump_dmat4x3; - - /// 4 columns of 3 components matrix of high precision floating-point numbers. + typedef mat<4, 3, double, mediump> mediump_dmat4x3; + + /// 4 columns of 3 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x3<double, highp> highp_dmat4x3; - + typedef mat<4, 3, double, highp> highp_dmat4x3; + /// @} - + /// @addtogroup core_precision /// @{ - - /// 4 columns of 4 components matrix of low precision floating-point numbers. + + /// 4 columns of 4 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, lowp> lowp_dmat4; - - /// 4 columns of 4 components matrix of medium precision floating-point numbers. + typedef mat<4, 4, double, lowp> lowp_dmat4; + + /// 4 columns of 4 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, mediump> mediump_dmat4; - - /// 4 columns of 4 components matrix of high precision floating-point numbers. + typedef mat<4, 4, double, mediump> mediump_dmat4; + + /// 4 columns of 4 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, highp> highp_dmat4; - - /// 4 columns of 4 components matrix of low precision floating-point numbers. + typedef mat<4, 4, double, highp> highp_dmat4; + + /// 4 columns of 4 components matrix of low qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, lowp> lowp_dmat4x4; - - /// 4 columns of 4 components matrix of medium precision floating-point numbers. + typedef mat<4, 4, double, lowp> lowp_dmat4x4; + + /// 4 columns of 4 components matrix of medium qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, mediump> mediump_dmat4x4; - - /// 4 columns of 4 components matrix of high precision floating-point numbers. + typedef mat<4, 4, double, mediump> mediump_dmat4x4; + + /// 4 columns of 4 components matrix of high qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tmat4x4<double, highp> highp_dmat4x4; - + typedef mat<4, 4, double, highp> highp_dmat4x4; + /// @} - + #if(defined(GLM_PRECISION_LOWP_DOUBLE)) typedef lowp_dmat2x2 dmat2x2; typedef lowp_dmat2x3 dmat2x3; @@ -700,68 +699,68 @@ namespace detail typedef mediump_dmat4x3 dmat4x3; typedef mediump_dmat4x4 dmat4x4; #else //defined(GLM_PRECISION_HIGHP_DOUBLE) - - //! 2 * 2 matrix of double-precision floating-point numbers. + + //! 2 * 2 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat2x2 dmat2; - - //! 3 * 3 matrix of double-precision floating-point numbers. + + //! 3 * 3 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat3x3 dmat3; - - //! 4 * 4 matrix of double-precision floating-point numbers. + + //! 4 * 4 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat4x4 dmat4; - - //! 2 * 2 matrix of double-precision floating-point numbers. + + //! 2 * 2 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat2x2 dmat2x2; - - //! 2 * 3 matrix of double-precision floating-point numbers. + + //! 2 * 3 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat2x3 dmat2x3; - - //! 2 * 4 matrix of double-precision floating-point numbers. + + //! 2 * 4 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat2x4 dmat2x4; - - //! 3 * 2 matrix of double-precision floating-point numbers. + + //! 3 * 2 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat3x2 dmat3x2; - - /// 3 * 3 matrix of double-precision floating-point numbers. + + /// 3 * 3 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat3x3 dmat3x3; - - /// 3 * 4 matrix of double-precision floating-point numbers. + + /// 3 * 4 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat3x4 dmat3x4; - - /// 4 * 2 matrix of double-precision floating-point numbers. + + /// 4 * 2 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat4x2 dmat4x2; - - /// 4 * 3 matrix of double-precision floating-point numbers. + + /// 4 * 3 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat4x3 dmat4x3; - - /// 4 * 4 matrix of double-precision floating-point numbers. + + /// 4 * 4 matrix of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> typedef highp_dmat4x4 dmat4x4; #endif//GLM_PRECISION - + /// @} }//namespace glm diff --git a/external/include/glm/detail/type_mat2x2.hpp b/external/include/glm/detail/type_mat2x2.hpp index e7fde26..47e28cb 100644 --- a/external/include/glm/detail/type_mat2x2.hpp +++ b/external/include/glm/detail/type_mat2x2.hpp @@ -11,171 +11,170 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat2x2 + template<typename T, qualifier Q> + struct mat<2, 2, T, Q> { - typedef tvec2<T, P> col_type; - typedef tvec2<T, P> row_type; - typedef tmat2x2<T, P> type; - typedef tmat2x2<T, P> transpose_type; + typedef vec<2, T, Q> col_type; + typedef vec<2, T, Q> row_type; + typedef mat<2, 2, T, Q> type; + typedef mat<2, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: - // -- Constructors -- + // -- Accesses -- - GLM_FUNC_DECL tmat2x2() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat2x2(tmat2x2<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m); + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x2(ctor); - GLM_FUNC_DECL explicit tmat2x2(T scalar); - GLM_FUNC_DECL tmat2x2( - T const & x1, T const & y1, - T const & x2, T const & y2); - GLM_FUNC_DECL tmat2x2( - col_type const & v1, - col_type const & v2); + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; - // -- Conversions -- + // -- Constructors -- - template <typename U, typename V, typename M, typename N> - GLM_FUNC_DECL tmat2x2( - U const & x1, V const & y1, - M const & x2, N const & y2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, P> const& m); - template <typename U, typename V> - GLM_FUNC_DECL tmat2x2( - tvec2<U, P> const & v1, - tvec2<V, P> const & v2); + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + T const& x1, T const& y1, + T const& x2, T const& y2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v1, + col_type const& v2); - // -- Matrix conversions -- + // -- Conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x2<U, Q> const & m); + template<typename U, typename V, typename M, typename N> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + U const& x1, V const& y1, + M const& x2, N const& y2); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x3<T, P> const & x); + template<typename U, typename V> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<2, U, Q> const& v1, + vec<2, V, Q> const& v2); - // -- Accesses -- + // -- Matrix conversions -- - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 2;} + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, U, P> const& m); - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<T, P> const & v) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 2, T, Q> & operator=(mat<2, 2, T, Q> const& v) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat2x2<T, P> & operator++ (); - GLM_FUNC_DECL tmat2x2<T, P> & operator-- (); - GLM_FUNC_DECL tmat2x2<T, P> operator++(int); - GLM_FUNC_DECL tmat2x2<T, P> operator--(int); + GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); + GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); + GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); + GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator*(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator*(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); } //namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat2x2.inl b/external/include/glm/detail/type_mat2x2.inl index 02c5ee8..72971d8 100644 --- a/external/include/glm/detail/type_mat2x2.inl +++ b/external/include/glm/detail/type_mat2x2.inl @@ -1,17 +1,17 @@ /// @ref core /// @file glm/detail/type_mat2x2.inl -#include "func_matrix.hpp" +#include "../matrix.hpp" namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); # endif @@ -19,46 +19,42 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x2<T, P>::tmat2x2(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0); this->value[1] = col_type(0, scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat ( - T const & x0, T const & y0, - T const & x1, T const & y1 + T const& x0, T const& y0, + T const& x1, T const& y1 ) { this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(col_type const & v0, col_type const & v1) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) { this->value[0] = v0; this->value[1] = v1; @@ -66,21 +62,21 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template <typename X1, typename Y1, typename X2, typename Y2> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2 + template<typename T, qualifier Q> + template<typename X1, typename Y1, typename X2, typename Y2> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat ( - X1 const & x1, Y1 const & y1, - X2 const & x2, Y2 const & y2 + X1 const& x1, Y1 const& y1, + X2 const& x2, Y2 const& y2 ) { this->value[0] = col_type(static_cast<T>(x1), value_type(y1)); this->value[1] = col_type(static_cast<T>(x2), value_type(y2)); } - - template <typename T, precision P> - template <typename V1, typename V2> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tvec2<V1, P> const & v1, tvec2<V2, P> const & v2) + + template<typename T, qualifier Q> + template<typename V1, typename V2> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) { this->value[0] = col_type(v1); this->value[1] = col_type(v2); @@ -88,65 +84,65 @@ namespace glm // -- mat2x2 matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -154,15 +150,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type const & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -171,8 +167,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -180,237 +176,237 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) { this->value[0] += scalar; this->value[1] += scalar; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(tmat2x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) { this->value[0] -= scalar; this->value[1] -= scalar; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(tmat2x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) { this->value[0] *= scalar; this->value[1] *= scalar; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(tmat2x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) { return (*this = *this * m); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) { this->value[0] /= scalar; this->value[1] /= scalar; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(tmat2x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) { - tmat2x2<T, P> Result(*this); + mat<2, 2, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) { - tmat2x2<T, P> Result(*this); + mat<2, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) { - return tmat2x2<T, P>( - -m[0], + return mat<2, 2, T, Q>( + -m[0], -m[1]); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] + scalar, m[1] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] + scalar, m[1] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] - scalar, m[1] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( scalar - m[0], scalar - m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* ( - tmat2x2<T, P> const & m, - typename tmat2x2<T, P>::row_type const & v + mat<2, 2, T, Q> const& m, + typename mat<2, 2, T, Q>::row_type const& v ) { - return tvec2<T, P>( + return vec<2, T, Q>( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* ( - typename tmat2x2<T, P>::col_type const & v, - tmat2x2<T, P> const & m + typename mat<2, 2, T, Q>::col_type const& v, + mat<2, 2, T, Q> const& m ) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], @@ -419,10 +415,10 @@ namespace glm m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], @@ -433,51 +429,51 @@ namespace glm m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( m[0] / scalar, m[1] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) { - return tmat2x2<T, P>( + return mat<2, 2, T, Q>( scalar / m[0], scalar / m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) { return inverse(m) * v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) { return v * inverse(m); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) - { - tmat2x2<T, P> m1_copy(m1); + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) + { + mat<2, 2, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } diff --git a/external/include/glm/detail/type_mat2x3.hpp b/external/include/glm/detail/type_mat2x3.hpp index db55886..0f4b43a 100644 --- a/external/include/glm/detail/type_mat2x3.hpp +++ b/external/include/glm/detail/type_mat2x3.hpp @@ -12,152 +12,151 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat2x3 + template<typename T, qualifier Q> + struct mat<2, 3, T, Q> { - typedef tvec3<T, P> col_type; - typedef tvec2<T, P> row_type; - typedef tmat2x3<T, P> type; - typedef tmat3x2<T, P> transpose_type; + typedef vec<3, T, Q> col_type; + typedef vec<2, T, Q> row_type; + typedef mat<2, 3, T, Q> type; + typedef mat<3, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat2x3() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat2x3(tmat2x3<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x3(ctor); - GLM_FUNC_DECL explicit tmat2x3(T scalar); - GLM_FUNC_DECL tmat2x3( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T z0, T x1, T y1, T z1); - GLM_FUNC_DECL tmat2x3( - col_type const & v0, - col_type const & v1); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1); // -- Conversions -- - template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> - GLM_FUNC_DECL tmat2x3( + template<typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2); - template <typename U, typename V> - GLM_FUNC_DECL tmat2x3( - tvec3<U, P> const & v1, - tvec3<V, P> const & v2); + template<typename U, typename V> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<3, U, Q> const& v1, + vec<3, V, Q> const& v2); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x3<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 2;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator+=(tmat2x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator-=(tmat2x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x3<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 3, T, Q> & operator=(mat<2, 3, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat2x3<T, P> & operator++ (); - GLM_FUNC_DECL tmat2x3<T, P> & operator-- (); - GLM_FUNC_DECL tmat2x3<T, P> operator++(int); - GLM_FUNC_DECL tmat2x3<T, P> operator--(int); + GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); + GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); + GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); + GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator*(tmat2x3<T, P> const & m, typename tmat2x3<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator*(typename tmat2x3<T, P>::col_type const & v, tmat2x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat2x3.inl b/external/include/glm/detail/type_mat2x3.inl index b0f8337..de9cbf0 100644 --- a/external/include/glm/detail/type_mat2x3.inl +++ b/external/include/glm/detail/type_mat2x3.inl @@ -5,11 +5,11 @@ namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); # endif @@ -17,35 +17,31 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x3<T, P>::tmat2x3(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0, 0); this->value[1] = col_type(0, scalar, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat ( T x0, T y0, T z0, T x1, T y1, T z1 @@ -55,8 +51,8 @@ namespace glm this->value[1] = col_type(x1, y1, z1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(col_type const & v0, col_type const & v1) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) { this->value[0] = v0; this->value[1] = v1; @@ -64,11 +60,11 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2 @@ -77,10 +73,10 @@ namespace glm this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1)); this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2)); } - - template <typename T, precision P> - template <typename V1, typename V2> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tvec3<V1, P> const & v1, tvec3<V2, P> const & v2) + + template<typename T, qualifier Q> + template<typename V1, typename V2> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) { this->value[0] = col_type(v1); this->value[1] = col_type(v2); @@ -88,65 +84,65 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -154,15 +150,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type const & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -171,8 +167,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -180,63 +176,63 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator+=(tmat2x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(tmat2x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -245,131 +241,131 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) { - tmat2x3<T, P> Result(*this); + mat<2, 3, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) { - tmat2x3<T, P> Result(*this); + mat<2, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( -m[0], -m[1]); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m[0] + scalar, m[1] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m[0] - scalar, m[1] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* ( - tmat2x3<T, P> const & m, - typename tmat2x3<T, P>::row_type const & v) + mat<2, 3, T, Q> const& m, + typename mat<2, 3, T, Q>::row_type const& v) { - return typename tmat2x3<T, P>::col_type( + return typename mat<2, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y, m[0][2] * v.x + m[1][2] * v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::row_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* ( - typename tmat2x3<T, P>::col_type const & v, - tmat2x3<T, P> const & m) + typename mat<2, 3, T, Q>::col_type const& v, + mat<2, 3, T, Q> const& m) { - return typename tmat2x3<T, P>::row_type( + return typename mat<2, 3, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], @@ -378,8 +374,8 @@ namespace glm m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { T SrcA00 = m1[0][0]; T SrcA01 = m1[0][1]; @@ -395,7 +391,7 @@ namespace glm T SrcB20 = m2[2][0]; T SrcB21 = m2[2][1]; - tmat3x3<T, P> Result(uninitialize); + mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; @@ -408,10 +404,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], @@ -426,32 +422,32 @@ namespace glm m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m[0] / scalar, m[1] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( scalar / m[0], scalar / m[1]); } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } diff --git a/external/include/glm/detail/type_mat2x4.hpp b/external/include/glm/detail/type_mat2x4.hpp index c9d195f..366f783 100644 --- a/external/include/glm/detail/type_mat2x4.hpp +++ b/external/include/glm/detail/type_mat2x4.hpp @@ -12,154 +12,153 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat2x4 + template<typename T, qualifier Q> + struct mat<2, 4, T, Q> { - typedef tvec4<T, P> col_type; - typedef tvec2<T, P> row_type; - typedef tmat2x4<T, P> type; - typedef tmat4x2<T, P> transpose_type; + typedef vec<4, T, Q> col_type; + typedef vec<2, T, Q> row_type; + typedef mat<2, 4, T, Q> type; + typedef mat<4, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat2x4() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat2x4(tmat2x4<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat2x4(tmat2x4<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x4(ctor); - GLM_FUNC_DECL explicit tmat2x4(T scalar); - GLM_FUNC_DECL tmat2x4( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1); - GLM_FUNC_DECL tmat2x4( - col_type const & v0, - col_type const & v1); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1); // -- Conversions -- - template < + template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL tmat2x4( + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2); - template <typename U, typename V> - GLM_FUNC_DECL tmat2x4( - tvec4<U, P> const & v1, - tvec4<V, P> const & v2); + template<typename U, typename V> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<4, U, Q> const& v1, + vec<4, V, Q> const& v2); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x4<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 2;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator+=(tmat2x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator-=(tmat2x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat2x4<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 4, T, Q> & operator=(mat<2, 4, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat2x4<T, P> & operator++ (); - GLM_FUNC_DECL tmat2x4<T, P> & operator-- (); - GLM_FUNC_DECL tmat2x4<T, P> operator++(int); - GLM_FUNC_DECL tmat2x4<T, P> operator--(int); + GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); + GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); + GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); + GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator*(T scalar, tmat2x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x4<T, P>::col_type operator*(tmat2x4<T, P> const & m, typename tmat2x4<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat2x4<T, P>::row_type operator*(typename tmat2x4<T, P>::col_type const & v, tmat2x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat2x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator/(tmat2x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator/(T scalar, tmat2x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat2x4.inl b/external/include/glm/detail/type_mat2x4.inl index 74af34c..0f3f631 100644 --- a/external/include/glm/detail/type_mat2x4.inl +++ b/external/include/glm/detail/type_mat2x4.inl @@ -5,11 +5,11 @@ namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); # endif @@ -17,36 +17,32 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x4<T, P>::tmat2x4(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(T scalar) { value_type const Zero(0); this->value[0] = col_type(scalar, Zero, Zero, Zero); this->value[1] = col_type(Zero, scalar, Zero, Zero); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat ( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1 @@ -56,8 +52,8 @@ namespace glm this->value[1] = col_type(x1, y1, z1, w1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(col_type const & v0, col_type const & v1) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) { this->value[0] = v0; this->value[1] = v1; @@ -65,11 +61,11 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2 @@ -78,10 +74,10 @@ namespace glm this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1)); this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2)); } - - template <typename T, precision P> - template <typename V1, typename V2> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tvec4<V1, P> const & v1, tvec4<V2, P> const & v2) + + template<typename T, qualifier Q> + template<typename V1, typename V2> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) { this->value[0] = col_type(v1); this->value[1] = col_type(v2); @@ -89,65 +85,65 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -155,15 +151,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type & tmat2x4<T, P>::operator[](typename tmat2x4<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type const & tmat2x4<T, P>::operator[](typename tmat2x4<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -172,8 +168,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator=(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -181,63 +177,63 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator=(tmat2x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator+=(tmat2x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator-=(tmat2x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat2x4<T, P> & tmat2x4<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -246,124 +242,124 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> tmat2x4<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) { - tmat2x4<T, P> Result(*this); + mat<2, 4, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> tmat2x4<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) { - tmat2x4<T, P> Result(*this); + mat<2, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) { - return tmat2x4<T, P>( - -m[0], + return mat<2, 4, T, Q>( + -m[0], -m[1]); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m[0] + scalar, m[1] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m[0] - scalar, m[1] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat2x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(T scalar, tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m[0] * scalar, m[1] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type operator*(tmat2x4<T, P> const & m, typename tmat2x4<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) { - return typename tmat2x4<T, P>::col_type( + return typename mat<2, 4, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y, m[0][2] * v.x + m[1][2] * v.y, m[0][3] * v.x + m[1][3] * v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::row_type operator*(typename tmat2x4<T, P>::col_type const & v, tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) { - return typename tmat2x4<T, P>::row_type( + return typename mat<2, 4, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { T SrcA00 = m1[0][0]; T SrcA01 = m1[0][1]; @@ -383,7 +379,7 @@ namespace glm T SrcB30 = m2[3][0]; T SrcB31 = m2[3][1]; - tmat4x4<T, P> Result(uninitialize); + mat<4, 4, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; @@ -403,10 +399,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat2x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], @@ -417,10 +413,10 @@ namespace glm m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], @@ -435,32 +431,32 @@ namespace glm m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator/(tmat2x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m[0] / scalar, m[1] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator/(T scalar, tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( scalar / m[0], scalar / m[1]); } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } diff --git a/external/include/glm/detail/type_mat3x2.hpp b/external/include/glm/detail/type_mat3x2.hpp index 8549745..cb7f0bb 100644 --- a/external/include/glm/detail/type_mat3x2.hpp +++ b/external/include/glm/detail/type_mat3x2.hpp @@ -12,36 +12,43 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat3x2 + template<typename T, qualifier Q> + struct mat<3, 2, T, Q> { - typedef tvec2<T, P> col_type; - typedef tvec3<T, P> row_type; - typedef tmat3x2<T, P> type; - typedef tmat2x3<T, P> transpose_type; + typedef vec<2, T, Q> col_type; + typedef vec<3, T, Q> row_type; + typedef mat<3, 2, T, Q> type; + typedef mat<2, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat3x2() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat3x2(tmat3x2<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat3x2(tmat3x2<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x2(ctor); - GLM_FUNC_DECL explicit tmat3x2(T scalar); - GLM_FUNC_DECL tmat3x2( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T x1, T y1, T x2, T y2); - GLM_FUNC_DECL tmat3x2( - col_type const & v0, - col_type const & v1, - col_type const & v2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2); // -- Conversions -- @@ -49,122 +56,114 @@ namespace glm typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3> - GLM_FUNC_DECL tmat3x2( + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, X2 x2, Y2 y2, X3 x3, Y3 y3); - template <typename V1, typename V2, typename V3> - GLM_FUNC_DECL tmat3x2( - tvec2<V1, P> const & v1, - tvec2<V2, P> const & v2, - tvec2<V3, P> const & v3); + template<typename V1, typename V2, typename V3> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<2, V1, Q> const& v1, + vec<2, V2, Q> const& v2, + vec<2, V3, Q> const& v3); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x2<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 3;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator+=(tmat3x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator-=(tmat3x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x2<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 2, T, Q> & operator=(mat<3, 2, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat3x2<T, P> & operator++ (); - GLM_FUNC_DECL tmat3x2<T, P> & operator-- (); - GLM_FUNC_DECL tmat3x2<T, P> operator++(int); - GLM_FUNC_DECL tmat3x2<T, P> operator--(int); + GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); + GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); + GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); + GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator*(T scalar, tmat3x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x2<T, P>::col_type operator*(tmat3x2<T, P> const & m, typename tmat3x2<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x2<T, P>::row_type operator*(typename tmat3x2<T, P>::col_type const & v, tmat3x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator/(tmat3x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator/(T scalar, tmat3x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); }//namespace glm diff --git a/external/include/glm/detail/type_mat3x2.inl b/external/include/glm/detail/type_mat3x2.inl index 2a1b8bd..9b789d0 100644 --- a/external/include/glm/detail/type_mat3x2.inl +++ b/external/include/glm/detail/type_mat3x2.inl @@ -5,11 +5,11 @@ namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); this->value[2] = col_type(0, 0); @@ -18,8 +18,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -27,29 +27,25 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; this->value[2] = m.value[2]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x2<T, P>::tmat3x2(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0); this->value[1] = col_type(0, scalar); this->value[2] = col_type(0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat ( T x0, T y0, T x1, T y1, @@ -61,12 +57,12 @@ namespace glm this->value[2] = col_type(x2, y2); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2 + col_type const& v0, + col_type const& v1, + col_type const& v2 ) { this->value[0] = v0; @@ -76,12 +72,12 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat ( X1 x1, Y1 y1, X2 x2, Y2 y2, @@ -93,13 +89,13 @@ namespace glm this->value[2] = col_type(static_cast<T>(x3), value_type(y3)); } - template <typename T, precision P> - template <typename V1, typename V2, typename V3> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2 + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat ( - tvec2<V1, P> const & v1, - tvec2<V2, P> const & v2, - tvec2<V3, P> const & v3 + vec<2, V1, Q> const& v1, + vec<2, V2, Q> const& v2, + vec<2, V3, Q> const& v3 ) { this->value[0] = col_type(v1); @@ -109,73 +105,73 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(T(0)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(T(0)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -184,15 +180,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type & tmat3x2<T, P>::operator[](typename tmat3x2<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type const & tmat3x2<T, P>::operator[](typename tmat3x2<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -201,8 +197,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator=(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -211,9 +207,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator=(tmat3x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -221,9 +217,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -231,9 +227,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator+=(tmat3x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -241,9 +237,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -251,9 +247,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator-=(tmat3x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -261,9 +257,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -271,9 +267,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x2<T, P> & tmat3x2<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -283,8 +279,8 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -292,8 +288,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -301,34 +297,34 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> tmat3x2<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) { - tmat3x2<T, P> Result(*this); + mat<3, 2, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> tmat3x2<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) { - tmat3x2<T, P> Result(*this); + mat<3, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( -m[0], -m[1], -m[2]); @@ -336,79 +332,79 @@ namespace glm // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat3x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(T scalar, tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type operator*(tmat3x2<T, P> const & m, typename tmat3x2<T, P>::row_type const & v) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) { - return typename tmat3x2<T, P>::col_type( + return typename mat<3, 2, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::row_type operator*(typename tmat3x2<T, P>::col_type const & v, tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) { - return typename tmat3x2<T, P>::row_type( + return typename mat<3, 2, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1], v.x * m[2][0] + v.y * m[2][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { const T SrcA00 = m1[0][0]; const T SrcA01 = m1[0][1]; @@ -424,7 +420,7 @@ namespace glm const T SrcB11 = m2[1][1]; const T SrcB12 = m2[1][2]; - tmat2x2<T, P> Result(uninitialize); + mat<2, 2, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; @@ -432,10 +428,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], @@ -444,10 +440,10 @@ namespace glm m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], @@ -458,19 +454,19 @@ namespace glm m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator/(tmat3x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator/(T scalar, tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); @@ -478,14 +474,14 @@ namespace glm // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } diff --git a/external/include/glm/detail/type_mat3x3.hpp b/external/include/glm/detail/type_mat3x3.hpp index d5ebe62..f6e2d15 100644 --- a/external/include/glm/detail/type_mat3x3.hpp +++ b/external/include/glm/detail/type_mat3x3.hpp @@ -11,36 +11,43 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat3x3 + template<typename T, qualifier Q> + struct mat<3, 3, T, Q> { - typedef tvec3<T, P> col_type; - typedef tvec3<T, P> row_type; - typedef tmat3x3<T, P> type; - typedef tmat3x3<T, P> transpose_type; + typedef vec<3, T, Q> col_type; + typedef vec<3, T, Q> row_type; + typedef mat<3, 3, T, Q> type; + typedef mat<3, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat3x3() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat3x3(tmat3x3<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat3x3(tmat3x3<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x3(ctor); - GLM_FUNC_DECL explicit tmat3x3(T scalar); - GLM_FUNC_DECL tmat3x3( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T z0, T x1, T y1, T z1, T x2, T y2, T z2); - GLM_FUNC_DECL tmat3x3( - col_type const & v0, - col_type const & v1, - col_type const & v2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2); // -- Conversions -- @@ -48,141 +55,133 @@ namespace glm typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3> - GLM_FUNC_DECL tmat3x3( + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2, X3 x3, Y3 y3, Z3 z3); - template <typename V1, typename V2, typename V3> - GLM_FUNC_DECL tmat3x3( - tvec3<V1, P> const & v1, - tvec3<V2, P> const & v2, - tvec3<V3, P> const & v3); + template<typename V1, typename V2, typename V3> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<3, V1, Q> const& v1, + vec<3, V2, Q> const& v2, + vec<3, V3, Q> const& v3); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x3<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 3;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator+=(tmat3x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator-=(tmat3x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator*=(tmat3x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator/=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x3<T, P> & operator/=(tmat3x3<U, P> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 3, T, Q> & operator=(mat<3, 3, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat3x3<T, P> & operator++(); - GLM_FUNC_DECL tmat3x3<T, P> & operator--(); - GLM_FUNC_DECL tmat3x3<T, P> operator++(int); - GLM_FUNC_DECL tmat3x3<T, P> operator--(int); + GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); + GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); + GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); + GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator+(T scalar, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator-(T scalar, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator*(T scalar, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator*(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator*(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator/(T scalar, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator/(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator/(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat3x3.inl b/external/include/glm/detail/type_mat3x3.inl index 324cca3..81338a3 100644 --- a/external/include/glm/detail/type_mat3x3.inl +++ b/external/include/glm/detail/type_mat3x3.inl @@ -1,17 +1,17 @@ /// @ref core /// @file glm/detail/type_mat3x3.inl -#include "func_matrix.hpp" +#include "../matrix.hpp" namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); this->value[2] = col_type(0, 0, 1); @@ -20,8 +20,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -29,29 +29,25 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; this->value[2] = m.value[2]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x3<T, P>::tmat3x3(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0, 0); this->value[1] = col_type(0, scalar, 0); this->value[2] = col_type(0, 0, scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat ( T x0, T y0, T z0, T x1, T y1, T z1, @@ -63,12 +59,12 @@ namespace glm this->value[2] = col_type(x2, y2, z2); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2 + col_type const& v0, + col_type const& v1, + col_type const& v2 ) { this->value[0] = v0; @@ -78,12 +74,12 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2, @@ -94,14 +90,14 @@ namespace glm this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2)); this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3)); } - - template <typename T, precision P> - template <typename V1, typename V2, typename V3> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3 + + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat ( - tvec3<V1, P> const & v1, - tvec3<V2, P> const & v2, - tvec3<V3, P> const & v3 + vec<3, V1, Q> const& v1, + vec<3, V2, Q> const& v2, + vec<3, V3, Q> const& v3 ) { this->value[0] = col_type(v1); @@ -111,73 +107,73 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = col_type(0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -186,15 +182,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type & tmat3x3<T, P>::operator[](typename tmat3x3<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type const & tmat3x3<T, P>::operator[](typename tmat3x3<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -203,8 +199,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator=(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -213,9 +209,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator=(tmat3x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -223,9 +219,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -233,9 +229,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator+=(tmat3x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -243,9 +239,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -253,9 +249,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator-=(tmat3x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -263,9 +259,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -273,16 +269,16 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator*=(tmat3x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) { return (*this = *this * m); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -290,17 +286,17 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator/=(tmat3x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -308,8 +304,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -317,133 +313,133 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> tmat3x3<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) { - tmat3x3<T, P> Result(*this); + mat<3, 3, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> tmat3x3<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) { - tmat3x3<T, P> Result(*this); + mat<3, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) { - return tmat3x3<T, P>( - -m[0], + return mat<3, 3, T, Q>( + -m[0], -m[1], -m[2]); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(T scalar, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(T scalar, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( scalar - m[0], scalar - m[1], scalar - m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat3x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(T scalar, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type operator*(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) { - return typename tmat3x3<T, P>::col_type( + return typename mat<3, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::row_type operator*(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) { - return typename tmat3x3<T, P>::row_type( + return typename mat<3, 3, T, Q>::row_type( m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; @@ -465,7 +461,7 @@ namespace glm T const SrcB21 = m2[2][1]; T const SrcB22 = m2[2][2]; - tmat3x3<T, P> Result(uninitialize); + mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; @@ -478,10 +474,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], @@ -490,10 +486,10 @@ namespace glm m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], @@ -508,53 +504,53 @@ namespace glm m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(tmat3x3<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(T scalar, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) { - return tmat3x3<T, P>( + return mat<3, 3, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type operator/(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) { return inverse(m) * v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::row_type operator/(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) { return v * inverse(m); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { - tmat3x3<T, P> m1_copy(m1); + mat<3, 3, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } diff --git a/external/include/glm/detail/type_mat3x4.hpp b/external/include/glm/detail/type_mat3x4.hpp index c5bb9a9..7e02d6e 100644 --- a/external/include/glm/detail/type_mat3x4.hpp +++ b/external/include/glm/detail/type_mat3x4.hpp @@ -12,36 +12,43 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat3x4 + template<typename T, qualifier Q> + struct mat<3, 4, T, Q> { - typedef tvec4<T, P> col_type; - typedef tvec3<T, P> row_type; - typedef tmat3x4<T, P> type; - typedef tmat4x3<T, P> transpose_type; + typedef vec<4, T, Q> col_type; + typedef vec<3, T, Q> row_type; + typedef mat<3, 4, T, Q> type; + typedef mat<4, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat3x4() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat3x4(tmat3x4<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x4(ctor); - GLM_FUNC_DECL explicit tmat3x4(T scalar); - GLM_FUNC_DECL tmat3x4( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1, T x2, T y2, T z2, T w2); - GLM_FUNC_DECL tmat3x4( - col_type const & v0, - col_type const & v1, - col_type const & v2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2); // -- Conversions -- @@ -49,122 +56,114 @@ namespace glm typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_DECL tmat3x4( + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2, X3 x3, Y3 y3, Z3 z3, W3 w3); - template <typename V1, typename V2, typename V3> - GLM_FUNC_DECL tmat3x4( - tvec4<V1, P> const & v1, - tvec4<V2, P> const & v2, - tvec4<V3, P> const & v3); + template<typename V1, typename V2, typename V3> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<4, V1, Q> const& v1, + vec<4, V2, Q> const& v2, + vec<4, V3, Q> const& v3); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x4<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 3;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator+=(tmat3x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator-=(tmat3x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat3x4<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 4, T, Q> & operator=(mat<3, 4, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat3x4<T, P> & operator++(); - GLM_FUNC_DECL tmat3x4<T, P> & operator--(); - GLM_FUNC_DECL tmat3x4<T, P> operator++(int); - GLM_FUNC_DECL tmat3x4<T, P> operator--(int); + GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); + GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); + GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); + GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator*(T scalar, tmat3x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator*(tmat3x4<T, P> const & m, typename tmat3x4<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator*(typename tmat3x4<T, P>::col_type const & v, tmat3x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator/(T scalar, tmat3x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat3x4.inl b/external/include/glm/detail/type_mat3x4.inl index 3596f26..c8562d1 100644 --- a/external/include/glm/detail/type_mat3x4.inl +++ b/external/include/glm/detail/type_mat3x4.inl @@ -5,11 +5,11 @@ namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); this->value[2] = col_type(0, 0, 1, 0); @@ -18,8 +18,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -27,29 +27,25 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; this->value[2] = m.value[2]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x4<T, P>::tmat3x4(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0, 0, 0); this->value[1] = col_type(0, scalar, 0, 0); this->value[2] = col_type(0, 0, scalar, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat ( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1, @@ -61,12 +57,12 @@ namespace glm this->value[2] = col_type(x2, y2, z2, w2); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2 + col_type const& v0, + col_type const& v1, + col_type const& v2 ) { this->value[0] = v0; @@ -76,12 +72,12 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2, @@ -92,90 +88,90 @@ namespace glm this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2)); this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3), value_type(w3)); } - - template <typename T, precision P> - template <typename V1, typename V2, typename V3> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4 + + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat ( - tvec4<V1, P> const & v1, - tvec4<V2, P> const & v2, - tvec4<V3, P> const & v3 + vec<4, V1, Q> const& v1, + vec<4, V2, Q> const& v2, + vec<4, V3, Q> const& v3 ) { this->value[0] = col_type(v1); this->value[1] = col_type(v2); this->value[2] = col_type(v3); } - + // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(0, 0, 1, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(m[2], 1, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(m[2], 1, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -184,15 +180,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type & tmat3x4<T, P>::operator[](typename tmat3x4<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type const & tmat3x4<T, P>::operator[](typename tmat3x4<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -201,8 +197,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator=(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -211,9 +207,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator=(tmat3x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -221,9 +217,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -231,9 +227,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator+=(tmat3x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -241,9 +237,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -251,9 +247,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator-=(tmat3x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -261,9 +257,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -271,9 +267,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat3x4<T, P> & tmat3x4<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -283,8 +279,8 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -292,8 +288,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -301,34 +297,34 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> tmat3x4<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) { - tmat3x4<T, P> Result(*this); + mat<3, 4, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> tmat3x4<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) { - tmat3x4<T, P> Result(*this); + mat<3, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( -m[0], -m[1], -m[2]); @@ -336,89 +332,89 @@ namespace glm // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(T scalar, tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* ( - tmat3x4<T, P> const & m, - typename tmat3x4<T, P>::row_type const & v + mat<3, 4, T, Q> const& m, + typename mat<3, 4, T, Q>::row_type const& v ) { - return typename tmat3x4<T, P>::col_type( + return typename mat<3, 4, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::row_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* ( - typename tmat3x4<T, P>::col_type const & v, - tmat3x4<T, P> const & m + typename mat<3, 4, T, Q>::col_type const& v, + mat<3, 4, T, Q> const& m ) { - return typename tmat3x4<T, P>::row_type( + return typename mat<3, 4, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { const T SrcA00 = m1[0][0]; const T SrcA01 = m1[0][1]; @@ -446,7 +442,7 @@ namespace glm const T SrcB31 = m2[3][1]; const T SrcB32 = m2[3][2]; - tmat4x4<T, P> Result(uninitialize); + mat<4, 4, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; @@ -466,10 +462,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], @@ -480,10 +476,10 @@ namespace glm m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], @@ -498,19 +494,19 @@ namespace glm m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator/(T scalar, tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); @@ -518,14 +514,14 @@ namespace glm // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } diff --git a/external/include/glm/detail/type_mat4x2.hpp b/external/include/glm/detail/type_mat4x2.hpp index a899d94..9064dd3 100644 --- a/external/include/glm/detail/type_mat4x2.hpp +++ b/external/include/glm/detail/type_mat4x2.hpp @@ -12,164 +12,163 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat4x2 + template<typename T, qualifier Q> + struct mat<4, 2, T, Q> { - typedef tvec2<T, P> col_type; - typedef tvec4<T, P> row_type; - typedef tmat4x2<T, P> type; - typedef tmat2x4<T, P> transpose_type; + typedef vec<2, T, Q> col_type; + typedef vec<4, T, Q> row_type; + typedef mat<4, 2, T, Q> type; + typedef mat<2, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat4x2() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, P> const& m); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x2(ctor); - GLM_FUNC_DECL explicit tmat4x2(T scalar); - GLM_FUNC_DECL tmat4x2( + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( T x0, T y0, T x1, T y1, T x2, T y2, T x3, T y3); - GLM_FUNC_DECL tmat4x2( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3); // -- Conversions -- - template < + template< typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3, typename X4, typename Y4> - GLM_FUNC_DECL tmat4x2( + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( X1 x1, Y1 y1, X2 x2, Y2 y2, X3 x3, Y3 y3, X4 x4, Y4 y4); - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_DECL tmat4x2( - tvec2<V1, P> const & v1, - tvec2<V2, P> const & v2, - tvec2<V3, P> const & v3, - tvec2<V4, P> const & v4); + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<2, V1, Q> const& v1, + vec<2, V2, Q> const& v2, + vec<2, V3, Q> const& v3, + vec<2, V4, Q> const& v4); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x2<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x4<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator+=(tmat4x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator-=(tmat4x2<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x2<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 2, T, Q> & operator=(mat<4, 2, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat4x2<T, P> & operator++ (); - GLM_FUNC_DECL tmat4x2<T, P> & operator-- (); - GLM_FUNC_DECL tmat4x2<T, P> operator++(int); - GLM_FUNC_DECL tmat4x2<T, P> operator--(int); + GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); + GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); + GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); + GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator*(T scalar, tmat4x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x2<T, P> operator/(T scalar, tmat4x2<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat4x2.inl b/external/include/glm/detail/type_mat4x2.inl index 6d83229..f0ac30f 100644 --- a/external/include/glm/detail/type_mat4x2.inl +++ b/external/include/glm/detail/type_mat4x2.inl @@ -3,20 +3,13 @@ namespace glm { -# ifdef GLM_STATIC_CONST_MEMBERS - template<typename T, precision P> - const tmat4x2<T, P> tmat4x2<T, P>::ZERO(static_cast<T>(0)); - - template<typename T, precision P> - const tmat4x2<T, P> tmat4x2<T, P>::IDENTITY(static_cast<T>(1)); -# endif // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); this->value[2] = col_type(0, 0); @@ -26,8 +19,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -36,9 +29,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -46,12 +39,8 @@ namespace glm this->value[3] = m.value[3]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat4x2<T, P>::tmat4x2(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(T scalar) { this->value[0] = col_type(scalar, 0); this->value[1] = col_type(0, scalar); @@ -59,8 +48,8 @@ namespace glm this->value[3] = col_type(0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat ( T x0, T y0, T x1, T y1, @@ -74,13 +63,13 @@ namespace glm this->value[3] = col_type(x3, y3); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3 + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3 ) { this->value[0] = v0; @@ -91,13 +80,13 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3, typename X4, typename Y4> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat ( X1 x1, Y1 y1, X2 x2, Y2 y2, @@ -110,15 +99,15 @@ namespace glm this->value[2] = col_type(static_cast<T>(x3), value_type(y3)); this->value[3] = col_type(static_cast<T>(x4), value_type(y4)); } - - template <typename T, precision P> - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2 + + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat ( - tvec2<V1, P> const & v1, - tvec2<V2, P> const & v2, - tvec2<V3, P> const & v3, - tvec2<V4, P> const & v4 + vec<2, V1, Q> const& v1, + vec<2, V2, Q> const& v2, + vec<2, V3, Q> const& v3, + vec<2, V4, Q> const& v4 ) { this->value[0] = col_type(v1); @@ -129,9 +118,9 @@ namespace glm // -- Conversion -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -139,8 +128,8 @@ namespace glm this->value[3] = col_type(m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -148,8 +137,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -157,8 +146,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -166,8 +155,8 @@ namespace glm this->value[3] = col_type(m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -175,8 +164,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -184,8 +173,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -193,8 +182,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -202,8 +191,8 @@ namespace glm this->value[3] = col_type(m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -213,15 +202,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type & tmat4x2<T, P>::operator[](typename tmat4x2<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type const & tmat4x2<T, P>::operator[](typename tmat4x2<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -230,8 +219,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P>& tmat4x2<T, P>::operator=(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -241,9 +230,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P>& tmat4x2<T, P>::operator=(tmat4x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -252,9 +241,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -263,9 +252,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator+=(tmat4x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -274,9 +263,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -285,9 +274,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator-=(tmat4x2<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -296,9 +285,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -307,9 +296,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -320,8 +309,8 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -330,8 +319,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -340,34 +329,34 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> tmat4x2<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) { - tmat4x2<T, P> Result(*this); + mat<4, 2, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> tmat4x2<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) { - tmat4x2<T, P> Result(*this); + mat<4, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( -m[0], -m[1], -m[2], @@ -376,86 +365,86 @@ namespace glm // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar, m[3] + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar, m[3] - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar, m[3] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(T scalar, tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar, m[3] * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) { - return typename tmat4x2<T, P>::col_type( + return typename mat<4, 2, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) { - return typename tmat4x2<T, P>::row_type( + return typename mat<4, 2, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1], v.x * m[2][0] + v.y * m[2][1], v.x * m[3][0] + v.y * m[3][1]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; @@ -475,7 +464,7 @@ namespace glm T const SrcB12 = m2[1][2]; T const SrcB13 = m2[1][3]; - tmat2x2<T, P> Result(uninitialize); + mat<2, 2, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; @@ -483,10 +472,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { - return tmat3x2<T, P>( + return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], @@ -495,10 +484,10 @@ namespace glm m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], @@ -509,20 +498,20 @@ namespace glm m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar, m[3] / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x2<T, P> operator/(T scalar, tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) { - return tmat4x2<T, P>( + return mat<4, 2, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2], @@ -531,14 +520,14 @@ namespace glm // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } diff --git a/external/include/glm/detail/type_mat4x3.hpp b/external/include/glm/detail/type_mat4x3.hpp index c696735..a17add5 100644 --- a/external/include/glm/detail/type_mat4x3.hpp +++ b/external/include/glm/detail/type_mat4x3.hpp @@ -12,164 +12,163 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat4x3 + template<typename T, qualifier Q> + struct mat<4, 3, T, Q> { - typedef tvec3<T, P> col_type; - typedef tvec4<T, P> row_type; - typedef tmat4x3<T, P> type; - typedef tmat3x4<T, P> transpose_type; + typedef vec<3, T, Q> col_type; + typedef vec<4, T, Q> row_type; + typedef mat<4, 3, T, Q> type; + typedef mat<3, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat4x3() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat4x3(tmat4x3<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat4x3(tmat4x3<T, Q> const & m); - - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x3(ctor); - GLM_FUNC_DECL explicit tmat4x3(T const & x); - GLM_FUNC_DECL tmat4x3( - T const & x0, T const & y0, T const & z0, - T const & x1, T const & y1, T const & z1, - T const & x2, T const & y2, T const & z2, - T const & x3, T const & y3, T const & z3); - GLM_FUNC_DECL tmat4x3( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, P> const& m); + + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T const& x); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + T const& x0, T const& y0, T const& z0, + T const& x1, T const& y1, T const& z1, + T const& x2, T const& y2, T const& z2, + T const& x3, T const& y3, T const& z3); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3); // -- Conversions -- - template < + template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3, typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL tmat4x3( - X1 const & x1, Y1 const & y1, Z1 const & z1, - X2 const & x2, Y2 const & y2, Z2 const & z2, - X3 const & x3, Y3 const & y3, Z3 const & z3, - X4 const & x4, Y4 const & y4, Z4 const & z4); - - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_DECL tmat4x3( - tvec3<V1, P> const & v1, - tvec3<V2, P> const & v2, - tvec3<V3, P> const & v3, - tvec3<V4, P> const & v4); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + X1 const& x1, Y1 const& y1, Z1 const& z1, + X2 const& x2, Y2 const& y2, Z2 const& z2, + X3 const& x3, Y3 const& y3, Z3 const& z3, + X4 const& x4, Y4 const& y4, Z4 const& z4); + + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<3, V1, Q> const& v1, + vec<3, V2, Q> const& v2, + vec<3, V3, Q> const& v3, + vec<3, V4, Q> const& v4); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x3<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x4<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator+=(tmat4x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator-=(tmat4x3<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x3<T, P> & operator/=(U s); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 3, T, Q> & operator=(mat<4, 3, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat4x3<T, P> & operator++(); - GLM_FUNC_DECL tmat4x3<T, P> & operator--(); - GLM_FUNC_DECL tmat4x3<T, P> operator++(int); - GLM_FUNC_DECL tmat4x3<T, P> operator--(int); + GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); + GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); + GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); + GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x3<T, P>::col_type operator*(tmat4x3<T, P> const & m, typename tmat4x3<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x3<T, P>::row_type operator*(typename tmat4x3<T, P>::col_type const & v, tmat4x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat4x3.inl b/external/include/glm/detail/type_mat4x3.inl index cfb408b..df50b00 100644 --- a/external/include/glm/detail/type_mat4x3.inl +++ b/external/include/glm/detail/type_mat4x3.inl @@ -5,11 +5,11 @@ namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); this->value[2] = col_type(0, 0, 1); @@ -19,8 +19,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -29,9 +29,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) { this->value[0] = m.value[0]; this->value[1] = m.value[1]; @@ -39,12 +39,8 @@ namespace glm this->value[3] = m.value[3]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat4x3<T, P>::tmat4x3(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(T const& s) { this->value[0] = col_type(s, 0, 0); this->value[1] = col_type(0, s, 0); @@ -52,13 +48,13 @@ namespace glm this->value[3] = col_type(0, 0, 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat ( - T const & x0, T const & y0, T const & z0, - T const & x1, T const & y1, T const & z1, - T const & x2, T const & y2, T const & z2, - T const & x3, T const & y3, T const & z3 + T const& x0, T const& y0, T const& z0, + T const& x1, T const& y1, T const& z1, + T const& x2, T const& y2, T const& z2, + T const& x3, T const& y3, T const& z3 ) { this->value[0] = col_type(x0, y0, z0); @@ -67,13 +63,13 @@ namespace glm this->value[3] = col_type(x3, y3, z3); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3 + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3 ) { this->value[0] = v0; @@ -84,18 +80,18 @@ namespace glm // -- Conversion constructors -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3, typename X4, typename Y4, typename Z4> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat ( - X1 const & x1, Y1 const & y1, Z1 const & z1, - X2 const & x2, Y2 const & y2, Z2 const & z2, - X3 const & x3, Y3 const & y3, Z3 const & z3, - X4 const & x4, Y4 const & y4, Z4 const & z4 + X1 const& x1, Y1 const& y1, Z1 const& z1, + X2 const& x2, Y2 const& y2, Z2 const& z2, + X3 const& x3, Y3 const& y3, Z3 const& z3, + X4 const& x4, Y4 const& y4, Z4 const& z4 ) { this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1)); @@ -103,15 +99,15 @@ namespace glm this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3)); this->value[3] = col_type(static_cast<T>(x4), value_type(y4), value_type(z4)); } - - template <typename T, precision P> - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3 + + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat ( - tvec3<V1, P> const & v1, - tvec3<V2, P> const & v2, - tvec3<V3, P> const & v3, - tvec3<V4, P> const & v4 + vec<3, V1, Q> const& v1, + vec<3, V2, Q> const& v2, + vec<3, V3, Q> const& v3, + vec<3, V4, Q> const& v4 ) { this->value[0] = col_type(v1); @@ -122,9 +118,9 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<U, Q> const & m) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -132,8 +128,8 @@ namespace glm this->value[3] = col_type(m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -141,8 +137,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -150,8 +146,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -159,8 +155,8 @@ namespace glm this->value[3] = col_type(m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -168,8 +164,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -177,8 +173,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -186,8 +182,8 @@ namespace glm this->value[3] = col_type(0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -195,8 +191,8 @@ namespace glm this->value[3] = col_type(m[3], 0); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -206,15 +202,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type & tmat4x3<T, P>::operator[](typename tmat4x3<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type const & tmat4x3<T, P>::operator[](typename tmat4x3<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -223,8 +219,8 @@ namespace glm // -- Unary updatable operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P>& tmat4x3<T, P>::operator=(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -234,9 +230,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P>& tmat4x3<T, P>::operator=(tmat4x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -245,9 +241,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -256,9 +252,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator+=(tmat4x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -267,9 +263,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -278,9 +274,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator-=(tmat4x3<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -289,9 +285,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -300,9 +296,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -313,8 +309,8 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -323,8 +319,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -333,34 +329,34 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> tmat4x3<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) { - tmat4x3<T, P> Result(*this); + mat<4, 3, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> tmat4x3<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) { - tmat4x3<T, P> Result(*this); + mat<4, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( -m[0], -m[1], -m[2], @@ -369,95 +365,95 @@ namespace glm // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m[0] - s, m[1] - s, m[2] - s, m[3] - s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* ( - tmat4x3<T, P> const & m, - typename tmat4x3<T, P>::row_type const & v) + mat<4, 3, T, Q> const& m, + typename mat<4, 3, T, Q>::row_type const& v) { - return typename tmat4x3<T, P>::col_type( + return typename mat<4, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::row_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* ( - typename tmat4x3<T, P>::col_type const & v, - tmat4x3<T, P> const & m) + typename mat<4, 3, T, Q>::col_type const& v, + mat<4, 3, T, Q> const& m) { - return typename tmat4x3<T, P>::row_type( + return typename mat<4, 3, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { - return tmat2x3<T, P>( + return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], @@ -466,8 +462,8 @@ namespace glm m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; @@ -495,7 +491,7 @@ namespace glm T const SrcB22 = m2[2][2]; T const SrcB23 = m2[2][3]; - tmat3x3<T, P> Result(uninitialize); + mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; @@ -508,10 +504,10 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], @@ -526,20 +522,20 @@ namespace glm m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( m[0] / s, m[1] / s, m[2] / s, m[3] / s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) { - return tmat4x3<T, P>( + return mat<4, 3, T, Q>( s / m[0], s / m[1], s / m[2], @@ -548,14 +544,14 @@ namespace glm // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } diff --git a/external/include/glm/detail/type_mat4x4.hpp b/external/include/glm/detail/type_mat4x4.hpp index 2222d10..694dcd0 100644 --- a/external/include/glm/detail/type_mat4x4.hpp +++ b/external/include/glm/detail/type_mat4x4.hpp @@ -11,183 +11,182 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tmat4x4 + template<typename T, qualifier Q> + struct mat<4, 4, T, Q> { - typedef tvec4<T, P> col_type; - typedef tvec4<T, P> row_type; - typedef tmat4x4<T, P> type; - typedef tmat4x4<T, P> transpose_type; + typedef vec<4, T, Q> col_type; + typedef vec<4, T, Q> row_type; + typedef mat<4, 4, T, Q> type; + typedef mat<4, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: + // -- Accesses -- + + typedef length_t length_type; + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} + + GLM_FUNC_DECL col_type & operator[](length_type i); + GLM_FUNC_DECL col_type const& operator[](length_type i) const; + // -- Constructors -- - GLM_FUNC_DECL tmat4x4() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL tmat4x4(tmat4x4<T, P> const & m) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q> const & m); - - GLM_FUNC_DECL explicit tmat4x4(ctor); - GLM_FUNC_DECL explicit tmat4x4(T const & x); - GLM_FUNC_DECL tmat4x4( - T const & x0, T const & y0, T const & z0, T const & w0, - T const & x1, T const & y1, T const & z1, T const & w1, - T const & x2, T const & y2, T const & z2, T const & w2, - T const & x3, T const & y3, T const & z3, T const & w3); - GLM_FUNC_DECL tmat4x4( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, Q> const& m) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, T, P> const& m); + + GLM_FUNC_DECL explicit GLM_CONSTEXPR_CTOR_CXX14 mat(T const& x); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + T const& x0, T const& y0, T const& z0, T const& w0, + T const& x1, T const& y1, T const& z1, T const& w1, + T const& x2, T const& y2, T const& z2, T const& w2, + T const& x3, T const& y3, T const& z3, T const& w3); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3); // -- Conversions -- - template < + template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3, typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL tmat4x4( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, - X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, - X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4); - - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_DECL tmat4x4( - tvec4<V1, P> const & v1, - tvec4<V2, P> const & v2, - tvec4<V3, P> const & v3, - tvec4<V4, P> const & v4); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, + X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, + X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, + X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); + + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR_CXX14 mat( + vec<4, V1, Q> const& v1, + vec<4, V2, Q> const& v2, + vec<4, V3, Q> const& v3, + vec<4, V4, Q> const& v4); // -- Matrix conversions -- - template <typename U, precision Q> - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x4<U, Q> const & m); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 4, U, P> const& m); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x3<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x2<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x4<T, P> const & x); - GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x3<T, P> const & x); - - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL col_type const & operator[](length_type i) const; + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 3, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<2, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 2, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<3, 4, T, Q> const& x); + GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR_CTOR_CXX14 mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- - GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<T, P> const & m) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator+=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator+=(tmat4x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator-=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator-=(tmat4x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator*=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator*=(tmat4x4<U, P> const & m); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator/=(U s); - template <typename U> - GLM_FUNC_DECL tmat4x4<T, P> & operator/=(tmat4x4<U, P> const & m); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 4, T, Q> & operator=(mat<4, 4, T, Q> const& m) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); + template<typename U> + GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); // -- Increment and decrement operators -- - GLM_FUNC_DECL tmat4x4<T, P> & operator++(); - GLM_FUNC_DECL tmat4x4<T, P> & operator--(); - GLM_FUNC_DECL tmat4x4<T, P> operator++(int); - GLM_FUNC_DECL tmat4x4<T, P> operator--(int); + GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); + GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); + GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); + GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator*(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator*(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - template <typename T, precision P> - GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m); + template<typename T, qualifier Q> + GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - template <typename T, precision P> - GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_mat4x4.inl b/external/include/glm/detail/type_mat4x4.inl index 4b75d94..26157c6 100644 --- a/external/include/glm/detail/type_mat4x4.inl +++ b/external/include/glm/detail/type_mat4x4.inl @@ -1,17 +1,17 @@ /// @ref core /// @file glm/detail/type_mat4x4.inl -#include "func_matrix.hpp" +#include "../matrix.hpp" namespace glm { // -- Constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4() +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat() { -# ifndef GLM_FORCE_NO_CTOR_INIT +# ifdef GLM_FORCE_CTOR_INIT this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); this->value[2] = col_type(0, 0, 1, 0); @@ -21,8 +21,8 @@ namespace glm # endif # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -31,9 +31,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x4<T, Q> const & m) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -41,12 +41,8 @@ namespace glm this->value[3] = m[3]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(T const& s) { this->value[0] = col_type(s, 0, 0, 0); this->value[1] = col_type(0, s, 0, 0); @@ -54,13 +50,13 @@ namespace glm this->value[3] = col_type(0, 0, 0, s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat ( - T const & x0, T const & y0, T const & z0, T const & w0, - T const & x1, T const & y1, T const & z1, T const & w1, - T const & x2, T const & y2, T const & z2, T const & w2, - T const & x3, T const & y3, T const & z3, T const & w3 + T const& x0, T const& y0, T const& z0, T const& w0, + T const& x1, T const& y1, T const& z1, T const& w1, + T const& x2, T const& y2, T const& z2, T const& w2, + T const& x3, T const& y3, T const& z3, T const& w3 ) { this->value[0] = col_type(x0, y0, z0, w0); @@ -69,13 +65,13 @@ namespace glm this->value[3] = col_type(x3, y3, z3, w3); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4 + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat ( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3 + col_type const& v0, + col_type const& v1, + col_type const& v2, + col_type const& v3 ) { this->value[0] = v0; @@ -84,12 +80,9 @@ namespace glm this->value[3] = v3; } - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4 - ( - tmat4x4<U, Q> const & m - ) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) { this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); @@ -99,18 +92,18 @@ namespace glm // -- Conversions -- - template <typename T, precision P> - template < + template<typename T, qualifier Q> + template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3, typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4 + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat ( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, - X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, - X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4 + X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, + X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, + X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, + X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 ) { GLM_STATIC_ASSERT(std::numeric_limits<X1>::is_iec559 || std::numeric_limits<X1>::is_integer || GLM_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); @@ -138,16 +131,16 @@ namespace glm this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3), value_type(w3)); this->value[3] = col_type(static_cast<T>(x4), value_type(y4), value_type(z4), value_type(w4)); } - - template <typename T, precision P> - template <typename V1, typename V2, typename V3, typename V4> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4 + + template<typename T, qualifier Q> + template<typename V1, typename V2, typename V3, typename V4> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat ( - tvec4<V1, P> const & v1, - tvec4<V2, P> const & v2, - tvec4<V3, P> const & v3, - tvec4<V4, P> const & v4 - ) + vec<4, V1, Q> const& v1, + vec<4, V2, Q> const& v2, + vec<4, V3, Q> const& v3, + vec<4, V4, Q> const& v4 + ) { GLM_STATIC_ASSERT(std::numeric_limits<V1>::is_iec559 || std::numeric_limits<V1>::is_integer || GLM_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits<V2>::is_iec559 || std::numeric_limits<V2>::is_integer || GLM_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); @@ -162,8 +155,8 @@ namespace glm // -- Matrix conversions -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); @@ -171,8 +164,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -180,8 +173,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -189,8 +182,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); @@ -198,8 +191,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -207,8 +200,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x2<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) { this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); @@ -216,8 +209,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; @@ -225,8 +218,8 @@ namespace glm this->value[3] = col_type(0, 0, 0, 1); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x3<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR_CXX14 mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) { this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); @@ -236,15 +229,15 @@ namespace glm // -- Accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type & tmat4x4<T, P>::operator[](typename tmat4x4<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type const & tmat4x4<T, P>::operator[](typename tmat4x4<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; @@ -253,8 +246,8 @@ namespace glm // -- Unary arithmetic operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator=(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, T, Q> const& m) { //memcpy could be faster //memcpy(&this->value, &m.value, 16 * sizeof(valType)); @@ -266,9 +259,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator=(tmat4x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) { //memcpy could be faster //memcpy(&this->value, &m.value, 16 * sizeof(valType)); @@ -279,9 +272,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator+=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; @@ -290,9 +283,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator+=(tmat4x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; @@ -301,9 +294,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator-=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; @@ -312,9 +305,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator-=(tmat4x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; @@ -323,9 +316,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator*=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; @@ -334,16 +327,16 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator*=(tmat4x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) { return (*this = *this * m); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator/=(U s) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; @@ -352,17 +345,17 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator/=(tmat4x4<U, P> const & m) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; @@ -371,8 +364,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; @@ -381,34 +374,34 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> tmat4x4<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) { - tmat4x4<T, P> Result(*this); + mat<4, 4, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> tmat4x4<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) { - tmat4x4<T, P> Result(*this); + mat<4, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary constant operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) { return m; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( -m[0], -m[1], -m[2], @@ -417,91 +410,91 @@ namespace glm // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] - s, m[1] - s, m[2] - s, m[3] - s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( s - m[0], s - m[1], s - m[2], s - m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* ( - tmat4x4<T, P> const & m, - typename tmat4x4<T, P>::row_type const & v + mat<4, 4, T, Q> const& m, + typename mat<4, 4, T, Q>::row_type const& v ) { /* @@ -520,24 +513,24 @@ namespace glm __m128 a2 = _mm_add_ps(a0, a1); - return typename tmat4x4<T, P>::col_type(a2); + return typename mat<4, 4, T, Q>::col_type(a2); */ - typename tmat4x4<T, P>::col_type const Mov0(v[0]); - typename tmat4x4<T, P>::col_type const Mov1(v[1]); - typename tmat4x4<T, P>::col_type const Mul0 = m[0] * Mov0; - typename tmat4x4<T, P>::col_type const Mul1 = m[1] * Mov1; - typename tmat4x4<T, P>::col_type const Add0 = Mul0 + Mul1; - typename tmat4x4<T, P>::col_type const Mov2(v[2]); - typename tmat4x4<T, P>::col_type const Mov3(v[3]); - typename tmat4x4<T, P>::col_type const Mul2 = m[2] * Mov2; - typename tmat4x4<T, P>::col_type const Mul3 = m[3] * Mov3; - typename tmat4x4<T, P>::col_type const Add1 = Mul2 + Mul3; - typename tmat4x4<T, P>::col_type const Add2 = Add0 + Add1; + typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); + typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); + typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; + typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; + typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; + typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); + typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); + typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; + typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; + typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; + typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; return Add2; /* - return typename tmat4x4<T, P>::col_type( + return typename mat<4, 4, T, Q>::col_type( m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], @@ -545,24 +538,24 @@ namespace glm */ } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::row_type operator* + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* ( - typename tmat4x4<T, P>::col_type const & v, - tmat4x4<T, P> const & m + typename mat<4, 4, T, Q>::col_type const& v, + mat<4, 4, T, Q> const& m ) { - return typename tmat4x4<T, P>::row_type( + return typename mat<4, 4, T, Q>::row_type( m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { - return tmat2x4<T, P>( + return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], @@ -573,10 +566,10 @@ namespace glm m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { - return tmat3x4<T, P>( + return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], @@ -591,20 +584,20 @@ namespace glm m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - typename tmat4x4<T, P>::col_type const SrcA0 = m1[0]; - typename tmat4x4<T, P>::col_type const SrcA1 = m1[1]; - typename tmat4x4<T, P>::col_type const SrcA2 = m1[2]; - typename tmat4x4<T, P>::col_type const SrcA3 = m1[3]; + typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; + typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; + typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; + typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; - typename tmat4x4<T, P>::col_type const SrcB0 = m2[0]; - typename tmat4x4<T, P>::col_type const SrcB1 = m2[1]; - typename tmat4x4<T, P>::col_type const SrcB2 = m2[2]; - typename tmat4x4<T, P>::col_type const SrcB3 = m2[3]; + typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; + typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; + typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; + typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; - tmat4x4<T, P> Result(uninitialize); + mat<4, 4, T, Q> Result; Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; @@ -612,55 +605,55 @@ namespace glm return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( m[0] / s, m[1] / s, m[2] / s, m[3] / s); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) { - return tmat4x4<T, P>( + return mat<4, 4, T, Q>( s / m[0], s / m[1], s / m[2], s / m[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) { return inverse(m) * v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) { return v * inverse(m); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { - tmat4x4<T, P> m1_copy(m1); + mat<4, 4, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } diff --git a/external/include/glm/detail/type_vec.hpp b/external/include/glm/detail/type_vec.hpp index 7849db6..cf4f34c 100644 --- a/external/include/glm/detail/type_vec.hpp +++ b/external/include/glm/detail/type_vec.hpp @@ -3,13 +3,14 @@ #pragma once -#include "precision.hpp" +#include "qualifier.hpp" #include "type_int.hpp" +#include "compute_vector_relational.hpp" namespace glm{ namespace detail { - template <typename T, std::size_t size, bool aligned> + template<typename T, std::size_t size, bool aligned> struct storage { typedef struct type { @@ -18,7 +19,7 @@ namespace detail }; #define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ - template <typename T> \ + template<typename T> \ struct storage<T, x, true> { \ GLM_ALIGNED_STRUCT(x) type { \ uint8 data[x]; \ @@ -32,21 +33,21 @@ namespace detail GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) - + # if GLM_ARCH & GLM_ARCH_SSE2_BIT - template <> + template<> struct storage<float, 16, true> { typedef glm_vec4 type; }; - template <> + template<> struct storage<int, 16, true> { typedef glm_ivec4 type; }; - template <> + template<> struct storage<unsigned int, 16, true> { typedef glm_uvec4 type; @@ -58,19 +59,19 @@ namespace detail unsigned __int8 data[16]; } glm_128; - template <> + template<> struct storage<float, 16, true> { typedef glm_128 type; }; - template <> + template<> struct storage<int, 16, true> { typedef glm_128 type; }; - template <> + template<> struct storage<unsigned int, 16, true> { typedef glm_128 type; @@ -79,7 +80,7 @@ namespace detail # endif # if (GLM_ARCH & GLM_ARCH_AVX_BIT) - template <> + template<> struct storage<double, 32, true> { typedef glm_dvec4 type; @@ -87,13 +88,13 @@ namespace detail # endif # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) - template <> + template<> struct storage<int64, 32, true> { typedef glm_i64vec4 type; }; - template <> + template<> struct storage<uint64, 32, true> { typedef glm_u64vec4 type; @@ -101,336 +102,321 @@ namespace detail # endif }//namespace detail - template <typename T, precision P> struct tvec1; - template <typename T, precision P> struct tvec2; - template <typename T, precision P> struct tvec3; - template <typename T, precision P> struct tvec4; - - typedef tvec1<float, highp> highp_vec1_t; - typedef tvec1<float, mediump> mediump_vec1_t; - typedef tvec1<float, lowp> lowp_vec1_t; - typedef tvec1<double, highp> highp_dvec1_t; - typedef tvec1<double, mediump> mediump_dvec1_t; - typedef tvec1<double, lowp> lowp_dvec1_t; - typedef tvec1<int, highp> highp_ivec1_t; - typedef tvec1<int, mediump> mediump_ivec1_t; - typedef tvec1<int, lowp> lowp_ivec1_t; - typedef tvec1<uint, highp> highp_uvec1_t; - typedef tvec1<uint, mediump> mediump_uvec1_t; - typedef tvec1<uint, lowp> lowp_uvec1_t; - typedef tvec1<bool, highp> highp_bvec1_t; - typedef tvec1<bool, mediump> mediump_bvec1_t; - typedef tvec1<bool, lowp> lowp_bvec1_t; +#if GLM_HAS_TEMPLATE_ALIASES + template <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>; + template <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>; + template <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>; +#endif//GLM_HAS_TEMPLATE_ALIASES /// @addtogroup core_precision /// @{ - /// 2 components vector of high single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of high single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<float, highp> highp_vec2; + typedef vec<2, float, highp> highp_vec2; - /// 2 components vector of medium single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of medium single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<float, mediump> mediump_vec2; + typedef vec<2, float, mediump> mediump_vec2; - /// 2 components vector of low single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of low single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<float, lowp> lowp_vec2; + typedef vec<2, float, lowp> lowp_vec2; - /// 2 components vector of high double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of high double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<double, highp> highp_dvec2; + typedef vec<2, double, highp> highp_dvec2; - /// 2 components vector of medium double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of medium double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<double, mediump> mediump_dvec2; + typedef vec<2, double, mediump> mediump_dvec2; - /// 2 components vector of low double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of low double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<double, lowp> lowp_dvec2; + typedef vec<2, double, lowp> lowp_dvec2; - /// 2 components vector of high precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of high qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<int, highp> highp_ivec2; + typedef vec<2, int, highp> highp_ivec2; - /// 2 components vector of medium precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of medium qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<int, mediump> mediump_ivec2; + typedef vec<2, int, mediump> mediump_ivec2; - /// 2 components vector of low precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of low qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<int, lowp> lowp_ivec2; + typedef vec<2, int, lowp> lowp_ivec2; - /// 2 components vector of high precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of high qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<uint, highp> highp_uvec2; + typedef vec<2, uint, highp> highp_uvec2; - /// 2 components vector of medium precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of medium qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<uint, mediump> mediump_uvec2; + typedef vec<2, uint, mediump> mediump_uvec2; - /// 2 components vector of low precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of low qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<uint, lowp> lowp_uvec2; + typedef vec<2, uint, lowp> lowp_uvec2; - /// 2 components vector of high precision bool numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of high qualifier bool numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<bool, highp> highp_bvec2; + typedef vec<2, bool, highp> highp_bvec2; - /// 2 components vector of medium precision bool numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of medium qualifier bool numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<bool, mediump> mediump_bvec2; + typedef vec<2, bool, mediump> mediump_bvec2; - /// 2 components vector of low precision bool numbers. - /// There is no guarantee on the actual precision. + /// 2 components vector of low qualifier bool numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec2<bool, lowp> lowp_bvec2; + typedef vec<2, bool, lowp> lowp_bvec2; /// @} /// @addtogroup core_precision /// @{ - /// 3 components vector of high single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of high single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<float, highp> highp_vec3; + typedef vec<3, float, highp> highp_vec3; - /// 3 components vector of medium single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of medium single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<float, mediump> mediump_vec3; + typedef vec<3, float, mediump> mediump_vec3; - /// 3 components vector of low single-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of low single-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<float, lowp> lowp_vec3; + typedef vec<3, float, lowp> lowp_vec3; - /// 3 components vector of high double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of high double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<double, highp> highp_dvec3; + typedef vec<3, double, highp> highp_dvec3; - /// 3 components vector of medium double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of medium double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<double, mediump> mediump_dvec3; + typedef vec<3, double, mediump> mediump_dvec3; - /// 3 components vector of low double-precision floating-point numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of low double-qualifier floating-point numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<double, lowp> lowp_dvec3; + typedef vec<3, double, lowp> lowp_dvec3; - /// 3 components vector of high precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of high qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<int, highp> highp_ivec3; + typedef vec<3, int, highp> highp_ivec3; - /// 3 components vector of medium precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of medium qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<int, mediump> mediump_ivec3; + typedef vec<3, int, mediump> mediump_ivec3; - /// 3 components vector of low precision signed integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of low qualifier signed integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<int, lowp> lowp_ivec3; + typedef vec<3, int, lowp> lowp_ivec3; - /// 3 components vector of high precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of high qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<uint, highp> highp_uvec3; + typedef vec<3, uint, highp> highp_uvec3; - /// 3 components vector of medium precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of medium qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<uint, mediump> mediump_uvec3; + typedef vec<3, uint, mediump> mediump_uvec3; - /// 3 components vector of low precision unsigned integer numbers. - /// There is no guarantee on the actual precision. + /// 3 components vector of low qualifier unsigned integer numbers. + /// There is no guarantee on the actual qualifier. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<uint, lowp> lowp_uvec3; + typedef vec<3, uint, lowp> lowp_uvec3; - /// 3 components vector of high precision bool numbers. + /// 3 components vector of high qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<bool, highp> highp_bvec3; + typedef vec<3, bool, highp> highp_bvec3; - /// 3 components vector of medium precision bool numbers. + /// 3 components vector of medium qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<bool, mediump> mediump_bvec3; + typedef vec<3, bool, mediump> mediump_bvec3; - /// 3 components vector of low precision bool numbers. + /// 3 components vector of low qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec3<bool, lowp> lowp_bvec3; + typedef vec<3, bool, lowp> lowp_bvec3; /// @} /// @addtogroup core_precision /// @{ - /// 4 components vector of high single-precision floating-point numbers. + /// 4 components vector of high single-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<float, highp> highp_vec4; + typedef vec<4, float, highp> highp_vec4; - /// 4 components vector of medium single-precision floating-point numbers. + /// 4 components vector of medium single-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<float, mediump> mediump_vec4; + typedef vec<4, float, mediump> mediump_vec4; - /// 4 components vector of low single-precision floating-point numbers. + /// 4 components vector of low single-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<float, lowp> lowp_vec4; + typedef vec<4, float, lowp> lowp_vec4; - /// 4 components vector of high double-precision floating-point numbers. + /// 4 components vector of high double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<double, highp> highp_dvec4; + typedef vec<4, double, highp> highp_dvec4; - /// 4 components vector of medium double-precision floating-point numbers. + /// 4 components vector of medium double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<double, mediump> mediump_dvec4; + typedef vec<4, double, mediump> mediump_dvec4; - /// 4 components vector of low double-precision floating-point numbers. + /// 4 components vector of low double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<double, lowp> lowp_dvec4; + typedef vec<4, double, lowp> lowp_dvec4; - /// 4 components vector of high precision signed integer numbers. + /// 4 components vector of high qualifier signed integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<int, highp> highp_ivec4; + typedef vec<4, int, highp> highp_ivec4; - /// 4 components vector of medium precision signed integer numbers. + /// 4 components vector of medium qualifier signed integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<int, mediump> mediump_ivec4; + typedef vec<4, int, mediump> mediump_ivec4; - /// 4 components vector of low precision signed integer numbers. + /// 4 components vector of low qualifier signed integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<int, lowp> lowp_ivec4; + typedef vec<4, int, lowp> lowp_ivec4; - /// 4 components vector of high precision unsigned integer numbers. + /// 4 components vector of high qualifier unsigned integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<uint, highp> highp_uvec4; + typedef vec<4, uint, highp> highp_uvec4; - /// 4 components vector of medium precision unsigned integer numbers. + /// 4 components vector of medium qualifier unsigned integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<uint, mediump> mediump_uvec4; + typedef vec<4, uint, mediump> mediump_uvec4; - /// 4 components vector of low precision unsigned integer numbers. + /// 4 components vector of low qualifier unsigned integer numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<uint, lowp> lowp_uvec4; + typedef vec<4, uint, lowp> lowp_uvec4; - /// 4 components vector of high precision bool numbers. + /// 4 components vector of high qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<bool, highp> highp_bvec4; + typedef vec<4, bool, highp> highp_bvec4; - /// 4 components vector of medium precision bool numbers. + /// 4 components vector of medium qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<bool, mediump> mediump_bvec4; + typedef vec<4, bool, mediump> mediump_bvec4; - /// 4 components vector of low precision bool numbers. + /// 4 components vector of low qualifier bool numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> - typedef tvec4<bool, lowp> lowp_bvec4; + typedef vec<4, bool, lowp> lowp_bvec4; /// @} @@ -475,17 +461,17 @@ namespace detail typedef mediump_dvec3 dvec3; typedef mediump_dvec4 dvec4; #else //defined(GLM_PRECISION_HIGHP_DOUBLE) - /// 2 components vector of double-precision floating-point numbers. + /// 2 components vector of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> typedef highp_dvec2 dvec2; - //! 3 components vector of double-precision floating-point numbers. + //! 3 components vector of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> typedef highp_dvec3 dvec3; - //! 4 components vector of double-precision floating-point numbers. + //! 4 components vector of double-qualifier floating-point numbers. /// /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> typedef highp_dvec4 dvec4; diff --git a/external/include/glm/detail/type_vec1.hpp b/external/include/glm/detail/type_vec1.hpp index f5c7f01..e69de29 100644 --- a/external/include/glm/detail/type_vec1.hpp +++ b/external/include/glm/detail/type_vec1.hpp @@ -1,302 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec1.hpp - -#pragma once - -#include "../fwd.hpp" -#include "type_vec.hpp" -#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED -# if GLM_HAS_UNRESTRICTED_UNIONS -# include "_swizzle.hpp" -# else -# include "_swizzle_func.hpp" -# endif -#endif //GLM_SWIZZLE -#include <cstddef> - -namespace glm -{ - template <typename T, precision P = defaultp> - struct tvec1 - { - // -- Implementation detail -- - - typedef T value_type; - typedef tvec1<T, P> type; - typedef tvec1<bool, P> bool_type; - - // -- Data -- - -# if GLM_HAS_ONLY_XYZW - T x; - -# elif GLM_HAS_ALIGNED_TYPE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# endif -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# endif - - union - { - T x; - T r; - T s; -/* -# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, x) - _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, r) - _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, s) - _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, x) - _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, r) - _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, s) - _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, x) - _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, r) - _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, s) -# endif//GLM_SWIZZLE*/ - }; - -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# endif -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# endif -# else - union {T x, r, s;}; -/* -# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, P, tvec2, tvec2, tvec3, tvec4) -# endif//GLM_SWIZZLE*/ -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 1;} - - GLM_FUNC_DECL T & operator[](length_type i); - GLM_FUNC_DECL T const & operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1(tvec1<T, P> const & v) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec1(tvec1<T, Q> const & v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(ctor); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec2<U, Q> const & v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec3<U, Q> const & v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec4<U, Q> const & v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec1(tvec1<U, Q> const & v); - - // -- Swizzle constructors -- -/* -# if(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)) - template <int E0> - GLM_FUNC_DECL tvec1(detail::_swizzle<1, T, P, tvec1, E0, -1,-2,-3> const & that) - { - *this = that(); - } -# endif//(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)) -*/ - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<T, P> const & v) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator+=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator-=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator*=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator/=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL tvec1<T, P> & operator++(); - GLM_FUNC_DECL tvec1<T, P> & operator--(); - GLM_FUNC_DECL tvec1<T, P> operator++(int); - GLM_FUNC_DECL tvec1<T, P> operator--(int); - - // -- Unary bit operators -- - - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator%=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator&=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator|=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator^=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator<<=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator>>=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v); - }; - - // -- Unary operators -- - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v); - - // -- Binary operators -- - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator+(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator-(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator*(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator/(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator%(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator&(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator|(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator^(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator<<(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T scalar); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator>>(T scalar, tvec1<T, P> const & v); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v); - - // -- Boolean operators -- - - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2); - - template <precision P> - GLM_FUNC_DECL tvec1<bool, P> operator&&(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2); - - template <precision P> - GLM_FUNC_DECL tvec1<bool, P> operator||(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_vec1.inl b/external/include/glm/detail/type_vec1.inl index 72f9437..7f77f6c 100644 --- a/external/include/glm/detail/type_vec1.inl +++ b/external/include/glm/detail/type_vec1.inl @@ -5,76 +5,72 @@ namespace glm { // -- Implicit basic constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1() -# ifndef GLM_FORCE_NO_CTOR_INIT +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec() +# ifdef GLM_FORCE_CTOR_INIT : x(0) # endif {} -# endif//!GLM_HAS_DEFAULTED_FUNCTIONS +# endif//!GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<1, T, Q> const& v) : x(v.x) {} # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<T, Q> const & v) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<1, T, P> const& v) : x(v.x) {} // -- Explicit basic constructors -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(T scalar) : x(scalar) {} // -- Conversion vector constructors -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec1<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<1, U, P> const& v) : x(static_cast<T>(v.x)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec2<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<2, U, P> const& v) : x(static_cast<T>(v.x)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec3<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<3, U, P> const& v) : x(static_cast<T>(v.x)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(tvec4<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<1, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast<T>(v.x)) {} // -- Component accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER T & tvec1<T, P>::operator[](typename tvec1<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); return (&x)[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER T const & tvec1<T, P>::operator[](typename tvec1<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); return (&x)[i]; @@ -83,81 +79,81 @@ namespace glm // -- Unary arithmetic operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator=(tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) { this->x = v.x; return *this; } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) { this->x = static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator+=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) { this->x += static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator+=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator-=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) { this->x -= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator-=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator*=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) { this->x *= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator*=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator/=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) { this->x /= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator/=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast<T>(v.x); return *this; @@ -165,129 +161,129 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator++() { ++this->x; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator--() { --this->x; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> tvec1<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> vec<1, T, Q>::operator++(int) { - tvec1<T, P> Result(*this); + vec<1, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> tvec1<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> vec<1, T, Q>::operator--(int) { - tvec1<T, P> Result(*this); + vec<1, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator%=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) { this->x %= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator%=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator&=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) { this->x &= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator&=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator|=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) { this->x |= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator|=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= U(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator^=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) { this->x ^= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator^=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator<<=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) { this->x <<= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator<<=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator>>=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) { this->x >>= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator>>=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast<T>(v.x); return *this; @@ -295,264 +291,264 @@ namespace glm // -- Unary constant operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator+(vec<1, T, Q> const& v) { return v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator-(vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( -v.x); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator+(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar + v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x + v2.x); } //operator- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator-(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar - v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x - v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator*(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator*(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar * v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x * v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator/(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator/(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar / v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x / v2.x); } // -- Binary bit operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator%(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x % scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator%(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar % v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x % v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator&(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x & scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator&(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar & v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x & v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator|(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x | scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator|(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar | v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x | v2.x); } - - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator^(tvec1<T, P> const & v, T scalar) + + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x ^ scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator^(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar ^ v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x ^ v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( - v.x << scalar); + return vec<1, T, Q>( + static_cast<T>(v.x << scalar)); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar << v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x << v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(tvec1<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) { - return tvec1<T, P>( + return vec<1, T, Q>( v.x >> scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(T scalar, tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( scalar >> v.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec1<T, P>( + return vec<1, T, Q>( v1.x >> v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec1<T, P> operator~(tvec1<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<1, T, Q> operator~(vec<1, T, Q> const& v) { - return tvec1<T, P>( + return vec<1, T, Q>( ~v.x); } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return (v1.x == v2.x); + return detail::compute_equal<T>::call(v1.x, v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { - return (v1.x != v2.x); + return !(v1 == v2); } - template <precision P> - GLM_FUNC_QUALIFIER tvec1<bool, P> operator&&(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) { - return tvec1<bool, P>(v1.x && v2.x); + return vec<1, bool, Q>(v1.x && v2.x); } - template <precision P> - GLM_FUNC_QUALIFIER tvec1<bool, P> operator||(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) { - return tvec1<bool, P>(v1.x || v2.x); + return vec<1, bool, Q>(v1.x || v2.x); } }//namespace glm diff --git a/external/include/glm/detail/type_vec2.hpp b/external/include/glm/detail/type_vec2.hpp index a9af32e..b6ab685 100644 --- a/external/include/glm/detail/type_vec2.hpp +++ b/external/include/glm/detail/type_vec2.hpp @@ -15,14 +15,14 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tvec2 + template<typename T, qualifier Q> + struct vec<2, T, Q> { // -- Implementation detail -- typedef T value_type; - typedef tvec2<T, P> type; - typedef tvec2<bool, P> bool_type; + typedef vec type; + typedef vec<2, bool, Q> bool_type; // -- Data -- @@ -39,7 +39,7 @@ namespace glm # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # endif - + union { struct{ T x, y; }; @@ -47,19 +47,19 @@ namespace glm struct{ T s, t; }; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, x, y) - _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, r, g) - _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, s, t) - _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, x, y) - _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, r, g) - _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, s, t) - _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, x, y) - _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, r, g) - _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, s, t) + GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) + GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) + GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) + GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) + GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) + GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) + GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) + GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) + GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) # endif//GLM_SWIZZLE }; - + # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # endif @@ -71,7 +71,7 @@ namespace glm union {T y, g, t;}; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, tvec2, tvec2, tvec3, tvec4) + GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) # endif//GLM_SWIZZLE # endif @@ -79,49 +79,48 @@ namespace glm /// Return the count of components of the vector typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 2;} + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - GLM_FUNC_DECL T & operator[](length_type i); - GLM_FUNC_DECL T const & operator[](length_type i) const; + GLM_FUNC_DECL T& operator[](length_type i); + GLM_FUNC_DECL T const& operator[](length_type i) const; // -- Implicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec2<T, P> const& v) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec2<T, Q> const& v); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec const& v) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, T, P> const& v); // -- Explicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(ctor); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(T s1, T s2); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit vec(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(T x, T y); // -- Conversion constructors -- - /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(A x, B y); - template <typename A, typename B> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2); + /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template<typename A, typename B> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(A x, B y); + template<typename A, typename B> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec3<U, Q> const & v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<3, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec4<U, Q> const & v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<4, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec2(tvec2<U, Q> const & v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<2, U, P> const& v); // -- Swizzle constructors -- # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED) - template <int E0, int E1> - GLM_FUNC_DECL tvec2(detail::_swizzle<2, T, P, glm::tvec2, E0, E1,-1,-2> const& that) + template<int E0, int E1> + GLM_FUNC_DECL vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) { *this = that(); } @@ -129,258 +128,258 @@ namespace glm // -- Unary arithmetic operators -- - GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<T, P> const & v) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator+=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator-=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator*=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator/=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec2<U, P> const & v); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec& operator=(vec const& v) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec& operator=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator+=(U scalar); + template<typename U> + GLM_FUNC_DECL vec& operator+=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator+=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator-=(U scalar); + template<typename U> + GLM_FUNC_DECL vec& operator-=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator-=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator*=(U scalar); + template<typename U> + GLM_FUNC_DECL vec& operator*=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator*=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator/=(U scalar); + template<typename U> + GLM_FUNC_DECL vec& operator/=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec& operator/=(vec<2, U, Q> const& v); // -- Increment and decrement operators -- - GLM_FUNC_DECL tvec2<T, P> & operator++(); - GLM_FUNC_DECL tvec2<T, P> & operator--(); - GLM_FUNC_DECL tvec2<T, P> operator++(int); - GLM_FUNC_DECL tvec2<T, P> operator--(int); + GLM_FUNC_DECL vec & operator++(); + GLM_FUNC_DECL vec & operator--(); + GLM_FUNC_DECL vec operator++(int); + GLM_FUNC_DECL vec operator--(int); // -- Unary bit operators -- - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator%=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator&=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator|=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator^=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator<<=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator>>=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v); + template<typename U> + GLM_FUNC_DECL vec & operator%=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator%=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator%=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator&=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator&=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator&=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator|=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator|=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator|=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator^=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator^=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator^=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(vec<2, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(vec<2, U, Q> const& v); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(vec<2, T, Q> const& v); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator*(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator/(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator%(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator&(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator|(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator^(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator<<(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator>>(T scalar, tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<2, T, Q> operator~(vec<2, T, Q> const& v); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tvec2<T, P> const & v1, tvec2<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec2<bool, P> operator&&(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec2<bool, P> operator||(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_vec2.inl b/external/include/glm/detail/type_vec2.inl index cf79da2..1273707 100644 --- a/external/include/glm/detail/type_vec2.inl +++ b/external/include/glm/detail/type_vec2.inl @@ -3,109 +3,92 @@ namespace glm { -# ifdef GLM_STATIC_CONST_MEMBERS - template <typename T, precision P> - const tvec2<T, P> tvec2<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0)); - - template <typename T, precision P> - const tvec2<T, P> tvec2<T, P>::X(static_cast<T>(1), static_cast<T>(0)); - - template <typename T, precision P> - const tvec2<T, P> tvec2<T, P>::Y(static_cast<T>(0), static_cast<T>(1)); - - template <typename T, precision P> - const tvec2<T, P> tvec2<T, P>::XY(static_cast<T>(1), static_cast<T>(1)); -# endif // -- Implicit basic constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2() -# ifndef GLM_FORCE_NO_CTOR_INIT +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec() +# ifdef GLM_FORCE_CTOR_INIT : x(0), y(0) # endif {} -# endif//!GLM_HAS_DEFAULTED_FUNCTIONS +# endif//!GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<2, T, Q> const& v) : x(v.x), y(v.y) {} # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<T, Q> const & v) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<2, T, P> const& v) : x(v.x), y(v.y) {} // -- Explicit basic constructors -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(T scalar) : x(scalar), y(scalar) {} - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(T s1, T s2) - : x(s1), y(s2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(T _x, T _y) + : x(_x), y(_y) {} // -- Conversion scalar constructors -- - template <typename T, precision P> - template <typename A, typename B> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(A a, B b) - : x(static_cast<T>(a)) - , y(static_cast<T>(b)) + template<typename T, qualifier Q> + template<typename A, typename B> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(A _x, B _y) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_y)) {} - template <typename T, precision P> - template <typename A, typename B> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec1<A, P> const & a, tvec1<B, P> const & b) - : x(static_cast<T>(a.x)) - , y(static_cast<T>(b.x)) + template<typename T, qualifier Q> + template<typename A, typename B> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_y.x)) {} // -- Conversion vector constructors -- - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec2<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<2, U, P> const& v) : x(static_cast<T>(v.x)) , y(static_cast<T>(v.y)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec3<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<3, U, P> const& v) : x(static_cast<T>(v.x)) , y(static_cast<T>(v.y)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(tvec4<U, Q> const & v) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<2, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast<T>(v.x)) , y(static_cast<T>(v.y)) {} // -- Component accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER T & tvec2<T, P>::operator[](typename tvec2<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); return (&x)[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER T const & tvec2<T, P>::operator[](typename tvec2<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); return (&x)[i]; @@ -114,8 +97,8 @@ namespace glm // -- Unary arithmetic operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator=(tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) { this->x = v.x; this->y = v.y; @@ -123,117 +106,117 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) { this->x = static_cast<T>(v.x); this->y = static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) { this->x += static_cast<T>(scalar); this->y += static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast<T>(v.x); this->y += static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) { this->x += static_cast<T>(v.x); this->y += static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) { this->x -= static_cast<T>(scalar); this->y -= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast<T>(v.x); this->y -= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) { this->x -= static_cast<T>(v.x); this->y -= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) { this->x *= static_cast<T>(scalar); this->y *= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast<T>(v.x); this->y *= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) { this->x *= static_cast<T>(v.x); this->y *= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) { this->x /= static_cast<T>(scalar); this->y /= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast<T>(v.x); this->y /= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) { this->x /= static_cast<T>(v.x); this->y /= static_cast<T>(v.y); @@ -242,196 +225,196 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator++() { ++this->x; ++this->y; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator--() { --this->x; --this->y; return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> tvec2<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> vec<2, T, Q>::operator++(int) { - tvec2<T, P> Result(*this); + vec<2, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> tvec2<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> vec<2, T, Q>::operator--(int) { - tvec2<T, P> Result(*this); + vec<2, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) { this->x %= static_cast<T>(scalar); this->y %= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= static_cast<T>(v.x); this->y %= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) { this->x %= static_cast<T>(v.x); this->y %= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) { this->x &= static_cast<T>(scalar); this->y &= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= static_cast<T>(v.x); this->y &= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) { this->x &= static_cast<T>(v.x); this->y &= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) { this->x |= static_cast<T>(scalar); this->y |= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= static_cast<T>(v.x); this->y |= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) { this->x |= static_cast<T>(v.x); this->y |= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) { this->x ^= static_cast<T>(scalar); this->y ^= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= static_cast<T>(v.x); this->y ^= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) { this->x ^= static_cast<T>(v.x); this->y ^= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) { this->x <<= static_cast<T>(scalar); this->y <<= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast<T>(v.x); this->y <<= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) { this->x <<= static_cast<T>(v.x); this->y <<= static_cast<T>(v.y); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) { this->x >>= static_cast<T>(scalar); this->y >>= static_cast<T>(scalar); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast<T>(v.x); this->y >>= static_cast<T>(v.x); return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(tvec2<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) { this->x >>= static_cast<T>(v.x); this->y >>= static_cast<T>(v.y); @@ -440,455 +423,457 @@ namespace glm // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(vec<2, T, Q> const& v) { return v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(vec<2, T, Q> const& v) { - return tvec2<T, P>( - -v.x, + return vec<2, T, Q>( + -v.x, -v.y); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x + scalar, v.y + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x + v2.x, v1.y + v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar + v.x, scalar + v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x + v2.x, v1.x + v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x + v2.x, v1.y + v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x - scalar, v.y - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x - v2.x, v1.y - v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar - v.x, scalar - v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x - v2.x, v1.x - v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x - v2.x, v1.y - v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x * scalar, v.y * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x * v2.x, v1.y * v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator*(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar * v.x, scalar * v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x * v2.x, v1.x * v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x * v2.x, v1.y * v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x / scalar, v.y / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x / v2.x, v1.y / v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator/(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar / v.x, scalar / v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x / v2.x, v1.x / v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x / v2.x, v1.y / v2.y); } // -- Binary bit operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x % scalar, v.y % scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x % v2.x, v1.y % v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator%(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar % v.x, scalar % v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x % v2.x, v1.x % v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x % v2.x, v1.y % v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x & scalar, v.y & scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x & v2.x, v1.y & v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator&(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar & v.x, scalar & v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x & v2.x, v1.x & v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x & v2.x, v1.y & v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x | scalar, v.y | scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x | v2.x, v1.y | v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator|(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar | v.x, scalar | v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x | v2.x, v1.x | v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x | v2.x, v1.y | v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x ^ scalar, v.y ^ scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x ^ v2.x, v1.y ^ v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator^(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar ^ v.x, scalar ^ v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x ^ v2.x, v1.x ^ v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x ^ v2.x, v1.y ^ v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x << scalar, v.y << scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x << v2.x, v1.y << v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar << v.x, scalar << v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x << v2.x, v1.x << v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x << v2.x, v1.y << v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) { - return tvec2<T, P>( + return vec<2, T, Q>( v.x >> scalar, v.y >> scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x >> v2.x, v1.y >> v2.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(T scalar, tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( scalar >> v.x, scalar >> v.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x >> v2.x, v1.x >> v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return tvec2<T, P>( + return vec<2, T, Q>( v1.x >> v2.x, v1.y >> v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec2<T, P> operator~(tvec2<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<2, T, Q> operator~(vec<2, T, Q> const& v) { - return tvec2<T, P>( + return vec<2, T, Q>( ~v.x, ~v.y); } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return (v1.x == v2.x) && (v1.y == v2.y); + return + detail::compute_equal<T>::call(v1.x, v2.x) && + detail::compute_equal<T>::call(v1.y, v2.y); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tvec2<T, P> const & v1, tvec2<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { - return (v1.x != v2.x) || (v1.y != v2.y); + return !(v1 == v2); } - template <precision P> - GLM_FUNC_QUALIFIER tvec2<bool, P> operator&&(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) { - return tvec2<bool, P>(v1.x && v2.x, v1.y && v2.y); + return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); } - template <precision P> - GLM_FUNC_QUALIFIER tvec2<bool, P> operator||(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) { - return tvec2<bool, P>(v1.x || v2.x, v1.y || v2.y); + return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); } }//namespace glm diff --git a/external/include/glm/detail/type_vec3.hpp b/external/include/glm/detail/type_vec3.hpp index f85f0a5..506e8a3 100644 --- a/external/include/glm/detail/type_vec3.hpp +++ b/external/include/glm/detail/type_vec3.hpp @@ -15,14 +15,14 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tvec3 + template<typename T, qualifier Q> + struct vec<3, T, Q> { // -- Implementation detail -- typedef T value_type; - typedef tvec3<T, P> type; - typedef tvec3<bool, P> bool_type; + typedef vec type; + typedef vec<3, bool, Q> bool_type; // -- Data -- @@ -47,18 +47,18 @@ namespace glm struct{ T s, t, p; }; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, x, y, z) - _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, r, g, b) - _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, s, t, p) - _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, x, y, z) - _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, r, g, b) - _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, s, t, p) - _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, x, y, z) - _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, r, g, b) - _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, s, t, p) + GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) + GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) + GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) + GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) + GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) + GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) + GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) + GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) + GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) # endif//GLM_SWIZZLE }; - + # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # endif @@ -71,7 +71,7 @@ namespace glm union { T z, b, p; }; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, tvec3, tvec2, tvec3, tvec4) + GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) # endif//GLM_SWIZZLE # endif//GLM_LANG @@ -79,329 +79,328 @@ namespace glm /// Return the count of components of the vector typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 3;} + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} GLM_FUNC_DECL T & operator[](length_type i); - GLM_FUNC_DECL T const & operator[](length_type i) const; + GLM_FUNC_DECL T const& operator[](length_type i) const; // -- Implicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec3<T, P> const & v) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec3<T, Q> const & v); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec const& v) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<3, T, P> const& v); // -- Explicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(ctor); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(T a, T b, T c); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit vec(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(T a, T b, T c); // -- Conversion scalar constructors -- - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(A a, B b, C c); - template <typename A, typename B, typename C> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c); + /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template<typename X, typename Y, typename Z> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(X x, Y y, Z z); + template<typename X, typename Y, typename Z> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec2<A, Q> const & a, B b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, A, P> const& _xy, B _z); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(A a, tvec2<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(A _x, vec<2, B, P> const& _yz); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec3(tvec4<U, Q> const & v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<4, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec3(tvec3<U, Q> const & v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<3, U, P> const& v); // -- Swizzle constructors -- # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED) - template <int E0, int E1, int E2> - GLM_FUNC_DECL tvec3(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & that) + template<int E0, int E1, int E2> + GLM_FUNC_DECL vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) { *this = that(); } - template <int E0, int E1> - GLM_FUNC_DECL tvec3(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & scalar) + template<int E0, int E1> + GLM_FUNC_DECL vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) { - *this = tvec3<T, P>(v(), scalar); + *this = vec(v(), scalar); } - template <int E0, int E1> - GLM_FUNC_DECL tvec3(T const & scalar, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v) + template<int E0, int E1> + GLM_FUNC_DECL vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) { - *this = tvec3<T, P>(scalar, v()); + *this = vec(scalar, v()); } # endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED) // -- Unary arithmetic operators -- - GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<T, P> const & v) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator+=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator-=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator*=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator/=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P> const & v); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec & operator=(vec const& v) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec & operator=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator+=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator+=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator+=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator-=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator-=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator-=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator*=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator*=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator*=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator/=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator/=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator/=(vec<3, U, Q> const& v); // -- Increment and decrement operators -- - GLM_FUNC_DECL tvec3<T, P> & operator++(); - GLM_FUNC_DECL tvec3<T, P> & operator--(); - GLM_FUNC_DECL tvec3<T, P> operator++(int); - GLM_FUNC_DECL tvec3<T, P> operator--(int); + GLM_FUNC_DECL vec & operator++(); + GLM_FUNC_DECL vec & operator--(); + GLM_FUNC_DECL vec operator++(int); + GLM_FUNC_DECL vec operator--(int); // -- Unary bit operators -- - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator%=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator&=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator|=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator^=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator<<=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator>>=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P> const & v); + template<typename U> + GLM_FUNC_DECL vec & operator%=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator%=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator%=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator&=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator&=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator&=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator|=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator|=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator|=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator^=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator^=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator^=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator<<=(vec<3, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(U scalar); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec & operator>>=(vec<3, U, Q> const& v); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(vec<3, T, Q> const& v); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator*(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator*(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator/(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator/(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator%(T const & scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator%(T const& scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator%(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator&(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator&(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator|(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator|(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator^(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator^(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator<<(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator<<(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator>>(T scalar, tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator>>(tvec1<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<3, T, Q> operator~(vec<3, T, Q> const& v); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tvec3<T, P> const & v1, tvec3<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec3<bool, P> operator&&(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec3<bool, P> operator||(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_vec3.inl b/external/include/glm/detail/type_vec3.inl index d84299d..15fd483 100644 --- a/external/include/glm/detail/type_vec3.inl +++ b/external/include/glm/detail/type_vec3.inl @@ -3,151 +3,121 @@ namespace glm { - -# ifdef GLM_STATIC_CONST_MEMBERS - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::X(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::Y(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::Z(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::XY(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::XZ(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::YZ(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1)); - - template <typename T, precision P> - const tvec3<T, P> tvec3<T, P>::XYZ(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1)); -# endif // -- Implicit basic constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3() -# ifndef GLM_FORCE_NO_CTOR_INIT +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec() +# ifdef GLM_FORCE_CTOR_INIT : x(0), y(0), z(0) # endif {} -# endif//!GLM_HAS_DEFAULTED_FUNCTIONS +# endif//!GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<3, T, Q> const& v) : x(v.x), y(v.y), z(v.z) {} # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<T, Q> const & v) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<3, T, P> const& v) : x(v.x), y(v.y), z(v.z) {} // -- Explicit basic constructors -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(T scalar) : x(scalar), y(scalar), z(scalar) {} - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(T a, T b, T c) - : x(a), y(b), z(c) + template <typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(T _x, T _y, T _z) + : x(_x), y(_y), z(_z) {} // -- Conversion scalar constructors -- - template <typename T, precision P> - template <typename A, typename B, typename C> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(A a, B b, C c) : - x(static_cast<T>(a)), - y(static_cast<T>(b)), - z(static_cast<T>(c)) + template<typename T, qualifier Q> + template<typename X, typename Y, typename Z> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(X _x, Y _y, Z _z) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_y)) + , z(static_cast<T>(_z)) {} - template <typename T, precision P> - template <typename A, typename B, typename C> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c) : - x(static_cast<T>(a)), - y(static_cast<T>(b)), - z(static_cast<T>(c)) + template<typename T, qualifier Q> + template<typename X, typename Y, typename Z> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_y)) + , z(static_cast<T>(_z)) {} // -- Conversion vector constructors -- - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, B b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(b)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) + : x(static_cast<T>(_xy.x)) + , y(static_cast<T>(_xy.y)) + , z(static_cast<T>(_z)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(b.x)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) + : x(static_cast<T>(_xy.x)) + , y(static_cast<T>(_xy.y)) + , z(static_cast<T>(_z.x)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(A a, tvec2<B, Q> const & b) : - x(static_cast<T>(a)), - y(static_cast<T>(b.x)), - z(static_cast<T>(b.y)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_yz.x)) + , z(static_cast<T>(_yz.y)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(b.x)), - z(static_cast<T>(b.y)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_yz.x)) + , z(static_cast<T>(_yz.y)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec3<U, Q> const & v) : - x(static_cast<T>(v.x)), - y(static_cast<T>(v.y)), - z(static_cast<T>(v.z)) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<3, U, P> const& v) + : x(static_cast<T>(v.x)) + , y(static_cast<T>(v.y)) + , z(static_cast<T>(v.z)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(tvec4<U, Q> const & v) : - x(static_cast<T>(v.x)), - y(static_cast<T>(v.y)), - z(static_cast<T>(v.z)) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<3, T, Q>::vec(vec<4, U, P> const& v) + : x(static_cast<T>(v.x)) + , y(static_cast<T>(v.y)) + , z(static_cast<T>(v.z)) {} // -- Component accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER T & tvec3<T, P>::operator[](typename tvec3<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); return (&x)[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER T const & tvec3<T, P>::operator[](typename tvec3<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); return (&x)[i]; @@ -156,8 +126,8 @@ namespace glm // -- Unary arithmetic operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P>& tvec3<T, P>::operator=(tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) { this->x = v.x; this->y = v.y; @@ -166,9 +136,9 @@ namespace glm } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P>& tvec3<T, P>::operator=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) { this->x = static_cast<T>(v.x); this->y = static_cast<T>(v.y); @@ -176,9 +146,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) { this->x += static_cast<T>(scalar); this->y += static_cast<T>(scalar); @@ -186,9 +156,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast<T>(v.x); this->y += static_cast<T>(v.x); @@ -196,9 +166,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) { this->x += static_cast<T>(v.x); this->y += static_cast<T>(v.y); @@ -206,9 +176,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) { this->x -= static_cast<T>(scalar); this->y -= static_cast<T>(scalar); @@ -216,9 +186,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast<T>(v.x); this->y -= static_cast<T>(v.x); @@ -226,9 +196,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) { this->x -= static_cast<T>(v.x); this->y -= static_cast<T>(v.y); @@ -236,9 +206,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) { this->x *= static_cast<T>(scalar); this->y *= static_cast<T>(scalar); @@ -246,9 +216,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast<T>(v.x); this->y *= static_cast<T>(v.x); @@ -256,9 +226,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) { this->x *= static_cast<T>(v.x); this->y *= static_cast<T>(v.y); @@ -266,9 +236,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(U v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) { this->x /= static_cast<T>(v); this->y /= static_cast<T>(v); @@ -276,9 +246,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast<T>(v.x); this->y /= static_cast<T>(v.x); @@ -286,9 +256,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) { this->x /= static_cast<T>(v.x); this->y /= static_cast<T>(v.y); @@ -298,8 +268,8 @@ namespace glm // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator++() { ++this->x; ++this->y; @@ -307,8 +277,8 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator--() { --this->x; --this->y; @@ -316,27 +286,27 @@ namespace glm return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> tvec3<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> vec<3, T, Q>::operator++(int) { - tvec3<T, P> Result(*this); + vec<3, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> tvec3<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> vec<3, T, Q>::operator--(int) { - tvec3<T, P> Result(*this); + vec<3, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) { this->x %= scalar; this->y %= scalar; @@ -344,9 +314,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= v.x; this->y %= v.x; @@ -354,9 +324,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) { this->x %= v.x; this->y %= v.y; @@ -364,9 +334,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) { this->x &= scalar; this->y &= scalar; @@ -374,9 +344,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= v.x; this->y &= v.x; @@ -384,9 +354,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) { this->x &= v.x; this->y &= v.y; @@ -394,9 +364,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) { this->x |= scalar; this->y |= scalar; @@ -404,9 +374,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= v.x; this->y |= v.x; @@ -414,9 +384,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) { this->x |= v.x; this->y |= v.y; @@ -424,9 +394,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) { this->x ^= scalar; this->y ^= scalar; @@ -434,9 +404,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= v.x; this->y ^= v.x; @@ -444,9 +414,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) { this->x ^= v.x; this->y ^= v.y; @@ -454,9 +424,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) { this->x <<= scalar; this->y <<= scalar; @@ -464,9 +434,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast<T>(v.x); this->y <<= static_cast<T>(v.x); @@ -474,9 +444,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) { this->x <<= static_cast<T>(v.x); this->y <<= static_cast<T>(v.y); @@ -484,9 +454,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) { this->x >>= static_cast<T>(scalar); this->y >>= static_cast<T>(scalar); @@ -494,9 +464,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast<T>(v.x); this->y >>= static_cast<T>(v.x); @@ -504,9 +474,9 @@ namespace glm return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(tvec3<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) { this->x >>= static_cast<T>(v.x); this->y >>= static_cast<T>(v.y); @@ -516,198 +486,198 @@ namespace glm // -- Unary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(vec<3, T, Q> const& v) { return v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(vec<3, T, Q> const& v) { - return tvec3<T, P>( - -v.x, - -v.y, + return vec<3, T, Q>( + -v.x, + -v.y, -v.z); } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x + scalar, v.y + scalar, v.z + scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x + scalar.x, v.y + scalar.x, v.z + scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar + v.x, scalar + v.y, scalar + v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x + v.x, scalar.x + v.y, scalar.x + v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x - scalar, v.y - scalar, v.z - scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x - scalar.x, v.y - scalar.x, v.z - scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar - v.x, scalar - v.y, scalar - v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x - v.x, scalar.x - v.y, scalar.x - v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x * scalar, v.y * scalar, v.z * scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x * scalar.x, v.y * scalar.x, v.z * scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator*(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar * v.x, scalar * v.y, scalar * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x * v.x, scalar.x * v.y, scalar.x * v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x * v2.x, v1.y * v2.y, v1.z * v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x / scalar, v.y / scalar, v.z / scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x / scalar.x, v.y / scalar.x, v.z / scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator/(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar / v.x, scalar / v.y, scalar / v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x / v.x, scalar.x / v.y, scalar.x / v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x / v2.x, v1.y / v2.y, v1.z / v2.z); @@ -715,280 +685,280 @@ namespace glm // -- Binary bit operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x % scalar, v.y % scalar, v.z % scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x % scalar.x, v.y % scalar.x, v.z % scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator%(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar % v.x, scalar % v.y, scalar % v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x % v.x, scalar.x % v.y, scalar.x % v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x % v2.x, v1.y % v2.y, v1.z % v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x & scalar, v.y & scalar, v.z & scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x & scalar.x, v.y & scalar.x, v.z & scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator&(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar & v.x, scalar & v.y, scalar & v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x & v.x, scalar.x & v.y, scalar.x & v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x & v2.x, v1.y & v2.y, v1.z & v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x | scalar, v.y | scalar, v.z | scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x | scalar.x, v.y | scalar.x, v.z | scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator|(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar | v.x, scalar | v.y, scalar | v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x | v.x, scalar.x | v.y, scalar.x | v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x | v2.x, v1.y | v2.y, v1.z | v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x ^ scalar, v.y ^ scalar, v.z ^ scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x ^ scalar.x, v.y ^ scalar.x, v.z ^ scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator^(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar ^ v.x, scalar ^ v.y, scalar ^ v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x ^ v.x, scalar.x ^ v.y, scalar.x ^ v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x << scalar, v.y << scalar, v.z << scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x << scalar.x, v.y << scalar.x, v.z << scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar << v.x, scalar << v.y, scalar << v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x << v.x, scalar.x << v.y, scalar.x << v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x << v2.x, v1.y << v2.y, v1.z << v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x >> scalar, v.y >> scalar, v.z >> scalar); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec3<T, P>( + return vec<3, T, Q>( v.x >> scalar.x, v.y >> scalar.x, v.z >> scalar.x); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(T scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar >> v.x, scalar >> v.y, scalar >> v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec1<T, P> const & scalar, tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( scalar.x >> v.x, scalar.x >> v.y, scalar.x >> v.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return tvec3<T, P>( + return vec<3, T, Q>( v1.x >> v2.x, v1.y >> v2.y, v1.z >> v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec3<T, P> operator~(tvec3<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<3, T, Q> operator~(vec<3, T, Q> const& v) { - return tvec3<T, P>( + return vec<3, T, Q>( ~v.x, ~v.y, ~v.z); @@ -996,27 +966,30 @@ namespace glm // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z); + return + detail::compute_equal<T>::call(v1.x, v2.x) && + detail::compute_equal<T>::call(v1.y, v2.y) && + detail::compute_equal<T>::call(v1.z, v2.z); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tvec3<T, P> const & v1, tvec3<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { - return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z); + return !(v1 == v2); } - template <precision P> - GLM_FUNC_QUALIFIER tvec3<bool, P> operator&&(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) { - return tvec3<bool, P>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); + return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); } - template <precision P> - GLM_FUNC_QUALIFIER tvec3<bool, P> operator||(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) { - return tvec3<bool, P>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); + return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); } }//namespace glm diff --git a/external/include/glm/detail/type_vec4.hpp b/external/include/glm/detail/type_vec4.hpp index 5e89b74..43395ca 100644 --- a/external/include/glm/detail/type_vec4.hpp +++ b/external/include/glm/detail/type_vec4.hpp @@ -15,14 +15,14 @@ namespace glm { - template <typename T, precision P = defaultp> - struct tvec4 + template<typename T, qualifier Q> + struct vec<4, T, Q> { // -- Implementation detail -- typedef T value_type; - typedef tvec4<T, P> type; - typedef tvec4<bool, P> bool_type; + typedef vec<4, T, Q> type; + typedef vec<4, bool, Q> bool_type; // -- Data -- @@ -46,18 +46,18 @@ namespace glm struct { T r, g, b, a; }; struct { T s, t, p, q; }; - typename detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data; + typename detail::storage<T, sizeof(T) * 4, detail::is_aligned<Q>::value>::type data; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, x, y, z, w) - _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, r, g, b, a) - _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, s, t, p, q) - _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, x, y, z, w) - _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, r, g, b, a) - _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, s, t, p, q) - _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, x, y, z, w) - _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, r, g, b, a) - _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, s, t, p, q) + GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) + GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) + GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) + GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) + GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) + GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) + GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) + GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) + GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) # endif//GLM_SWIZZLE }; @@ -74,7 +74,7 @@ namespace glm union { T w, a, q; }; # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P, tvec4, tvec2, tvec3, tvec4) + GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) # endif//GLM_SWIZZLE # endif @@ -82,371 +82,370 @@ namespace glm /// Return the count of components of the vector typedef length_t length_type; - GLM_FUNC_DECL static length_type length(){return 4;} + GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} GLM_FUNC_DECL T & operator[](length_type i); - GLM_FUNC_DECL T const & operator[](length_type i) const; + GLM_FUNC_DECL T const& operator[](length_type i) const; // -- Implicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(tvec4<T, P> const& v) GLM_DEFAULT; - template <precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(tvec4<T, Q> const& v); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD vec() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD vec(vec<4, T, Q> const& v) GLM_DEFAULT; + template<qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD vec(vec<4, T, P> const& v); // -- Explicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(ctor); - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(T a, T b, T c, T d); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit vec(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD vec(T x, T y, T z, T w); // -- Conversion scalar constructors -- - /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, typename D> - GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(A a, B b, C c, D d); - template <typename A, typename B, typename C, typename D> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, P> const& a, tvec1<B, P> const& b, tvec1<C, P> const& c, tvec1<D, P> const& d); + /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template<typename X, typename Y, typename Z, typename W> + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD vec(X _x, Y _y, Z _z, W _w); + template<typename X, typename Y, typename Z, typename W> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, B b, C c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, A, P> const& _xy, B _z, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, tvec2<B, Q> const & b, C c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(A _x, vec<2, B, P> const& _yz, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, B b, tvec2<C, Q> const & c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(A _x, B _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c); + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec3<A, Q> const & a, B b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<3, A, P> const& _xyz, B _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, tvec3<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(A _x, vec<3, B, P> const& _yzw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename A, typename B, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b); + template<typename A, typename B, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template <typename U, precision Q> - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT tvec4(tvec4<U, Q> const& v); + template<typename U, qualifier P> + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<4, U, P> const& v); // -- Swizzle constructors -- # if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED) - template <int E0, int E1, int E2, int E3> - GLM_FUNC_DECL tvec4(detail::_swizzle<4, T, P, glm::tvec4, E0, E1, E2, E3> const & that) + template<int E0, int E1, int E2, int E3> + GLM_FUNC_DECL vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) { *this = that(); } - template <int E0, int E1, int F0, int F1> - GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, detail::_swizzle<2, T, P, glm::tvec2, F0, F1, -1, -2> const & u) + template<int E0, int E1, int F0, int F1> + GLM_FUNC_DECL vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) { - *this = tvec4<T, P>(v(), u()); + *this = vec<4, T, Q>(v(), u()); } - template <int E0, int E1> - GLM_FUNC_DECL tvec4(T const & x, T const & y, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v) + template<int E0, int E1> + GLM_FUNC_DECL vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) { - *this = tvec4<T, P>(x, y, v()); + *this = vec<4, T, Q>(x, y, v()); } - template <int E0, int E1> - GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & w) + template<int E0, int E1> + GLM_FUNC_DECL vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) { - *this = tvec4<T, P>(x, v(), w); + *this = vec<4, T, Q>(x, v(), w); } - template <int E0, int E1> - GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & z, T const & w) + template<int E0, int E1> + GLM_FUNC_DECL vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) { - *this = tvec4<T, P>(v(), z, w); + *this = vec<4, T, Q>(v(), z, w); } - template <int E0, int E1, int E2> - GLM_FUNC_DECL tvec4(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & v, T const & w) + template<int E0, int E1, int E2> + GLM_FUNC_DECL vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) { - *this = tvec4<T, P>(v(), w); + *this = vec<4, T, Q>(v(), w); } - template <int E0, int E1, int E2> - GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & v) + template<int E0, int E1, int E2> + GLM_FUNC_DECL vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) { - *this = tvec4<T, P>(x, v()); + *this = vec<4, T, Q>(x, v()); } # endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED) // -- Unary arithmetic operators -- - GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<T, P> const & v) GLM_DEFAULT; - - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator+=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator-=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator*=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec1<U, P> const& v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec4<U, P> const& v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator/=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec4<U, P> const & v); + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; + + template<typename U> + GLM_FUNC_DECL GLM_CONSTEXPR_CXX14 vec<4, T, Q>& operator=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator+=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator-=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator*=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator/=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); // -- Increment and decrement operators -- - GLM_FUNC_DECL tvec4<T, P> & operator++(); - GLM_FUNC_DECL tvec4<T, P> & operator--(); - GLM_FUNC_DECL tvec4<T, P> operator++(int); - GLM_FUNC_DECL tvec4<T, P> operator--(int); + GLM_FUNC_DECL vec<4, T, Q> & operator++(); + GLM_FUNC_DECL vec<4, T, Q> & operator--(); + GLM_FUNC_DECL vec<4, T, Q> operator++(int); + GLM_FUNC_DECL vec<4, T, Q> operator--(int); // -- Unary bit operators -- - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator%=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator&=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator|=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator^=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator<<=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec4<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator>>=(U scalar); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec1<U, P> const & v); - template <typename U> - GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec4<U, P> const & v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator%=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator&=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator|=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator^=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator<<=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator>>=(U scalar); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); + template<typename U> + GLM_FUNC_DECL vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); }; // -- Unary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(vec<4, T, Q> const& v); // -- Binary operators -- - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(tvec1<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(tvec1<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator*(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator*(tvec1<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec1<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator/(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator/(tvec1<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator%(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator%(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator&(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator&(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator|(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator|(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator^(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator^(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator<<(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator<<(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, T scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, tvec1<T, P> const & scalar); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator>>(T scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator>>(tvec1<T, P> const & scalar, tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL tvec4<T, P> operator~(tvec4<T, P> const & v); + template<typename T, qualifier Q> + GLM_FUNC_DECL vec<4, T, Q> operator~(vec<4, T, Q> const& v); // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_DECL bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <typename T, precision P> - GLM_FUNC_DECL bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2); + template<typename T, qualifier Q> + GLM_FUNC_DECL bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec4<bool, P> operator&&(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); - template <precision P> - GLM_FUNC_DECL tvec4<bool, P> operator||(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2); + template<qualifier Q> + GLM_FUNC_DECL vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE diff --git a/external/include/glm/detail/type_vec4.inl b/external/include/glm/detail/type_vec4.inl index b10a662..972cb4e 100644 --- a/external/include/glm/detail/type_vec4.inl +++ b/external/include/glm/detail/type_vec4.inl @@ -4,335 +4,335 @@ namespace glm{ namespace detail { - template <typename T> + template<typename T> struct is_int { enum test {value = 0}; }; - template <> + template<> struct is_int<uint32> { enum test {value = ~0}; }; - template <> + template<> struct is_int<int32> { enum test {value = ~0}; }; - template <> + template<> struct is_int<uint64> { enum test {value = ~0}; }; - template <> + template<> struct is_int<int64> { enum test {value = ~0}; }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_vec4_add { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); + return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); } }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_vec4_sub { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); + return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); } }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_vec4_mul { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); + return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); } }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_vec4_div { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); + return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); } }; - template <typename T, precision P, bool Aligned> + template<typename T, qualifier Q, bool Aligned> struct compute_vec4_mod { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); + return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_and { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); + return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_or { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); + return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_xor { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); + return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_shift_left { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); + return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_shift_right { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - return tvec4<T, P>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); + return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_equal { - GLM_FUNC_QUALIFIER static bool call(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z) && (v1.w == v2.w); + return + detail::compute_equal<T>::call(v1.x, v2.x) && + detail::compute_equal<T>::call(v1.y, v2.y) && + detail::compute_equal<T>::call(v1.z, v2.z) && + detail::compute_equal<T>::call(v1.w, v2.w); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_nequal { - GLM_FUNC_QUALIFIER static bool call(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z) || (v1.w != v2.w); + return !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); } }; - template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned> + template<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned> struct compute_vec4_bitwise_not { - GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & v) + GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& v) { - return tvec4<T, P>(~v.x, ~v.y, ~v.z, ~v.w); + return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); } }; }//namespace detail // -- Implicit basic constructors -- -# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4() -# ifndef GLM_FORCE_NO_CTOR_INIT +# if !GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec() +# ifdef GLM_FORCE_CTOR_INIT : x(0), y(0), z(0), w(0) # endif {} -# endif//!GLM_HAS_DEFAULTED_FUNCTIONS +# endif//!GLM_HAS_DEFAULTED_FUNCTIONS || defined(GLM_FORCE_CTOR_INIT) # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec(vec<4, T, Q> const& v) : x(v.x), y(v.y), z(v.z), w(v.w) {} # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(tvec4<T, Q> const & v) + template<typename T, qualifier Q> + template<qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec(vec<4, T, P> const& v) : x(v.x), y(v.y), z(v.z), w(v.w) {} // -- Explicit basic constructors -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(ctor) - {} - - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec(T scalar) : x(scalar), y(scalar), z(scalar), w(scalar) {} - template <typename T, precision P> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(T a, T b, T c, T d) - : x(a), y(b), z(c), w(d) + template <typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) + : x(_x), y(_y), z(_z), w(_w) {} // -- Conversion scalar constructors -- - template <typename T, precision P> - template <typename A, typename B, typename C, typename D> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(A a, B b, C c, D d) : - x(static_cast<T>(a)), - y(static_cast<T>(b)), - z(static_cast<T>(c)), - w(static_cast<T>(d)) + template<typename T, qualifier Q> + template<typename X, typename Y, typename Z, typename W> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_y)) + , z(static_cast<T>(_z)) + , w(static_cast<T>(_w)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, typename D> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c, tvec1<D, P> const & d) : - x(static_cast<T>(a.x)), - y(static_cast<T>(b.x)), - z(static_cast<T>(c.x)), - w(static_cast<T>(d.x)) + template<typename T, qualifier Q> + template<typename X, typename Y, typename Z, typename W> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_y.x)) + , z(static_cast<T>(_z.x)) + , w(static_cast<T>(_w.x)) {} // -- Conversion vector constructors -- - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, B b, C c) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(b)), - w(static_cast<T>(c)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) + : x(static_cast<T>(_xy.x)) + , y(static_cast<T>(_xy.y)) + , z(static_cast<T>(_z)) + , w(static_cast<T>(_w)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(b.x)), - w(static_cast<T>(c.x)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) + : x(static_cast<T>(_xy.x)) + , y(static_cast<T>(_xy.y)) + , z(static_cast<T>(_z.x)) + , w(static_cast<T>(_w.x)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A s1, tvec2<B, Q> const & v, C s2) : - x(static_cast<T>(s1)), - y(static_cast<T>(v.x)), - z(static_cast<T>(v.y)), - w(static_cast<T>(s2)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_yz.x)) + , z(static_cast<T>(_yz.y)) + , w(static_cast<T>(_w)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c) : - x(static_cast<T>(a.x)), - y(static_cast<T>(b.x)), - z(static_cast<T>(b.y)), - w(static_cast<T>(c.x)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_yz.x)) + , z(static_cast<T>(_yz.y)) + , w(static_cast<T>(_w.x)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A s1, B s2, tvec2<C, Q> const & v) : - x(static_cast<T>(s1)), - y(static_cast<T>(s2)), - z(static_cast<T>(v.x)), - w(static_cast<T>(v.y)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_y)) + , z(static_cast<T>(_zw.x)) + , w(static_cast<T>(_zw.y)) {} - template <typename T, precision P> - template <typename A, typename B, typename C, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c) : - x(static_cast<T>(a.x)), - y(static_cast<T>(b.x)), - z(static_cast<T>(c.x)), - w(static_cast<T>(c.y)) + template<typename T, qualifier Q> + template<typename A, typename B, typename C, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_y.x)) + , z(static_cast<T>(_zw.x)) + , w(static_cast<T>(_zw.y)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, B b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(a.z)), - w(static_cast<T>(b)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) + : x(static_cast<T>(_xyz.x)) + , y(static_cast<T>(_xyz.y)) + , z(static_cast<T>(_xyz.z)) + , w(static_cast<T>(_w)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(a.z)), - w(static_cast<T>(b.x)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) + : x(static_cast<T>(_xyz.x)) + , y(static_cast<T>(_xyz.y)) + , z(static_cast<T>(_xyz.z)) + , w(static_cast<T>(_w.x)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(A a, tvec3<B, Q> const & b) : - x(static_cast<T>(a)), - y(static_cast<T>(b.x)), - z(static_cast<T>(b.y)), - w(static_cast<T>(b.z)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) + : x(static_cast<T>(_x)) + , y(static_cast<T>(_yzw.x)) + , z(static_cast<T>(_yzw.y)) + , w(static_cast<T>(_yzw.z)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(b.x)), - z(static_cast<T>(b.y)), - w(static_cast<T>(b.z)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) + : x(static_cast<T>(_x.x)) + , y(static_cast<T>(_yzw.x)) + , z(static_cast<T>(_yzw.y)) + , w(static_cast<T>(_yzw.z)) {} - template <typename T, precision P> - template <typename A, typename B, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b) : - x(static_cast<T>(a.x)), - y(static_cast<T>(a.y)), - z(static_cast<T>(b.x)), - w(static_cast<T>(b.y)) + template<typename T, qualifier Q> + template<typename A, typename B, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) + : x(static_cast<T>(_xy.x)) + , y(static_cast<T>(_xy.y)) + , z(static_cast<T>(_zw.x)) + , w(static_cast<T>(_zw.y)) {} - template <typename T, precision P> - template <typename U, precision Q> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(tvec4<U, Q> const & v) : - x(static_cast<T>(v.x)), - y(static_cast<T>(v.y)), - z(static_cast<T>(v.z)), - w(static_cast<T>(v.w)) + template<typename T, qualifier Q> + template<typename U, qualifier P> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR vec<4, T, Q>::vec(vec<4, U, P> const& v) + : x(static_cast<T>(v.x)) + , y(static_cast<T>(v.y)) + , z(static_cast<T>(v.z)) + , w(static_cast<T>(v.w)) {} // -- Component accesses -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER T & tvec4<T, P>::operator[](typename tvec4<T, P>::length_type i) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); return (&x)[i]; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER T const & tvec4<T, P>::operator[](typename tvec4<T, P>::length_type i) const + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); return (&x)[i]; @@ -341,8 +341,8 @@ namespace detail // -- Unary arithmetic operators -- # if !GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P>& tvec4<T, P>::operator=(tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) { this->x = v.x; this->y = v.y; @@ -352,9 +352,9 @@ namespace detail } # endif//!GLM_HAS_DEFAULTED_FUNCTIONS - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P>& tvec4<T, P>::operator=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CXX14 vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) { this->x = static_cast<T>(v.x); this->y = static_cast<T>(v.y); @@ -363,94 +363,94 @@ namespace detail return *this; } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) { - return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x))); + return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) { - return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x))); + return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) { - return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x))); + return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) { - return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x))); + return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } // -- Increment and decrement operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator++() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator++() { ++this->x; ++this->y; @@ -459,8 +459,8 @@ namespace detail return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator--() + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator--() { --this->x; --this->y; @@ -469,498 +469,498 @@ namespace detail return *this; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> tvec4<T, P>::operator++(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> vec<4, T, Q>::operator++(int) { - tvec4<T, P> Result(*this); + vec<4, T, Q> Result(*this); ++*this; return Result; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> tvec4<T, P>::operator--(int) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> vec<4, T, Q>::operator--(int) { - tvec4<T, P> Result(*this); + vec<4, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) { - return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(tvec1<U, P> const& v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(tvec4<U, P> const& v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) { - return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) { - return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) { - return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) { - return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(U scalar) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) { - return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar))); + return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(tvec1<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) { - return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } - template <typename T, precision P> - template <typename U> - GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(tvec4<U, P> const & v) + template<typename T, qualifier Q> + template<typename U> + GLM_FUNC_QUALIFIER vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) { - return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v))); + return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v))); } // -- Unary constant operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(vec<4, T, Q> const& v) { return v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(vec<4, T, Q> const& v) { - return tvec4<T, P>(0) -= v; + return vec<4, T, Q>(0) -= v; } // -- Binary arithmetic operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) { - return tvec4<T, P>(v) += scalar; + return vec<4, T, Q>(v) += scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) += v2; + return vec<4, T, Q>(v1) += v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(v) += scalar; + return vec<4, T, Q>(v) += scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v2) += v1; + return vec<4, T, Q>(v2) += v1; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) += v2; + return vec<4, T, Q>(v1) += v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) { - return tvec4<T, P>(v) -= scalar; + return vec<4, T, Q>(v) -= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) -= v2; + return vec<4, T, Q>(v1) -= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) -= v; + return vec<4, T, Q>(scalar) -= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) -= v2; + return vec<4, T, Q>(v1.x) -= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) -= v2; + return vec<4, T, Q>(v1) -= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) { - return tvec4<T, P>(v) *= scalar; + return vec<4, T, Q>(v) *= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) *= v2; + return vec<4, T, Q>(v1) *= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator*(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(v) *= scalar; + return vec<4, T, Q>(v) *= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v2) *= v1; + return vec<4, T, Q>(v2) *= v1; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) *= v2; + return vec<4, T, Q>(v1) *= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) { - return tvec4<T, P>(v) /= scalar; + return vec<4, T, Q>(v) /= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) /= v2; + return vec<4, T, Q>(v1) /= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator/(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) /= v; + return vec<4, T, Q>(scalar) /= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) /= v2; + return vec<4, T, Q>(v1.x) /= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) /= v2; + return vec<4, T, Q>(v1) /= v2; } // -- Binary bit operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) %= scalar; + return vec<4, T, Q>(v) %= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) %= v2.x; + return vec<4, T, Q>(v1) %= v2.x; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator%(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) %= v; + return vec<4, T, Q>(scalar) %= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec1<T, P> const & scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar.x) %= v; + return vec<4, T, Q>(scalar.x) %= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) %= v2; + return vec<4, T, Q>(v1) %= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) &= scalar; + return vec<4, T, Q>(v) &= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v, tvec1<T, P> const & scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) { - return tvec4<T, P>(v) &= scalar; + return vec<4, T, Q>(v) &= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator&(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) &= v; + return vec<4, T, Q>(scalar) &= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) &= v2; + return vec<4, T, Q>(v1.x) &= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) &= v2; + return vec<4, T, Q>(v1) &= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) |= scalar; + return vec<4, T, Q>(v) |= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) |= v2.x; + return vec<4, T, Q>(v1) |= v2.x; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator|(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) |= v; + return vec<4, T, Q>(scalar) |= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) |= v2; + return vec<4, T, Q>(v1.x) |= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) |= v2; + return vec<4, T, Q>(v1) |= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) ^= scalar; + return vec<4, T, Q>(v) ^= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) ^= v2.x; + return vec<4, T, Q>(v1) ^= v2.x; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator^(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) ^= v; + return vec<4, T, Q>(scalar) ^= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) ^= v2; + return vec<4, T, Q>(v1.x) ^= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) ^= v2; + return vec<4, T, Q>(v1) ^= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) <<= scalar; + return vec<4, T, Q>(v) <<= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) <<= v2.x; + return vec<4, T, Q>(v1) <<= v2.x; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) <<= v; + return vec<4, T, Q>(scalar) <<= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) <<= v2; + return vec<4, T, Q>(v1.x) <<= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) <<= v2; + return vec<4, T, Q>(v1) <<= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v, T scalar) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) { - return tvec4<T, P>(v) >>= scalar; + return vec<4, T, Q>(v) >>= scalar; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec1<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { - return tvec4<T, P>(v1) >>= v2.x; + return vec<4, T, Q>(v1) >>= v2.x; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(T scalar, tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) { - return tvec4<T, P>(scalar) >>= v; + return vec<4, T, Q>(scalar) >>= v; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec1<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1.x) >>= v2; + return vec<4, T, Q>(v1.x) >>= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return tvec4<T, P>(v1) >>= v2; + return vec<4, T, Q>(v1) >>= v2; } - template <typename T, precision P> - GLM_FUNC_QUALIFIER tvec4<T, P> operator~(tvec4<T, P> const & v) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER vec<4, T, Q> operator~(vec<4, T, Q> const& v) { - return detail::compute_vec4_bitwise_not<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v); + return detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v); } // -- Boolean operators -- - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return detail::compute_vec4_equal<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v1, v2); + return detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); } - template <typename T, precision P> - GLM_FUNC_QUALIFIER bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2) + template<typename T, qualifier Q> + GLM_FUNC_QUALIFIER bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { - return detail::compute_vec4_nequal<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v1, v2); + return detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2); } - template <precision P> - GLM_FUNC_QUALIFIER tvec4<bool, P> operator&&(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) { - return tvec4<bool, P>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); + return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); } - template <precision P> - GLM_FUNC_QUALIFIER tvec4<bool, P> operator||(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2) + template<qualifier Q> + GLM_FUNC_QUALIFIER vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) { - return tvec4<bool, P>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); + return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); } }//namespace glm diff --git a/external/include/glm/detail/type_vec4_simd.inl b/external/include/glm/detail/type_vec4_simd.inl index 90652fd..adfb20c 100644 --- a/external/include/glm/detail/type_vec4_simd.inl +++ b/external/include/glm/detail/type_vec4_simd.inl @@ -7,14 +7,14 @@ namespace glm{ namespace detail { # if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - template <precision P, int E0, int E1, int E2, int E3> - struct _swizzle_base1<4, float, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<float, 4> - { - GLM_FUNC_QUALIFIER tvec4<float, P> operator ()() const + template<qualifier Q, int E0, int E1, int E2, int E3> + struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0<float, 4> + { + GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const { __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; # if GLM_ARCH & GLM_ARCH_AVX_BIT Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); # else @@ -24,457 +24,434 @@ namespace detail } }; - template <precision P, int E0, int E1, int E2, int E3> - struct _swizzle_base1<4, int32, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<int32, 4> - { - GLM_FUNC_QUALIFIER tvec4<int32, P> operator ()() const + template<qualifier Q, int E0, int E1, int E2, int E3> + struct _swizzle_base1<4, int32, Q, E0,E1,E2,E3, true> : public _swizzle_base0<int32, 4> + { + GLM_FUNC_QUALIFIER vec<4, int32, Q> operator ()() const { __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - tvec4<int32, P> Result(uninitialize); + vec<4, int32, Q> Result; Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); return Result; } }; - template <precision P, int E0, int E1, int E2, int E3> - struct _swizzle_base1<4, uint32, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<uint32, 4> - { - GLM_FUNC_QUALIFIER tvec4<uint32, P> operator ()() const + template<qualifier Q, int E0, int E1, int E2, int E3> + struct _swizzle_base1<4, uint32, Q, E0,E1,E2,E3, true> : public _swizzle_base0<uint32, 4> + { + GLM_FUNC_QUALIFIER vec<4, uint32, Q> operator ()() const { __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - tvec4<uint32, P> Result(uninitialize); + vec<4, uint32, Q> Result; Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); return Result; } }; # endif// GLM_SWIZZLE == GLM_SWIZZLE_ENABLED - template <precision P> - struct compute_vec4_add<float, P, true> + template<qualifier Q> + struct compute_vec4_add<float, Q, true> { - static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b) + static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; Result.data = _mm_add_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <precision P> - struct compute_vec4_add<double, P, true> + template<qualifier Q> + struct compute_vec4_add<double, Q, true> { - static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b) + static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { - tvec4<double, P> Result(uninitialize); + vec<4, double, Q> Result; Result.data = _mm256_add_pd(a.data, b.data); return Result; } }; # endif - template <precision P> - struct compute_vec4_sub<float, P, true> + template<qualifier Q> + struct compute_vec4_sub<float, Q, true> { - static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b) + static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; Result.data = _mm_sub_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <precision P> - struct compute_vec4_sub<double, P, true> + template<qualifier Q> + struct compute_vec4_sub<double, Q, true> { - static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b) + static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { - tvec4<double, P> Result(uninitialize); + vec<4, double, Q> Result; Result.data = _mm256_sub_pd(a.data, b.data); return Result; } }; # endif - template <precision P> - struct compute_vec4_mul<float, P, true> + template<qualifier Q> + struct compute_vec4_mul<float, Q, true> { - static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b) + static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; Result.data = _mm_mul_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <precision P> - struct compute_vec4_mul<double, P, true> + template<qualifier Q> + struct compute_vec4_mul<double, Q, true> { - static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b) + static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { - tvec4<double, P> Result(uninitialize); + vec<4, double, Q> Result; Result.data = _mm256_mul_pd(a.data, b.data); return Result; } }; # endif - template <precision P> - struct compute_vec4_div<float, P, true> + template<qualifier Q> + struct compute_vec4_div<float, Q, true> { - static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b) + static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { - tvec4<float, P> Result(uninitialize); + vec<4, float, Q> Result; Result.data = _mm_div_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <precision P> - struct compute_vec4_div<double, P, true> + template<qualifier Q> + struct compute_vec4_div<double, Q, true> { - static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b) + static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { - tvec4<double, P> Result(uninitialize); + vec<4, double, Q> Result; Result.data = _mm256_div_pd(a.data, b.data); return Result; } }; # endif - template <> + template<> struct compute_vec4_div<float, aligned_lowp, true> { - static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & a, tvec4<float, aligned_lowp> const & b) + static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) { - tvec4<float, aligned_lowp> Result(uninitialize); + vec<4, float, aligned_lowp> Result; Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); return Result; } }; - template <typename T, precision P> - struct compute_vec4_and<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_and<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_and_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_and<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_and<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_and_si256(a.data, b.data); return Result; } }; # endif - template <typename T, precision P> - struct compute_vec4_or<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_or<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_or_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_or<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_or<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_or_si256(a.data, b.data); return Result; } }; # endif - template <typename T, precision P> - struct compute_vec4_xor<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_xor<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_xor_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_xor<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_xor<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_xor_si256(a.data, b.data); return Result; } }; # endif - template <typename T, precision P> - struct compute_vec4_shift_left<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_shift_left<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_sll_epi32(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_shift_left<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_shift_left<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_sll_epi64(a.data, b.data); return Result; } }; # endif - template <typename T, precision P> - struct compute_vec4_shift_right<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_shift_right<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_srl_epi32(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_shift_right<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_shift_right<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b) + static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_srl_epi64(a.data, b.data); return Result; } }; # endif - template <typename T, precision P> - struct compute_vec4_bitwise_not<T, P, true, 32, true> + template<typename T, qualifier Q> + struct compute_vec4_bitwise_not<T, Q, true, 32, true> { - static tvec4<T, P> call(tvec4<T, P> const & v) + static vec<4, T, Q> call(vec<4, T, Q> const& v) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <typename T, precision P> - struct compute_vec4_bitwise_not<T, P, true, 64, true> + template<typename T, qualifier Q> + struct compute_vec4_bitwise_not<T, Q, true, 64, true> { - static tvec4<T, P> call(tvec4<T, P> const & v) + static vec<4, T, Q> call(vec<4, T, Q> const& v) { - tvec4<T, P> Result(uninitialize); + vec<4, T, Q> Result; Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); return Result; } }; # endif - template <precision P> - struct compute_vec4_equal<float, P, false, 32, true> + template<qualifier Q> + struct compute_vec4_equal<float, Q, false, 32, true> { - static bool call(tvec4<float, P> const & v1, tvec4<float, P> const & v2) + static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0; } }; - template <precision P> - struct compute_vec4_equal<int32, P, true, 32, true> + template<qualifier Q> + struct compute_vec4_equal<int32, Q, true, 32, true> { - static bool call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2) + static bool call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) { return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; } }; - template <precision P> - struct compute_vec4_nequal<float, P, false, 32, true> + template<qualifier Q> + struct compute_vec4_nequal<float, Q, false, 32, true> { - static bool call(tvec4<float, P> const & v1, tvec4<float, P> const & v2) + static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; } }; - template <precision P> - struct compute_vec4_nequal<int32, P, true, 32, true> + template<qualifier Q> + struct compute_vec4_nequal<int32, Q, true, 32, true> { - static bool call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2) + static bool call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) { return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; } }; }//namespace detail -# if !GLM_HAS_DEFAULTED_FUNCTIONS - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4() -# ifndef GLM_FORCE_NO_CTOR_INIT - : data(_mm_setzero_ps()) -# endif - {} - - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4() -# ifndef GLM_FORCE_NO_CTOR_INIT - : data(_mm_setzero_ps()) -# endif - {} - - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4() -# ifndef GLM_FORCE_NO_CTOR_INIT - : data(_mm_setzero_ps()) -# endif - {} -# endif//!GLM_HAS_DEFAULTED_FUNCTIONS - - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(float s) : - data(_mm_set1_ps(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_lowp>::vec(float _s) : + data(_mm_set1_ps(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(float s) : - data(_mm_set1_ps(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_mediump>::vec(float _s) : + data(_mm_set1_ps(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(float s) : - data(_mm_set1_ps(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_highp>::vec(float _s) : + data(_mm_set1_ps(_s)) {} # if GLM_ARCH & GLM_ARCH_AVX_BIT - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_lowp>::tvec4(double s) : - data(_mm256_set1_pd(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, double, aligned_lowp>::vec(double _s) : + data(_mm256_set1_pd(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_mediump>::tvec4(double s) : - data(_mm256_set1_pd(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, double, aligned_mediump>::vec(double _s) : + data(_mm256_set1_pd(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_highp>::tvec4(double s) : - data(_mm256_set1_pd(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, double, aligned_highp>::vec(double _s) : + data(_mm256_set1_pd(_s)) {} # endif - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_lowp>::tvec4(int32 s) : - data(_mm_set1_epi32(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_lowp>::vec(int32 _s) : + data(_mm_set1_epi32(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_mediump>::tvec4(int32 s) : - data(_mm_set1_epi32(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_mediump>::vec(int32 _s) : + data(_mm_set1_epi32(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_highp>::tvec4(int32 s) : - data(_mm_set1_epi32(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_highp>::vec(int32 _s) : + data(_mm_set1_epi32(_s)) {} # if GLM_ARCH & GLM_ARCH_AVX2_BIT - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_lowp>::tvec4(int64 s) : - data(_mm256_set1_epi64x(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int64, aligned_lowp>::vec(int64 _s) : + data(_mm256_set1_epi64x(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_mediump>::tvec4(int64 s) : - data(_mm256_set1_epi64x(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int64, aligned_mediump>::vec(int64 _s) : + data(_mm256_set1_epi64x(_s)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_highp>::tvec4(int64 s) : - data(_mm256_set1_epi64x(s)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int64, aligned_highp>::vec(int64 _s) : + data(_mm256_set1_epi64x(_s)) {} # endif - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(float a, float b, float c, float d) : - data(_mm_set_ps(d, c, b, a)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : + data(_mm_set_ps(_w, _z, _y, _x)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(float a, float b, float c, float d) : - data(_mm_set_ps(d, c, b, a)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : + data(_mm_set_ps(_w, _z, _y, _x)) {} - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(float a, float b, float c, float d) : - data(_mm_set_ps(d, c, b, a)) + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : + data(_mm_set_ps(_w, _z, _y, _x)) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_lowp>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_set_epi32(d, c, b, a)) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_lowp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_set_epi32(_w, _z, _y, _x)) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_mediump>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_set_epi32(d, c, b, a)) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_mediump>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_set_epi32(_w, _z, _y, _x)) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_highp>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_set_epi32(d, c, b, a)) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, int32, aligned_highp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_set_epi32(_w, _z, _y, _x)) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_lowp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_castsi128_ps(_mm_set_epi32(_w, _z, _y, _x))) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_mediump>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_castsi128_ps(_mm_set_epi32(_w, _z, _y, _x))) {} - template <> - template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(int32 a, int32 b, int32 c, int32 d) : - data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) + template<> + template<> + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD vec<4, float, aligned_highp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : + data(_mm_castsi128_ps(_mm_set_epi32(_w, _z, _y, _x))) {} }//namespace glm |