diff --git a/glm/detail/func_geometric.inl b/glm/detail/func_geometric.inl index f928f232..67255d45 100644 --- a/glm/detail/func_geometric.inl +++ b/glm/detail/func_geometric.inl @@ -174,13 +174,6 @@ namespace detail return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); } - template - GLM_FUNC_QUALIFIER T dot(tquat const& x, tquat const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - // cross template GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 3617ef38..8f9ed43d 100644 --- a/glm/detail/func_integer.inl +++ b/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" diff --git a/glm/detail/glm.cpp b/glm/detail/glm.cpp index 9cbdd029..f4224ac0 100644 --- a/glm/detail/glm.cpp +++ b/glm/detail/glm.cpp @@ -3,6 +3,7 @@ #define GLM_ENABLE_EXPERIMENTAL #include +#include #include #include diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 4272ddcf..7ed69c61 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -103,28 +103,11 @@ namespace detail }//namespace detail #if GLM_HAS_TEMPLATE_ALIASES - template using tvec1 = vec<1, T, Q>; template using tvec2 = vec<2, T, Q>; template using tvec3 = vec<3, T, Q>; template using tvec4 = vec<4, T, Q>; #endif//GLM_HAS_TEMPLATE_ALIASES - typedef vec<1, float, highp> highp_vec1_t; - typedef vec<1, float, mediump> mediump_vec1_t; - typedef vec<1, float, lowp> lowp_vec1_t; - typedef vec<1, double, highp> highp_dvec1_t; - typedef vec<1, double, mediump> mediump_dvec1_t; - typedef vec<1, double, lowp> lowp_dvec1_t; - typedef vec<1, int, highp> highp_ivec1_t; - typedef vec<1, int, mediump> mediump_ivec1_t; - typedef vec<1, int, lowp> lowp_ivec1_t; - typedef vec<1, uint, highp> highp_uvec1_t; - typedef vec<1, uint, mediump> mediump_uvec1_t; - typedef vec<1, uint, lowp> lowp_uvec1_t; - typedef vec<1, bool, highp> highp_bvec1_t; - typedef vec<1, bool, mediump> mediump_bvec1_t; - typedef vec<1, bool, lowp> lowp_bvec1_t; - /// @addtogroup core_precision /// @{ diff --git a/glm/detail/type_vec1.hpp b/glm/detail/type_vec1.hpp index 73169de8..e69de29b 100644 --- a/glm/detail/type_vec1.hpp +++ b/glm/detail/type_vec1.hpp @@ -1,301 +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 - -namespace glm -{ - template - struct vec<1, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec type; - typedef vec<1, bool, Q> 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, Q, tvec2, x) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, tvec2, r) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, tvec2, s) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, x) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, r) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, s) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, tvec4, x) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, tvec4, r) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, 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 GLM_CONSTEXPR 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 vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit vec(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<2, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - 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 - 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 - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<1, U, P> const& v); - - // -- Swizzle constructors -- -/* -# if(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)) - template - GLM_FUNC_DECL tvec(detail::_swizzle<1, T, Q, 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 vec & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL vec & operator=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator+=(U scalar); - template - GLM_FUNC_DECL vec & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator-=(U scalar); - template - GLM_FUNC_DECL vec & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator*=(U scalar); - template - GLM_FUNC_DECL vec & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator/=(U scalar); - template - GLM_FUNC_DECL vec & operator/=(vec<1, U, Q> const& v); - - // -- Increment and decrement operators -- - - 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 - GLM_FUNC_DECL vec & operator%=(U scalar); - template - GLM_FUNC_DECL vec & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator&=(U scalar); - template - GLM_FUNC_DECL vec & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator|=(U scalar); - template - GLM_FUNC_DECL vec & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator^=(U scalar); - template - GLM_FUNC_DECL vec & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator<<=(U scalar); - template - GLM_FUNC_DECL vec & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL vec & operator>>=(U scalar); - template - GLM_FUNC_DECL vec & operator>>=(vec<1, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, T, Q> operator~(vec<1, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); - - template - GLM_FUNC_DECL vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/glm/ext/vec1.hpp b/glm/ext/vec1.hpp index e69de29b..f3bb1e34 100644 --- a/glm/ext/vec1.hpp +++ b/glm/ext/vec1.hpp @@ -0,0 +1,398 @@ +/// @ref ext_vec1 +/// @file glm/ext/vec1.hpp +/// +/// @see core (dependence) +/// +/// @defgroup ext_vec1 GLM_EXT_vec1 +/// @ingroup ext +/// +/// Include to use the features of this extension. +/// +/// Add vec1, ivec1, uvec1 and bvec1 types. + +#pragma once + +#include "../fwd.hpp" +#include "../detail/type_vec.hpp" +#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED +# if GLM_HAS_UNRESTRICTED_UNIONS +# include "../detail/_swizzle.hpp" +# else +# include "../detail/_swizzle_func.hpp" +# endif +#endif //GLM_SWIZZLE +#include + +#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) +# pragma message("GLM: GLM_EXT_vec1 extension included") +#endif + +namespace glm +{ + /// @addtogroup ext_vec1 + /// @{ + + template + struct vec<1, T, Q> + { + // -- Implementation detail -- + + typedef T value_type; + typedef vec type; + typedef vec<1, bool, Q> 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, Q, tvec2, x) + _GLM_SWIZZLE1_2_MEMBERS(T, Q, tvec2, r) + _GLM_SWIZZLE1_2_MEMBERS(T, Q, tvec2, s) + _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, x) + _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, r) + _GLM_SWIZZLE1_3_MEMBERS(T, Q, tvec3, s) + _GLM_SWIZZLE1_4_MEMBERS(T, Q, tvec4, x) + _GLM_SWIZZLE1_4_MEMBERS(T, Q, tvec4, r) + _GLM_SWIZZLE1_4_MEMBERS(T, Q, 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 GLM_CONSTEXPR 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 vec() GLM_DEFAULT; + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec const& v) GLM_DEFAULT; + template + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR vec(vec<1, T, P> const& v); + + // -- Explicit basic constructors -- + + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit vec(T scalar); + + // -- Conversion vector constructors -- + + /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<2, U, P> const& v); + /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + 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 + 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 + GLM_FUNC_DECL GLM_CONSTEXPR_CTOR GLM_EXPLICIT vec(vec<1, U, P> const& v); + + // -- Swizzle constructors -- +/* +# if(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)) + template + GLM_FUNC_DECL tvec(detail::_swizzle<1, T, Q, 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 vec & operator=(vec const& v) GLM_DEFAULT; + + template + GLM_FUNC_DECL vec & operator=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator+=(U scalar); + template + GLM_FUNC_DECL vec & operator+=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator-=(U scalar); + template + GLM_FUNC_DECL vec & operator-=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator*=(U scalar); + template + GLM_FUNC_DECL vec & operator*=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator/=(U scalar); + template + GLM_FUNC_DECL vec & operator/=(vec<1, U, Q> const& v); + + // -- Increment and decrement operators -- + + 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 + GLM_FUNC_DECL vec & operator%=(U scalar); + template + GLM_FUNC_DECL vec & operator%=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator&=(U scalar); + template + GLM_FUNC_DECL vec & operator&=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator|=(U scalar); + template + GLM_FUNC_DECL vec & operator|=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator^=(U scalar); + template + GLM_FUNC_DECL vec & operator^=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator<<=(U scalar); + template + GLM_FUNC_DECL vec & operator<<=(vec<1, U, Q> const& v); + template + GLM_FUNC_DECL vec & operator>>=(U scalar); + template + GLM_FUNC_DECL vec & operator>>=(vec<1, U, Q> const& v); + }; + + // -- Unary operators -- + + template + GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v); + + // -- Binary operators -- + + template + GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); + + template + GLM_FUNC_DECL vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); + + template + GLM_FUNC_DECL vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, T, Q> operator~(vec<1, T, Q> const& v); + + // -- Boolean operators -- + + template + GLM_FUNC_DECL bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); + + template + GLM_FUNC_DECL vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); + + /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, float, highp> highp_vec1; + + /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, float, mediump> mediump_vec1; + + /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, float, lowp> lowp_vec1; + + /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, double, highp> highp_dvec1; + + /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, double, mediump> mediump_dvec1; + + /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. + /// + /// @see ext_vec1 + typedef vec<1, double, lowp> lowp_dvec1; + + /// 1 component vector of signed integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, int, highp> highp_ivec1; + + /// 1 component vector of signed integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, int, mediump> mediump_ivec1; + + /// 1 component vector of signed integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, int, lowp> lowp_ivec1; + + /// 1 component vector of unsigned integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, uint, highp> highp_uvec1; + + /// 1 component vector of unsigned integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, uint, mediump> mediump_uvec1; + + /// 1 component vector of unsigned integer numbers. + /// + /// @see ext_vec1 + typedef vec<1, uint, lowp> lowp_uvec1; + + /// 1 component vector of bool values. + /// + /// @see ext_vec1 + typedef vec<1, bool, highp> highp_bvec1; + + /// 1 component vector of bool values. + /// + /// @see ext_vec1 + typedef vec<1, bool, mediump> mediump_bvec1; + + /// 1 component vector of bool values. + /// + /// @see ext_vec1 + typedef vec<1, bool, lowp> lowp_bvec1; + +#if GLM_HAS_TEMPLATE_ALIASES + template using tvec1 = vec<1, T, Q>; +#endif//GLM_HAS_TEMPLATE_ALIASES + + /// @} +}//namespace glm + +#ifndef GLM_EXTERNAL_TEMPLATE +#include "../detail/type_vec1.inl" +#endif//GLM_EXTERNAL_TEMPLATE diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index fe6c052d..eed933fe 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -364,6 +364,13 @@ namespace detail // -- Operations -- + template + GLM_FUNC_QUALIFIER T dot(tquat const& x, tquat const& y) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); + return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); + } + template GLM_FUNC_QUALIFIER T length(tquat const& q) { diff --git a/glm/gtc/random.inl b/glm/gtc/random.inl index ad9e64db..68f38742 100644 --- a/glm/gtc/random.inl +++ b/glm/gtc/random.inl @@ -4,6 +4,7 @@ #include "../geometric.hpp" #include "../exponential.hpp" #include "../trigonometric.hpp" +#include "../ext/vec1.hpp" #include #include #include diff --git a/glm/gtc/vec1.hpp b/glm/gtc/vec1.hpp index 77d3dff0..ab355e90 100644 --- a/glm/gtc/vec1.hpp +++ b/glm/gtc/vec1.hpp @@ -13,8 +13,7 @@ #pragma once // Dependency: -#include "../glm.hpp" -#include "../detail/type_vec1.hpp" +#include "../ext/vec1.hpp" #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_vec1 extension included") @@ -22,81 +21,6 @@ namespace glm { - /// 1 component vector of high qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef highp_vec1_t highp_vec1; - - /// 1 component vector of medium qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef mediump_vec1_t mediump_vec1; - - /// 1 component vector of low qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef lowp_vec1_t lowp_vec1; - - /// 1 component vector of high qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef highp_dvec1_t highp_dvec1; - - /// 1 component vector of medium qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef mediump_dvec1_t mediump_dvec1; - - /// 1 component vector of low qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef lowp_dvec1_t lowp_dvec1; - - /// 1 component vector of high qualifier signed integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef highp_ivec1_t highp_ivec1; - - /// 1 component vector of medium qualifier signed integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef mediump_ivec1_t mediump_ivec1; - - /// 1 component vector of low qualifier signed integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef lowp_ivec1_t lowp_ivec1; - - /// 1 component vector of high qualifier unsigned integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef highp_uvec1_t highp_uvec1; - - /// 1 component vector of medium qualifier unsigned integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef mediump_uvec1_t mediump_uvec1; - - /// 1 component vector of low qualifier unsigned integer numbers. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef lowp_uvec1_t lowp_uvec1; - - /// 1 component vector of high qualifier boolean. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef highp_bvec1_t highp_bvec1; - - /// 1 component vector of medium qualifier boolean. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef mediump_bvec1_t mediump_bvec1; - - /// 1 component vector of low qualifier boolean. - /// There is no guarantee on the actual qualifier. - /// @see gtc_vec1 extension. - typedef lowp_bvec1_t lowp_bvec1; - ////////////////////////// // vec1 definition diff --git a/readme.md b/readme.md index 36cf440e..76e0ea5b 100644 --- a/readme.md +++ b/readme.md @@ -64,6 +64,7 @@ glm::mat4 camera(float Translate, glm::vec2 const& Rotate) - Added quatLookAt to GTX_quaternion #659 - Added fmin, fmax and fclamp to GTX_extended_min_max #372 - Added EXT_vector_relational: extend equal and notEqual to take an epsilon argument +- Added EXT_vec1: *vec1 types #### Improvements: - No more default initialization of vector, matrix and quaternion types diff --git a/test/core/core_type_vec1.cpp b/test/core/core_type_vec1.cpp index 86db994a..3f7aad9d 100644 --- a/test/core/core_type_vec1.cpp +++ b/test/core/core_type_vec1.cpp @@ -1,6 +1,7 @@ #define GLM_FORCE_SWIZZLE #include #include +#include #include static glm::vec1 g1; diff --git a/test/gtc/gtc_noise.cpp b/test/gtc/gtc_noise.cpp index 6c0c75f3..f559cea1 100644 --- a/test/gtc/gtc_noise.cpp +++ b/test/gtc/gtc_noise.cpp @@ -1,5 +1,6 @@ #define GLM_ENABLE_EXPERIMENTAL #include +#include #include int test_simplex() diff --git a/test/gtc/gtc_packing.cpp b/test/gtc/gtc_packing.cpp index d8ad8da6..c327ec33 100644 --- a/test/gtc/gtc_packing.cpp +++ b/test/gtc/gtc_packing.cpp @@ -1,3 +1,4 @@ +#include #include #include #include