diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bcbedca..6971a678 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,10 +49,10 @@ if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") OR (("${CMAKE_CXX_COMPILER_ID}" endif() endif() -option(GLM_TEST_ENABLE_SSE2 "Enable SSE2 optimizations" OFF) -option(GLM_TEST_ENABLE_SSE3 "Enable SSE3 optimizations" OFF) -option(GLM_TEST_ENABLE_AVX "Enable AVX optimizations" OFF) -option(GLM_TEST_ENABLE_AVX2 "Enable AVX2 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF) option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF) if(GLM_TEST_FORCE_PURE) diff --git a/glm/core/dummy.cpp b/glm/core/dummy.cpp index 7a32239b..989adf10 100644 --- a/glm/core/dummy.cpp +++ b/glm/core/dummy.cpp @@ -73,7 +73,7 @@ int main() # if(GLM_ARCH & GLM_ARCH_SSE2) test_simd(); # endif -*/ +*/ C<> c; diff --git a/glm/core/intrinsic_matrix.inl b/glm/core/intrinsic_matrix.inl index f09034e1..e753336b 100644 --- a/glm/core/intrinsic_matrix.inl +++ b/glm/core/intrinsic_matrix.inl @@ -1003,7 +1003,7 @@ GLM_FUNC_QUALIFIER void sse_rotate_ps(__m128 const in[4], float Angle, float con __m128 Sin0 = _mm_set_ss(s); __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); - // detail::tvec3 temp = (valType(1) - c) * axis; + // detail::tvec3 temp = (valType(1) - c) * axis; __m128 Temp0 = _mm_sub_ps(one, CosA); __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); diff --git a/glm/core/intrinsic_vector_relational.inl b/glm/core/intrinsic_vector_relational.inl index 80688325..853ab1fc 100644 --- a/glm/core/intrinsic_vector_relational.inl +++ b/glm/core/intrinsic_vector_relational.inl @@ -28,10 +28,10 @@ // //// lessThan //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type lessThan +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type lessThan //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -43,10 +43,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type lessThan +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type lessThan //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -58,10 +58,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type lessThan +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type lessThan //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -74,10 +74,10 @@ // //// lessThanEqual //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type lessThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type lessThanEqual //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -89,10 +89,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type lessThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type lessThanEqual //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -104,10 +104,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type lessThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type lessThanEqual //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -120,10 +120,10 @@ // //// greaterThan //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type greaterThan +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type greaterThan //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -135,10 +135,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type greaterThan +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type greaterThan //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -150,10 +150,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type greaterThan +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type greaterThan //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -166,10 +166,10 @@ // //// greaterThanEqual //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type greaterThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type greaterThanEqual //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -181,10 +181,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type greaterThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type greaterThanEqual //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -196,10 +196,10 @@ //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type greaterThanEqual +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type greaterThanEqual //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -212,10 +212,10 @@ // //// equal //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type equal +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type equal //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -224,14 +224,14 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec2::bool_type(x.x == y.x, x.y == y.y); +// return typename detail::tvec2::bool_type(x.x == y.x, x.y == y.y); //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type equal +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type equal //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -240,14 +240,14 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec3::bool_type(x.x == y.x, x.y == y.y, x.z == y.z); +// return typename detail::tvec3::bool_type(x.x == y.x, x.y == y.y, x.z == y.z); //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type equal +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type equal //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -256,15 +256,15 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec4::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w); +// return typename detail::tvec4::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w); //} // //// notEqual //template -//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type notEqual +//GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type notEqual //( -// detail::tvec2 const & x, -// detail::tvec2 const & y +// detail::tvec2 const & x, +// detail::tvec2 const & y //) //{ // GLM_STATIC_ASSERT( @@ -273,14 +273,14 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec2::bool_type(x.x != y.x, x.y != y.y); +// return typename detail::tvec2::bool_type(x.x != y.x, x.y != y.y); //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type notEqual +//GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type notEqual //( -// detail::tvec3 const & x, -// detail::tvec3 const & y +// detail::tvec3 const & x, +// detail::tvec3 const & y //) //{ // GLM_STATIC_ASSERT( @@ -289,14 +289,14 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec3::bool_type(x.x != y.x, x.y != y.y, x.z != y.z); +// return typename detail::tvec3::bool_type(x.x != y.x, x.y != y.y, x.z != y.z); //} // //template -//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type notEqual +//GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type notEqual //( -// detail::tvec4 const & x, -// detail::tvec4 const & y +// detail::tvec4 const & x, +// detail::tvec4 const & y //) //{ // GLM_STATIC_ASSERT( @@ -305,7 +305,7 @@ // detail::type::is_uint || // detail::type::is_bool); // -// return typename detail::tvec4::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w); +// return typename detail::tvec4::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w); //} // //// any diff --git a/glm/core/setup.hpp b/glm/core/setup.hpp index d4a54ba4..fd110011 100644 --- a/glm/core/setup.hpp +++ b/glm/core/setup.hpp @@ -718,7 +718,7 @@ #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED)) # define GLM_MESSAGE_SWIZZLE_DISPLAYED -# if defined(GLM_SWIZZL) +# if defined(GLM_SWIZZLE) # pragma message("GLM: Swizzling operators enabled") # else # pragma message("GLM: Swizzling operators disabled") diff --git a/glm/core/type_vec2.hpp b/glm/core/type_vec2.hpp index 00e1d7af..08649a3e 100644 --- a/glm/core/type_vec2.hpp +++ b/glm/core/type_vec2.hpp @@ -57,11 +57,12 @@ namespace detail typedef tvec2 type; typedef tvec2 bool_type; typedef T value_type; + typedef int size_type; ////////////////////////////////////// // Helper - GLM_FUNC_DECL GLM_CONSTEXPR int length() const; + GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const; ////////////////////////////////////// // Data diff --git a/glm/core/type_vec2.inl b/glm/core/type_vec2.inl index 3c95d5eb..d690e39b 100644 --- a/glm/core/type_vec2.inl +++ b/glm/core/type_vec2.inl @@ -30,7 +30,7 @@ namespace glm{ namespace detail { template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int tvec2::length() const + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec2::size_type tvec2::length() const { return 2; } diff --git a/glm/core/type_vec3.hpp b/glm/core/type_vec3.hpp index cd48a6ed..40343504 100644 --- a/glm/core/type_vec3.hpp +++ b/glm/core/type_vec3.hpp @@ -57,11 +57,12 @@ namespace detail typedef tvec3 type; typedef tvec3 bool_type; typedef T value_type; + typedef int size_type; ////////////////////////////////////// // Helper - GLM_FUNC_DECL GLM_CONSTEXPR int length() const; + GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const; ////////////////////////////////////// // Data diff --git a/glm/core/type_vec3.inl b/glm/core/type_vec3.inl index 8a0babb7..a61b075b 100644 --- a/glm/core/type_vec3.inl +++ b/glm/core/type_vec3.inl @@ -30,7 +30,7 @@ namespace glm{ namespace detail { template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int tvec3::length() const + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3::size_type tvec3::length() const { return 3; } diff --git a/glm/core/type_vec4.hpp b/glm/core/type_vec4.hpp index 354a5102..e044b807 100644 --- a/glm/core/type_vec4.hpp +++ b/glm/core/type_vec4.hpp @@ -58,11 +58,12 @@ namespace detail typedef tvec4 type; typedef tvec4 bool_type; typedef T value_type; + typedef int size_type; ////////////////////////////////////// // Helper - GLM_FUNC_DECL GLM_CONSTEXPR int length() const; + GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const; ////////////////////////////////////// // Data diff --git a/glm/core/type_vec4.inl b/glm/core/type_vec4.inl index 71371d75..69186722 100644 --- a/glm/core/type_vec4.inl +++ b/glm/core/type_vec4.inl @@ -30,7 +30,7 @@ namespace glm{ namespace detail { template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int tvec4::length() const + GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec4::size_type tvec4::length() const { return 4; } diff --git a/glm/ext.hpp b/glm/ext.hpp index b3d98a3b..95121dc7 100644 --- a/glm/ext.hpp +++ b/glm/ext.hpp @@ -65,7 +65,6 @@ #include "./gtc/constants.hpp" #include "./gtc/epsilon.hpp" -#include "./gtc/half_float.hpp" #include "./gtc/matrix_access.hpp" #include "./gtc/matrix_integer.hpp" #include "./gtc/matrix_inverse.hpp" @@ -100,6 +99,7 @@ #include "./gtx/int_10_10_10_2.hpp" #include "./gtx/integer.hpp" #include "./gtx/intersect.hpp" +#include "./gtx/io.hpp" #include "./gtx/log_base.hpp" #include "./gtx/matrix_cross_product.hpp" #include "./gtx/matrix_interpolation.hpp" diff --git a/glm/gtc/packing.inl b/glm/gtc/packing.inl index 3056c8a8..0aaac0f6 100644 --- a/glm/gtc/packing.inl +++ b/glm/gtc/packing.inl @@ -167,7 +167,7 @@ namespace detail return float2packed10(reinterpret_cast(x)); } - float packed10bitToFloat(glm::uint x) + GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) { if(x == 0) return 0.0f; @@ -180,10 +180,10 @@ namespace detail return reinterpret_cast(result); } - glm::uint f11_f11_f10(float x, float y, float z) - { - return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); - } +// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) +// { +// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); +// } union u10u10u10u2 { diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index 3acf6fbe..cc3c76ad 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -106,6 +106,8 @@ namespace detail GLM_FUNC_DECL T const & operator[](int i) const; // Operators + GLM_FUNC_DECL tquat & operator+=(tquat const & q); + GLM_FUNC_DECL tquat & operator*=(tquat const & q); GLM_FUNC_DECL tquat & operator*=(T const & s); GLM_FUNC_DECL tquat & operator/=(T const & s); }; @@ -258,25 +260,26 @@ namespace detail detail::tvec3 const & axis); /// Returns euler angles, yitch as x, yaw as y, roll as z. + /// The result is expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise. /// /// @see gtc_quaternion template GLM_FUNC_DECL detail::tvec3 eulerAngles( detail::tquat const & x); - /// Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise. + /// Returns roll value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise. /// /// @see gtx_quaternion template GLM_FUNC_DECL T roll(detail::tquat const & x); - /// Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise. + /// Returns pitch value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise. /// /// @see gtx_quaternion template GLM_FUNC_DECL T pitch(detail::tquat const & x); - /// Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise. + /// Returns yaw value of euler angles expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise. /// /// @see gtx_quaternion template diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index ab503cdb..e8aa037b 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -182,6 +182,34 @@ namespace detail ////////////////////////////////////////////////////////////// // tquat operators + template + GLM_FUNC_QUALIFIER tquat & tquat::operator += + ( + tquat const & q + ) + { + this->w += q.w; + this->x += q.x; + this->y += q.y; + this->z += q.z; + return *this; + } + + template + GLM_FUNC_QUALIFIER tquat & tquat::operator *= + ( + tquat const & q + ) + { + tquat const p(*this); + + this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; + this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; + this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; + this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; + return *this; + } + template GLM_FUNC_QUALIFIER tquat & tquat::operator *= ( @@ -194,7 +222,7 @@ namespace detail this->z *= s; return *this; } - + template GLM_FUNC_QUALIFIER tquat & tquat::operator /= ( @@ -227,11 +255,7 @@ namespace detail detail::tquat const & p ) { - return detail::tquat( - q.w + p.w, - q.x + p.x, - q.y + p.y, - q.z + p.z); + return detail::tquat(q) += p; } template @@ -241,11 +265,7 @@ namespace detail detail::tquat const & p ) { - return detail::tquat( - q.w * p.w - q.x * p.x - q.y * p.y - q.z * p.z, - q.w * p.x + q.x * p.w + q.y * p.z - q.z * p.y, - q.w * p.y + q.y * p.w + q.z * p.x - q.x * p.z, - q.w * p.z + q.z * p.w + q.x * p.y - q.y * p.x); + return detail::tquat(q) *= p; } // Transformation diff --git a/glm/gtc/ulp.inl b/glm/gtc/ulp.inl index 97d0b271..80e070e7 100644 --- a/glm/gtc/ulp.inl +++ b/glm/gtc/ulp.inl @@ -284,7 +284,7 @@ namespace glm if(x < y) { T temp = x; - while(temp != y && ulp < std::numeric_limits::max()) + while(temp != y)// && ulp < std::numeric_limits::max()) { ++ulp; temp = next_float(temp); @@ -293,7 +293,7 @@ namespace glm else if(y < x) { T temp = y; - while(temp != x && ulp < std::numeric_limits::max()) + while(temp != x)// && ulp < std::numeric_limits::max()) { ++ulp; temp = next_float(temp); diff --git a/glm/gtx/associated_min_max.inl b/glm/gtx/associated_min_max.inl index 3a4640fe..3ed3d59f 100644 --- a/glm/gtx/associated_min_max.inl +++ b/glm/gtx/associated_min_max.inl @@ -10,127 +10,127 @@ namespace glm{ // Min comparison between 2 variables -template +template GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) { return x < y ? a : b; } -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b ) { - detail::tvec2 Result; + detail::tvec2 Result; //Result.x = x[0] < y[0] ? a[0] : b[0]; //Result.y = x[1] < y[1] ? a[1] : b[1]; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - T x, const detail::tvec2& a, - T y, const detail::tvec2& b + T x, const detail::tvec2& a, + T y, const detail::tvec2& b ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x < y ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( - T x, const detail::tvec3& a, - T y, const detail::tvec3& b + T x, const detail::tvec3& a, + T y, const detail::tvec3& b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x < y ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( - T x, const detail::tvec4& a, - T y, const detail::tvec4& b + T x, const detail::tvec4& a, + T y, const detail::tvec4& b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x < y ? a[i] : b[i]; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - const detail::tvec2& x, U a, - const detail::tvec2& y, U b + detail::tvec2 const & x, U a, + detail::tvec2 const & y, U b ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a : b; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( const detail::tvec3& x, U a, const detail::tvec3& y, U b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a : b; return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( const detail::tvec4& x, U a, const detail::tvec4& y, U b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? a : b; return Result; } @@ -148,44 +148,44 @@ GLM_FUNC_QUALIFIER U associatedMin return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b, - const detail::tvec2& z, const detail::tvec2& c + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b, + const detail::tvec2& z, const detail::tvec2& c ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b, - const detail::tvec3& z, const detail::tvec3& c + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b, + const detail::tvec3& z, const detail::tvec3& c ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); return Result; } -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b, - const detail::tvec4& z, const detail::tvec4& c + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b, + const detail::tvec4& z, const detail::tvec4& c ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); return Result; } @@ -209,17 +209,17 @@ GLM_FUNC_QUALIFIER U associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b, - const detail::tvec2& z, const detail::tvec2& c, - const detail::tvec2& w, const detail::tvec2& d + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b, + const detail::tvec2& z, const detail::tvec2& c, + const detail::tvec2& w, const detail::tvec2& d ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) { T Test1 = min(x[i], y[i]); T Test2 = min(z[i], w[i]); @@ -231,17 +231,17 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b, - const detail::tvec3& z, const detail::tvec3& c, - const detail::tvec3& w, const detail::tvec3& d + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b, + const detail::tvec3& z, const detail::tvec3& c, + const detail::tvec3& w, const detail::tvec3& d ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) { T Test1 = min(x[i], y[i]); T Test2 = min(z[i], w[i]); @@ -253,17 +253,17 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b, - const detail::tvec4& z, const detail::tvec4& c, - const detail::tvec4& w, const detail::tvec4& d + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b, + const detail::tvec4& z, const detail::tvec4& c, + const detail::tvec4& w, const detail::tvec4& d ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) { T Test1 = min(x[i], y[i]); T Test2 = min(z[i], w[i]); @@ -275,20 +275,20 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( - T x, const detail::tvec2& a, - T y, const detail::tvec2& b, - T z, const detail::tvec2& c, - T w, const detail::tvec2& d + T x, const detail::tvec2& a, + T y, const detail::tvec2& b, + T z, const detail::tvec2& c, + T w, const detail::tvec2& d ) { T Test1 = min(x, y); T Test2 = min(z, w); - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) { U Result1 = x < y ? a[i] : b[i]; U Result2 = z < w ? c[i] : d[i]; @@ -298,20 +298,20 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( - T x, const detail::tvec3& a, - T y, const detail::tvec3& b, - T z, const detail::tvec3& c, - T w, const detail::tvec3& d + T x, const detail::tvec3& a, + T y, const detail::tvec3& b, + T z, const detail::tvec3& c, + T w, const detail::tvec3& d ) { T Test1 = min(x, y); T Test2 = min(z, w); - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) { U Result1 = x < y ? a[i] : b[i]; U Result2 = z < w ? c[i] : d[i]; @@ -321,20 +321,20 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( - T x, const detail::tvec4& a, - T y, const detail::tvec4& b, - T z, const detail::tvec4& c, - T w, const detail::tvec4& d + T x, const detail::tvec4& a, + T y, const detail::tvec4& b, + T z, const detail::tvec4& c, + T w, const detail::tvec4& d ) { T Test1 = min(x, y); T Test2 = min(z, w); - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) { U Result1 = x < y ? a[i] : b[i]; U Result2 = z < w ? c[i] : d[i]; @@ -344,8 +344,8 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMin ( const detail::tvec2& x, U a, const detail::tvec2& y, U b, @@ -353,7 +353,7 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMin const detail::tvec2& w, U d ) { - detail::tvec2 Result; + detail::tvec2 Result; for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i) { T Test1 = min(x[i], y[i]); @@ -366,8 +366,8 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMin ( const detail::tvec3& x, U a, const detail::tvec3& y, U b, @@ -375,7 +375,7 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMin const detail::tvec3& w, U d ) { - detail::tvec3 Result; + detail::tvec3 Result; for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i) { T Test1 = min(x[i], y[i]); @@ -388,8 +388,8 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMin } // Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMin +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMin ( const detail::tvec4& x, U a, const detail::tvec4& y, U b, @@ -397,7 +397,7 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMin const detail::tvec4& w, U d ) { - detail::tvec4 Result; + detail::tvec4 Result; for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i) { T Test1 = min(x[i], y[i]); @@ -417,127 +417,127 @@ GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - T x, const detail::tvec2& a, - T y, const detail::tvec2& b + T x, const detail::tvec2& a, + T y, const detail::tvec2& b ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - T x, const detail::tvec3& a, - T y, const detail::tvec3& b + T x, const detail::tvec3& a, + T y, const detail::tvec3& b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - T x, const detail::tvec4& a, - T y, const detail::tvec4& b + T x, const detail::tvec4& a, + T y, const detail::tvec4& b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? a[i] : b[i]; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( const detail::tvec2& x, U a, const detail::tvec2& y, U b ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a : b; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( const detail::tvec3& x, U a, const detail::tvec3& y, U b ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a : b; return Result; } // Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( const detail::tvec4& x, U a, const detail::tvec4& y, U b ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? a : b; return Result; } @@ -556,136 +556,136 @@ GLM_FUNC_QUALIFIER U associatedMax } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b, - const detail::tvec2& z, const detail::tvec2& c + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b, + const detail::tvec2& z, const detail::tvec2& c ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b, - const detail::tvec3& z, const detail::tvec3& c + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b, + const detail::tvec3& z, const detail::tvec3& c ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b, - const detail::tvec4& z, const detail::tvec4& c + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b, + const detail::tvec4& z, const detail::tvec4& c ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - T x, const detail::tvec2& a, - T y, const detail::tvec2& b, - T z, const detail::tvec2& c + T x, const detail::tvec2& a, + T y, const detail::tvec2& b, + T z, const detail::tvec2& c ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - T x, const detail::tvec3& a, - T y, const detail::tvec3& b, - T z, const detail::tvec3& c + T x, const detail::tvec3& a, + T y, const detail::tvec3& b, + T z, const detail::tvec3& c ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - T x, const detail::tvec4& a, - T y, const detail::tvec4& b, - T z, const detail::tvec4& c + T x, const detail::tvec4& a, + T y, const detail::tvec4& b, + T z, const detail::tvec4& c ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( const detail::tvec2& x, U a, const detail::tvec2& y, U b, const detail::tvec2& z, U c ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( const detail::tvec3& x, U a, const detail::tvec3& y, U b, const detail::tvec3& z, U c ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); return Result; } // Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( const detail::tvec4& x, U a, const detail::tvec4& y, U b, const detail::tvec4& z, U c ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); return Result; } @@ -709,17 +709,17 @@ GLM_FUNC_QUALIFIER U associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - const detail::tvec2& x, const detail::tvec2& a, - const detail::tvec2& y, const detail::tvec2& b, - const detail::tvec2& z, const detail::tvec2& c, - const detail::tvec2& w, const detail::tvec2& d + const detail::tvec2& x, const detail::tvec2& a, + const detail::tvec2& y, const detail::tvec2& b, + const detail::tvec2& z, const detail::tvec2& c, + const detail::tvec2& w, const detail::tvec2& d ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]); @@ -731,17 +731,17 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - const detail::tvec3& x, const detail::tvec3& a, - const detail::tvec3& y, const detail::tvec3& b, - const detail::tvec3& z, const detail::tvec3& c, - const detail::tvec3& w, const detail::tvec3& d + const detail::tvec3& x, const detail::tvec3& a, + const detail::tvec3& y, const detail::tvec3& b, + const detail::tvec3& z, const detail::tvec3& c, + const detail::tvec3& w, const detail::tvec3& d ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]); @@ -753,17 +753,17 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - const detail::tvec4& x, const detail::tvec4& a, - const detail::tvec4& y, const detail::tvec4& b, - const detail::tvec4& z, const detail::tvec4& c, - const detail::tvec4& w, const detail::tvec4& d + const detail::tvec4& x, const detail::tvec4& a, + const detail::tvec4& y, const detail::tvec4& b, + const detail::tvec4& z, const detail::tvec4& c, + const detail::tvec4& w, const detail::tvec4& d ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]); @@ -775,20 +775,20 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( - T x, const detail::tvec2& a, - T y, const detail::tvec2& b, - T z, const detail::tvec2& c, - T w, const detail::tvec2& d + T x, const detail::tvec2& a, + T y, const detail::tvec2& b, + T z, const detail::tvec2& c, + T w, const detail::tvec2& d ) { T Test1 = max(x, y); T Test2 = max(z, w); - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size; ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) { U Result1 = x > y ? a[i] : b[i]; U Result2 = z > w ? c[i] : d[i]; @@ -798,20 +798,20 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( - T x, const detail::tvec3& a, - T y, const detail::tvec3& b, - T z, const detail::tvec3& c, - T w, const detail::tvec3& d + T x, const detail::tvec3& a, + T y, const detail::tvec3& b, + T z, const detail::tvec3& c, + T w, const detail::tvec3& d ) { T Test1 = max(x, y); T Test2 = max(z, w); - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size; ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) { U Result1 = x > y ? a[i] : b[i]; U Result2 = z > w ? c[i] : d[i]; @@ -821,20 +821,20 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( - T x, const detail::tvec4& a, - T y, const detail::tvec4& b, - T z, const detail::tvec4& c, - T w, const detail::tvec4& d + T x, const detail::tvec4& a, + T y, const detail::tvec4& b, + T z, const detail::tvec4& c, + T w, const detail::tvec4& d ) { T Test1 = max(x, y); T Test2 = max(z, w); - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size; ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) { U Result1 = x > y ? a[i] : b[i]; U Result2 = z > w ? c[i] : d[i]; @@ -844,8 +844,8 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec2 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec2 associatedMax ( const detail::tvec2& x, U a, const detail::tvec2& y, U b, @@ -853,8 +853,8 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMax const detail::tvec2& w, U d ) { - detail::tvec2 Result; - for(typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i) + detail::tvec2 Result; + for(typename detail::tvec2::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]);; @@ -866,8 +866,8 @@ GLM_FUNC_QUALIFIER detail::tvec2 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec3 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec3 associatedMax ( const detail::tvec3& x, U a, const detail::tvec3& y, U b, @@ -875,8 +875,8 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMax const detail::tvec3& w, U d ) { - detail::tvec3 Result; - for(typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i) + detail::tvec3 Result; + for(typename detail::tvec3::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]);; @@ -888,8 +888,8 @@ GLM_FUNC_QUALIFIER detail::tvec3 associatedMax } // Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER detail::tvec4 associatedMax +template +GLM_FUNC_QUALIFIER detail::tvec4 associatedMax ( const detail::tvec4& x, U a, const detail::tvec4& y, U b, @@ -897,8 +897,8 @@ GLM_FUNC_QUALIFIER detail::tvec4 associatedMax const detail::tvec4& w, U d ) { - detail::tvec4 Result; - for(typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i) + detail::tvec4 Result; + for(typename detail::tvec4::size_type i = 0; i < Result.length(); ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]);; diff --git a/glm/gtx/closest_point.hpp b/glm/gtx/closest_point.hpp index b12c1ce9..787ee1aa 100644 --- a/glm/gtx/closest_point.hpp +++ b/glm/gtx/closest_point.hpp @@ -52,9 +52,9 @@ namespace glm /// Find the point on a straight line which is the closet of a point. /// @see gtx_closest_point - template + template detail::tvec3 closestPointOnLine( - detail::tvec3 const & point, + detail::tvec3 const & point, detail::tvec3 const & a, detail::tvec3 const & b); diff --git a/glm/gtx/closest_point.inl b/glm/gtx/closest_point.inl index d018c1d1..6c0f8d87 100644 --- a/glm/gtx/closest_point.inl +++ b/glm/gtx/closest_point.inl @@ -12,22 +12,22 @@ namespace glm { - template - GLM_FUNC_QUALIFIER detail::tvec3 closestPointOnLine + template + GLM_FUNC_QUALIFIER detail::tvec3 closestPointOnLine ( - detail::tvec3 const & point, - detail::tvec3 const & a, - detail::tvec3 const & b + detail::tvec3 const & point, + detail::tvec3 const & a, + detail::tvec3 const & b ) { - valType LineLength = distance(a, b); - detail::tvec3 Vector = point - a; - detail::tvec3 LineDirection = (b - a) / LineLength; + T LineLength = distance(a, b); + detail::tvec3 Vector = point - a; + detail::tvec3 LineDirection = (b - a) / LineLength; // Project Vector to LineDirection to get the distance of point from a - valType Distance = dot(Vector, LineDirection); + T Distance = dot(Vector, LineDirection); - if(Distance <= valType(0)) return a; + if(Distance <= T(0)) return a; if(Distance >= LineLength) return b; return a + LineDirection * Distance; } diff --git a/glm/gtx/color_cast.hpp b/glm/gtx/color_cast.hpp deleted file mode 100644 index e3beca7b..00000000 --- a/glm/gtx/color_cast.hpp +++ /dev/null @@ -1,143 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref gtx_color_cast -/// @file glm/gtx/color_cast.hpp -/// @date 2007-06-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// @see gtx_number_precision (dependence) -/// -/// @defgroup gtx_color_cast GLM_GTX_color_cast -/// @ingroup gtx -/// -/// @brief Conversion between two color types. -/// -/// need to be included to use these functionalities. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_GTX_color_cast -#define GLM_GTX_color_cast GLM_VERSION - -// Dependency: -#include "../glm.hpp" -#include "../gtx/number_precision.hpp" - -#if(defined(GLM_MESSAGES) && !defined(glm_ext)) -# pragma message("GLM: GLM_GTX_color_cast extension included") -#endif - -namespace glm -{ - /// @addtogroup gtx_color_cast - /// @{ - - //! Conversion of a floating value into a 8bit unsigned int value. - /// @see gtx_color_cast - template - GLM_DEPRECATED uint8 u8channel_cast(valType a); - - template - GLM_DEPRECATED uint32 u32_rgbx_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_xrgb_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_bgrx_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_xbgr_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED uint32 u32_rgba_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_argb_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_bgra_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint32 u32_abgr_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 32bit unsigned int value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED uint64 u64_rgbx_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_xrgb_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_bgrx_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_xbgr_cast(const detail::tvec3& c); //!< \brief Conversion of a 3 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED uint64 u64_rgba_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_argb_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_bgra_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED uint64 u64_abgr_cast(const detail::tvec4& c); //!< \brief Conversion of a 4 components color into an 64bit unsigned int value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f32 f32_channel_cast(T a); //!< \brief Conversion of a u8 or u16 value to a single channel floating value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f32vec3 f32_rgbx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec3 f32_xrgb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec3 f32_bgrx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec3 f32_xbgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f32vec4 f32_rgba_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec4 f32_argb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec4 f32_bgra_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f32vec4 f32_abgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f64 f64_channel_cast(T a); //!< \brief Conversion of a u8 or u16 value to a single channel floating value. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f64vec3 f64_rgbx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec3 f64_xrgb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec3 f64_bgrx_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec3 f64_xbgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 3 components floating color. (From GLM_GTX_color_cast extension) - - template - GLM_DEPRECATED f64vec4 f64_rgba_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec4 f64_argb_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec4 f64_bgra_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - template - GLM_DEPRECATED f64vec4 f64_abgr_cast(T c); //!< \brief Conversion of a u32 or u64 color into 4 components floating color. (From GLM_GTX_color_cast extension) - - /// @} -}//namespace glm - -#include "color_cast.inl" - -#endif//GLM_GTX_color_cast diff --git a/glm/gtx/color_cast.inl b/glm/gtx/color_cast.inl deleted file mode 100644 index 3af7aff3..00000000 --- a/glm/gtx/color_cast.inl +++ /dev/null @@ -1,733 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Created : 2007-06-21 -// Updated : 2007-08-03 -// Licence : This source is under MIT License -// File : glm/gtx/color_cast.inl -/////////////////////////////////////////////////////////////////////////////////////////////////// - -namespace glm -{ - template - GLM_FUNC_QUALIFIER uint8 u8channel_cast(T a) - { - return static_cast(a * T(255)); - } - - template - GLM_FUNC_QUALIFIER uint16 u16channel_cast(T a) - { - return static_cast(a * T(65535)); - } - - template - GLM_FUNC_QUALIFIER uint32 u32_rgbx_cast(const detail::tvec3& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(255)) << 0; - result += static_cast(c.y * detail::tvec3::value_type(255)) << 8; - result += static_cast(c.z * detail::tvec3::value_type(255)) << 16; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_xrgb_cast(const detail::tvec3& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(255)) << 8; - result += static_cast(c.y * detail::tvec3::value_type(255)) << 16; - result += static_cast(c.z * detail::tvec3::value_type(255)) << 24; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_bgrx_cast(const detail::tvec3& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(255)) << 16; - result += static_cast(c.y * detail::tvec3::value_type(255)) << 8; - result += static_cast(c.z * detail::tvec3::value_type(255)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_xbgr_cast(const detail::tvec3& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(255)) << 24; - result += static_cast(c.y * detail::tvec3::value_type(255)) << 16; - result += static_cast(c.z * detail::tvec3::value_type(255)) << 8; - result += static_cast(c.w * detail::tvec3::value_type(255)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_rgba_cast(const detail::tvec4& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(255)) << 0; - result += static_cast(c.y * detail::tvec4::value_type(255)) << 8; - result += static_cast(c.z * detail::tvec4::value_type(255)) << 16; - result += static_cast(c.w * detail::tvec4::value_type(255)) << 24; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_argb_cast(const detail::tvec4& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(255)) << 8; - result += static_cast(c.y * detail::tvec4::value_type(255)) << 16; - result += static_cast(c.z * detail::tvec4::value_type(255)) << 24; - result += static_cast(c.w * detail::tvec4::value_type(255)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_bgra_cast(const detail::tvec4& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(255)) << 16; - result += static_cast(c.y * detail::tvec4::value_type(255)) << 8; - result += static_cast(c.z * detail::tvec4::value_type(255)) << 0; - result += static_cast(c.w * detail::tvec4::value_type(255)) << 24; - return result; - } - - template - GLM_FUNC_QUALIFIER uint32 u32_abgr_cast(const detail::tvec4& c) - { - uint32 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(255)) << 24; - result += static_cast(c.y * detail::tvec4::value_type(255)) << 16; - result += static_cast(c.z * detail::tvec4::value_type(255)) << 8; - result += static_cast(c.w * detail::tvec4::value_type(255)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u64_rgbx_cast(const detail::tvec3& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(65535)) << 0; - result += static_cast(c.y * detail::tvec3::value_type(65535)) << 16; - result += static_cast(c.z * detail::tvec3::value_type(65535)) << 32; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u32_xrgb_cast(const detail::tvec3& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(65535)) << 16; - result += static_cast(c.y * detail::tvec3::value_type(65535)) << 32; - result += static_cast(c.z * detail::tvec3::value_type(65535)) << 48; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u32_bgrx_cast(const detail::tvec3& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(65535)) << 32; - result += static_cast(c.y * detail::tvec3::value_type(65535)) << 16; - result += static_cast(c.z * detail::tvec3::value_type(65535)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u32_xbgr_cast(const detail::tvec3& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec3::value_type(65535)) << 48; - result += static_cast(c.y * detail::tvec3::value_type(65535)) << 32; - result += static_cast(c.z * detail::tvec3::value_type(65535)) << 16; - result += static_cast(c.w * detail::tvec3::value_type(65535)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u64_rgba_cast(const detail::tvec4& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(65535)) << 0; - result += static_cast(c.y * detail::tvec4::value_type(65535)) << 16; - result += static_cast(c.z * detail::tvec4::value_type(65535)) << 32; - result += static_cast(c.w * detail::tvec4::value_type(65535)) << 48; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u64_argb_cast(const detail::tvec4& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(65535)) << 16; - result += static_cast(c.y * detail::tvec4::value_type(65535)) << 32; - result += static_cast(c.z * detail::tvec4::value_type(65535)) << 48; - result += static_cast(c.w * detail::tvec4::value_type(65535)) << 0; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u64_bgra_cast(const detail::tvec4& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(65535)) << 32; - result += static_cast(c.y * detail::tvec4::value_type(65535)) << 16; - result += static_cast(c.z * detail::tvec4::value_type(65535)) << 0; - result += static_cast(c.w * detail::tvec4::value_type(65535)) << 48; - return result; - } - - template - GLM_FUNC_QUALIFIER uint64 u64_abgr_cast(const detail::tvec4& c) - { - uint64 result = 0; - result += static_cast(c.x * detail::tvec4::value_type(65535)) << 48; - result += static_cast(c.y * detail::tvec4::value_type(65535)) << 32; - result += static_cast(c.z * detail::tvec4::value_type(65535)) << 16; - result += static_cast(c.w * detail::tvec4::value_type(65535)) << 0; - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16 f16_channel_cast(uint32 color) - { - return f16(static_cast(color >> 0) / static_cast(255)); - } - - template <> - GLM_FUNC_QUALIFIER f16vec3 f16_rgbx_cast(uint32 color) - { - f16vec3 result; - result.x = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec3 f16_xrgb_cast(uint32 color) - { - f16vec3 result; - result.x = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec3 f16_bgrx_cast(uint32 color) - { - f16vec3 result; - result.x = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec3 f16_xbgr_cast(uint32 color) - { - f16vec3 result; - result.x = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec4 f16_rgba_cast(uint32 color) - { - f16vec4 result; - result.x = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.w = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec4 f16_argb_cast(uint32 color) - { - f16vec4 result; - result.x = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - result.w = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec4 f16_bgra_cast(uint32 color) - { - f16vec4 result; - result.x = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - result.w = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER f16vec4 f16_abgr_cast(uint32 color) - { - f16vec4 result; - result.x = f16(static_cast((color >> 24) & 0xFF) / static_cast(255)); - result.y = f16(static_cast((color >> 16) & 0xFF) / static_cast(255)); - result.z = f16(static_cast((color >> 8) & 0xFF) / static_cast(255)); - result.w = f16(static_cast((color >> 0) & 0xFF) / static_cast(255)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER float f32_channel_cast(uint8 color) - { - return static_cast(color >> 0) / static_cast(255); - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_rgbx_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 16) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_xrgb_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_bgrx_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_xbgr_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 8) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_rgba_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_argb_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_bgra_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_abgr_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER double f64_channel_cast(uint8 color) - { - return static_cast(color >> 0) / static_cast(255); - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_rgbx_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 16) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_xrgb_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_bgrx_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_xbgr_cast(uint32 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 8) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_rgba_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_argb_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_bgra_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 0) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 24) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_abgr_cast(uint32 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 24) & 0xFF) / static_cast(255); - result.y = static_cast((color >> 16) & 0xFF) / static_cast(255); - result.z = static_cast((color >> 8) & 0xFF) / static_cast(255); - result.w = static_cast((color >> 0) & 0xFF) / static_cast(255); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::half f16_channel_cast(uint16 color) - { - return detail::half(static_cast(color >> 0) / static_cast(65535)); - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f16_rgbx_cast(uint64 color) - { - detail::tvec3 result; - result.x = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f16_xrgb_cast(uint64 color) - { - detail::tvec3 result; - result.x = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f16_bgrx_cast(uint64 color) - { - detail::tvec3 result; - result.x = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f16_xbgr_cast(uint64 color) - { - detail::tvec3 result; - result.x = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f16_rgba_cast(uint64 color) - { - detail::tvec4 result; - result.x = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.w = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f16_argb_cast(uint64 color) - { - detail::tvec4 result; - result.x = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - result.w = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f16_bgra_cast(uint64 color) - { - detail::tvec4 result; - result.x = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - result.w = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f16_abgr_cast(uint64 color) - { - detail::tvec4 result; - result.x = detail::half(static_cast((color >> 48) & 0xFFFF) / static_cast(65535)); - result.y = detail::half(static_cast((color >> 32) & 0xFFFF) / static_cast(65535)); - result.z = detail::half(static_cast((color >> 16) & 0xFFFF) / static_cast(65535)); - result.w = detail::half(static_cast((color >> 0) & 0xFFFF) / static_cast(65535)); - return result; - } - - template <> - GLM_FUNC_QUALIFIER float f32_channel_cast(uint16 color) - { - return static_cast(color >> 0) / static_cast(65535); - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_rgbx_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_xrgb_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_bgrx_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f32_xbgr_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_rgba_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_argb_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_bgra_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f32_abgr_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER double f64_channel_cast(uint16 color) - { - return static_cast(color >> 0) / static_cast(65535); - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_rgbx_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_xrgb_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_bgrx_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec3 f64_xbgr_cast(uint64 color) - { - detail::tvec3 result; - result.x = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_rgba_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_argb_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_bgra_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - return result; - } - - template <> - GLM_FUNC_QUALIFIER detail::tvec4 f64_abgr_cast(uint64 color) - { - detail::tvec4 result; - result.x = static_cast((color >> 48) & 0xFFFF) / static_cast(65535); - result.y = static_cast((color >> 32) & 0xFFFF) / static_cast(65535); - result.z = static_cast((color >> 16) & 0xFFFF) / static_cast(65535); - result.w = static_cast((color >> 0) & 0xFFFF) / static_cast(65535); - return result; - } -}//namespace glm diff --git a/glm/gtx/color_space.hpp b/glm/gtx/color_space.hpp index 73b42d04..6c32cfb9 100644 --- a/glm/gtx/color_space.hpp +++ b/glm/gtx/color_space.hpp @@ -52,41 +52,41 @@ namespace glm /// Converts a color from HSV color space to its color in RGB color space. /// @see gtx_color_space - template - detail::tvec3 rgbColor( - detail::tvec3 const & hsvValue); + template + detail::tvec3 rgbColor( + detail::tvec3 const & hsvValue); /// Converts a color from RGB color space to its color in HSV color space. /// @see gtx_color_space - template - detail::tvec3 hsvColor( - detail::tvec3 const & rgbValue); + template + detail::tvec3 hsvColor( + detail::tvec3 const & rgbValue); /// Build a saturation matrix. /// @see gtx_color_space - template - detail::tmat4x4 saturation( - valType const s); + template + detail::tmat4x4 saturation( + T const s); /// Modify the saturation of a color. /// @see gtx_color_space - template - detail::tvec3 saturation( - valType const s, - detail::tvec3 const & color); + template + detail::tvec3 saturation( + T const s, + detail::tvec3 const & color); /// Modify the saturation of a color. /// @see gtx_color_space - template - detail::tvec4 saturation( - valType const s, - detail::tvec4 const & color); + template + detail::tvec4 saturation( + T const s, + detail::tvec4 const & color); /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. /// @see gtx_color_space - template - valType luminosity( - detail::tvec3 const & color); + template + T luminosity( + detail::tvec3 const & color); /// @} }//namespace glm diff --git a/glm/gtx/color_space.inl b/glm/gtx/color_space.inl index 03aeaf0d..8e817d7f 100644 --- a/glm/gtx/color_space.inl +++ b/glm/gtx/color_space.inl @@ -9,7 +9,7 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER detail::tvec3 rgbColor(const detail::tvec3& hsvColor) { detail::tvec3 hsv = hsvColor; @@ -66,7 +66,7 @@ namespace glm return rgbColor; } - template + template GLM_FUNC_QUALIFIER detail::tvec3 hsvColor(const detail::tvec3& rgbColor) { detail::tvec3 hsv = rgbColor; @@ -75,7 +75,7 @@ namespace glm float Delta = Max - Min; hsv.z = Max; - + if(Max != static_cast(0)) { hsv.y = Delta / hsv.z; @@ -90,7 +90,7 @@ namespace glm else // between magenta & cyan h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; - + if(h < T(0)) hsv.x = h + T(360); else @@ -106,7 +106,7 @@ namespace glm return hsv; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 saturation(const T s) { detail::tvec3 rgbw = detail::tvec3(T(0.2126), T(0.7152), T(0.0722)); @@ -128,19 +128,19 @@ namespace glm return result; } - template + template GLM_FUNC_QUALIFIER detail::tvec3 saturation(const T s, const detail::tvec3& color) { return detail::tvec3(saturation(s) * detail::tvec4(color, T(0))); } - template + template GLM_FUNC_QUALIFIER detail::tvec4 saturation(const T s, const detail::tvec4& color) { return saturation(s) * color; } - template + template GLM_FUNC_QUALIFIER T luminosity(const detail::tvec3& color) { const detail::tvec3 tmp = detail::tvec3(0.33, 0.59, 0.11); diff --git a/glm/gtx/color_space_YCoCg.hpp b/glm/gtx/color_space_YCoCg.hpp index a4fecb91..1ab96149 100644 --- a/glm/gtx/color_space_YCoCg.hpp +++ b/glm/gtx/color_space_YCoCg.hpp @@ -52,29 +52,29 @@ namespace glm /// Convert a color from RGB color space to YCoCg color space. /// @see gtx_color_space_YCoCg - template - detail::tvec3 rgb2YCoCg( - detail::tvec3 const & rgbColor); + template + detail::tvec3 rgb2YCoCg( + detail::tvec3 const & rgbColor); /// Convert a color from YCoCg color space to RGB color space. /// @see gtx_color_space_YCoCg - template - detail::tvec3 YCoCg2rgb( - detail::tvec3 const & YCoCgColor); + template + detail::tvec3 YCoCg2rgb( + detail::tvec3 const & YCoCgColor); /// Convert a color from RGB color space to YCoCgR color space. /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" /// @see gtx_color_space_YCoCg - template - detail::tvec3 rgb2YCoCgR( - detail::tvec3 const & rgbColor); + template + detail::tvec3 rgb2YCoCgR( + detail::tvec3 const & rgbColor); /// Convert a color from YCoCgR color space to RGB color space. /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" /// @see gtx_color_space_YCoCg - template - detail::tvec3 YCoCgR2rgb( - detail::tvec3 const & YCoCgColor); + template + detail::tvec3 YCoCgR2rgb( + detail::tvec3 const & YCoCgColor); /// @} }//namespace glm diff --git a/glm/gtx/color_space_YCoCg.inl b/glm/gtx/color_space_YCoCg.inl index 08d84407..ce578374 100644 --- a/glm/gtx/color_space_YCoCg.inl +++ b/glm/gtx/color_space_YCoCg.inl @@ -9,55 +9,55 @@ namespace glm { - template - GLM_FUNC_QUALIFIER detail::tvec3 rgb2YCoCg + template + GLM_FUNC_QUALIFIER detail::tvec3 rgb2YCoCg ( - detail::tvec3 const & rgbColor + detail::tvec3 const & rgbColor ) { - detail::tvec3 result; - result.x/*Y */ = rgbColor.r / valType(4) + rgbColor.g / valType(2) + rgbColor.b / valType(4); - result.y/*Co*/ = rgbColor.r / valType(2) + rgbColor.g * valType(0) - rgbColor.b / valType(2); - result.z/*Cg*/ = - rgbColor.r / valType(4) + rgbColor.g / valType(2) - rgbColor.b / valType(4); + detail::tvec3 result; + result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); + result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); + result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); return result; } - template - GLM_FUNC_QUALIFIER detail::tvec3 rgb2YCoCgR + template + GLM_FUNC_QUALIFIER detail::tvec3 rgb2YCoCgR ( - detail::tvec3 const & rgbColor + detail::tvec3 const & rgbColor ) { - detail::tvec3 result; - result.x/*Y */ = rgbColor.g / valType(2) + (rgbColor.r + rgbColor.b) / valType(4); + detail::tvec3 result; + result.x/*Y */ = rgbColor.g / T(2) + (rgbColor.r + rgbColor.b) / T(4); result.y/*Co*/ = rgbColor.r - rgbColor.b; - result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) / valType(2); + result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) / T(2); return result; } - template - GLM_FUNC_QUALIFIER detail::tvec3 YCoCg2rgb + template + GLM_FUNC_QUALIFIER detail::tvec3 YCoCg2rgb ( - detail::tvec3 const & YCoCgColor + detail::tvec3 const & YCoCgColor ) { - detail::tvec3 result; + detail::tvec3 result; result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; result.g = YCoCgColor.x + YCoCgColor.z; result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; return result; } - template - GLM_FUNC_QUALIFIER detail::tvec3 YCoCgR2rgb + template + GLM_FUNC_QUALIFIER detail::tvec3 YCoCgR2rgb ( - detail::tvec3 const & YCoCgRColor + detail::tvec3 const & YCoCgRColor ) { - detail::tvec3 result; - valType tmp = YCoCgRColor.x - (YCoCgRColor.z / valType(2)); + detail::tvec3 result; + T tmp = YCoCgRColor.x - (YCoCgRColor.z / T(2)); result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y / valType(2)); + result.b = tmp - (YCoCgRColor.y / T(2)); result.r = result.b + YCoCgRColor.y; return result; } diff --git a/glm/gtx/compatibility.hpp b/glm/gtx/compatibility.hpp index 68dadccc..8e076a78 100644 --- a/glm/gtx/compatibility.hpp +++ b/glm/gtx/compatibility.hpp @@ -62,29 +62,30 @@ namespace glm /// @{ template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec2 lerp(const detail::tvec2& x, const detail::tvec2& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec3 lerp(const detail::tvec3& x, const detail::tvec3& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec4 lerp(const detail::tvec4& x, const detail::tvec4& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec2 lerp(const detail::tvec2& x, const detail::tvec2& y, const detail::tvec2& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec3 lerp(const detail::tvec3& x, const detail::tvec3& y, const detail::tvec3& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec4 lerp(const detail::tvec4& x, const detail::tvec4& y, const detail::tvec4& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec2 lerp(const detail::tvec2& x, const detail::tvec2& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER T slerp(detail::tquat const & x, detail::tquat const & y, T const & a){return mix(x, y, a);} //!< \brief Returns the slurp interpolation between two quaternions. + template GLM_FUNC_QUALIFIER detail::tvec3 lerp(const detail::tvec3& x, const detail::tvec3& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec4 lerp(const detail::tvec4& x, const detail::tvec4& y, T a){return mix(x, y, a);} //!< \brief 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]. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec2 lerp(const detail::tvec2& x, const detail::tvec2& y, const detail::tvec2& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec3 lerp(const detail::tvec3& x, const detail::tvec3& y, const detail::tvec3& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec4 lerp(const detail::tvec4& x, const detail::tvec4& y, const detail::tvec4& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec2 saturate(const detail::tvec2& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec3 saturate(const detail::tvec3& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec4 saturate(const detail::tvec4& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER T slerp(detail::tquat const & x, detail::tquat const & y, T const & a){return mix(x, y, a);} //!< \brief Returns the slurp interpolation between two quaternions. - template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec2 atan2(const detail::tvec2& x, const detail::tvec2& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec3 atan2(const detail::tvec3& x, const detail::tvec3& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER detail::tvec4 atan2(const detail::tvec4& x, const detail::tvec4& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec2 saturate(const detail::tvec2& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec3 saturate(const detail::tvec3& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec4 saturate(const detail::tvec4& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) + + template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec2 atan2(const detail::tvec2& x, const detail::tvec2& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec3 atan2(const detail::tvec3& x, const detail::tvec3& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) + template GLM_FUNC_QUALIFIER detail::tvec4 atan2(const detail::tvec4& x, const detail::tvec4& y){return atan(x, y);} //!< \brief 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. (From GLM_GTX_compatibility) template bool isfinite(genType const & x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template detail::tvec2 isfinite(const detail::tvec2& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template detail::tvec3 isfinite(const detail::tvec3& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template detail::tvec4 isfinite(const detail::tvec4& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) + template detail::tvec2 isfinite(const detail::tvec2& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) + template detail::tvec3 isfinite(const detail::tvec3& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) + template detail::tvec4 isfinite(const detail::tvec4& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) typedef detail::tvec2 bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) diff --git a/glm/gtx/compatibility.inl b/glm/gtx/compatibility.inl index 073c6941..4b177c3b 100644 --- a/glm/gtx/compatibility.inl +++ b/glm/gtx/compatibility.inl @@ -10,7 +10,7 @@ namespace glm { // isfinite - template + template GLM_FUNC_QUALIFIER bool isfinite( genType const & x) { @@ -27,30 +27,30 @@ namespace glm # endif } - template - GLM_FUNC_QUALIFIER detail::tvec2 isfinite( - detail::tvec2 const & x) + template + GLM_FUNC_QUALIFIER detail::tvec2 isfinite( + detail::tvec2 const & x) { - return detail::tvec2( + return detail::tvec2( isfinite(x.x), isfinite(x.y)); } - template - GLM_FUNC_QUALIFIER detail::tvec3 isfinite( - detail::tvec3 const & x) + template + GLM_FUNC_QUALIFIER detail::tvec3 isfinite( + detail::tvec3 const & x) { - return detail::tvec3( + return detail::tvec3( isfinite(x.x), isfinite(x.y), isfinite(x.z)); } - template - GLM_FUNC_QUALIFIER detail::tvec4 isfinite( - detail::tvec4 const & x) + template + GLM_FUNC_QUALIFIER detail::tvec4 isfinite( + detail::tvec4 const & x) { - return detail::tvec4( + return detail::tvec4( isfinite(x.x), isfinite(x.y), isfinite(x.z), diff --git a/glm/gtx/extend.inl b/glm/gtx/extend.inl index e159987c..987788f7 100644 --- a/glm/gtx/extend.inl +++ b/glm/gtx/extend.inl @@ -20,34 +20,34 @@ namespace glm return Origin + (Source - Origin) * Distance; } - template - GLM_FUNC_QUALIFIER detail::tvec2 extend + template + GLM_FUNC_QUALIFIER detail::tvec2 extend ( - detail::tvec2 const & Origin, - detail::tvec2 const & Source, - valType const & Distance + detail::tvec2 const & Origin, + detail::tvec2 const & Source, + T const & Distance ) { return Origin + (Source - Origin) * Distance; } - template - GLM_FUNC_QUALIFIER detail::tvec3 extend + template + GLM_FUNC_QUALIFIER detail::tvec3 extend ( - detail::tvec3 const & Origin, - detail::tvec3 const & Source, - valType const & Distance + detail::tvec3 const & Origin, + detail::tvec3 const & Source, + T const & Distance ) { return Origin + (Source - Origin) * Distance; } - template - GLM_FUNC_QUALIFIER detail::tvec4 extend + template + GLM_FUNC_QUALIFIER detail::tvec4 extend ( - detail::tvec4 const & Origin, - detail::tvec4 const & Source, - valType const & Distance + detail::tvec4 const & Origin, + detail::tvec4 const & Source, + T const & Distance ) { return Origin + (Source - Origin) * Distance; diff --git a/glm/gtx/extented_min_max.hpp b/glm/gtx/extented_min_max.hpp index adea79e4..b9c4c7c9 100644 --- a/glm/gtx/extented_min_max.hpp +++ b/glm/gtx/extented_min_max.hpp @@ -41,7 +41,6 @@ // Dependency: #include "../glm.hpp" -#include "../gtc/half_float.hpp" #if(defined(GLM_MESSAGES) && !defined(glm_ext)) # pragma message("GLM: GLM_GTX_extented_min_max extension included") diff --git a/glm/gtx/handed_coordinate_space.hpp b/glm/gtx/handed_coordinate_space.hpp index 776b55df..6a1e7aa8 100644 --- a/glm/gtx/handed_coordinate_space.hpp +++ b/glm/gtx/handed_coordinate_space.hpp @@ -52,18 +52,18 @@ namespace glm //! Return if a trihedron right handed or not. //! From GLM_GTX_handed_coordinate_space extension. - template + template bool rightHanded( - detail::tvec3 const & tangent, - detail::tvec3 const & binormal, + detail::tvec3 const & tangent, + detail::tvec3 const & binormal, detail::tvec3 const & normal); //! Return if a trihedron left handed or not. //! From GLM_GTX_handed_coordinate_space extension. - template + template bool leftHanded( - detail::tvec3 const & tangent, - detail::tvec3 const & binormal, + detail::tvec3 const & tangent, + detail::tvec3 const & binormal, detail::tvec3 const & normal); /// @} diff --git a/glm/gtx/handed_coordinate_space.inl b/glm/gtx/handed_coordinate_space.inl index 3e39379d..3e8060fe 100644 --- a/glm/gtx/handed_coordinate_space.inl +++ b/glm/gtx/handed_coordinate_space.inl @@ -9,10 +9,10 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER bool rightHanded ( - detail::tvec3 const & tangent, + detail::tvec3 const & tangent, detail::tvec3 const & binormal, detail::tvec3 const & normal ) @@ -20,11 +20,11 @@ namespace glm return dot(cross(normal, tangent), binormal) > T(0); } - template + template GLM_FUNC_QUALIFIER bool leftHanded ( - detail::tvec3 const & tangent, - detail::tvec3 const & binormal, + detail::tvec3 const & tangent, + detail::tvec3 const & binormal, detail::tvec3 const & normal ) { diff --git a/glm/gtx/inertia.hpp b/glm/gtx/inertia.hpp index b3a2d7c5..6cf9b334 100644 --- a/glm/gtx/inertia.hpp +++ b/glm/gtx/inertia.hpp @@ -48,65 +48,66 @@ namespace glm { + /* /// @addtogroup gtx_inertia /// @{ //! Build an inertia matrix for a box. //! From GLM_GTX_inertia extension. - template + template detail::tmat3x3 boxInertia3( T const & Mass, detail::tvec3 const & Scale); //! Build an inertia matrix for a box. //! From GLM_GTX_inertia extension. - template + template detail::tmat4x4 boxInertia4( T const & Mass, detail::tvec3 const & Scale); //! Build an inertia matrix for a disk. //! From GLM_GTX_inertia extension. - template + template detail::tmat3x3 diskInertia3( T const & Mass, T const & Radius); //! Build an inertia matrix for a disk. //! From GLM_GTX_inertia extension. - template + template detail::tmat4x4 diskInertia4( T const & Mass, T const & Radius); //! Build an inertia matrix for a ball. //! From GLM_GTX_inertia extension. - template + template detail::tmat3x3 ballInertia3( T const & Mass, T const & Radius); //! Build an inertia matrix for a ball. //! From GLM_GTX_inertia extension. - template + template detail::tmat4x4 ballInertia4( T const & Mass, T const & Radius); //! Build an inertia matrix for a sphere. //! From GLM_GTX_inertia extension. - template + template detail::tmat3x3 sphereInertia3( T const & Mass, T const & Radius); //! Build an inertia matrix for a sphere. //! From GLM_GTX_inertia extension. - template + template detail::tmat4x4 sphereInertia4( T const & Mass, T const & Radius); - + */ /// @} }// namespace glm diff --git a/glm/gtx/inertia.inl b/glm/gtx/inertia.inl index f959fd5c..4dc86496 100644 --- a/glm/gtx/inertia.inl +++ b/glm/gtx/inertia.inl @@ -9,6 +9,7 @@ namespace glm { +/* template GLM_FUNC_QUALIFIER detail::tmat3x3 boxInertia3 ( @@ -111,4 +112,5 @@ namespace glm Result[3][3] = static_cast(1); return Result; } + */ }//namespace glm diff --git a/glm/gtx/io.hpp b/glm/gtx/io.hpp new file mode 100644 index 00000000..d3bcb3db --- /dev/null +++ b/glm/gtx/io.hpp @@ -0,0 +1,159 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref gtx_io +/// @file glm/gtx/io.hpp +/// @date 2013-11-22 +/// @author Jan P Springer (regnirpsj@gmail.com) +/// +/// @see core (dependence) +/// @see gtx_quaternion (dependence) +/// +/// @defgroup gtx_io GLM_GTX_io +/// @ingroup gtx +/// +/// @brief std::[w]ostream support for glm types +/// +/// needs to be included to use these functionalities. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_GTX_io +#define GLM_GTX_io GLM_VERSION + +// Dependency: +#include "../glm.hpp" +#include "../gtx/quaternion.hpp" + +#if(defined(GLM_MESSAGES) && !defined(glm_ext)) +# pragma message("GLM: GLM_GTX_io extension included") +#endif + +#include // std::basic_ostream<> (fwd) +#include // std::pair<> + +namespace glm +{ + /// @addtogroup gtx_io + /// @{ + + namespace io + { + + class precision_guard { + + public: + + GLM_FUNC_DECL explicit precision_guard(); + GLM_FUNC_DECL ~precision_guard(); + + private: + + unsigned precision_; + unsigned value_width_; + + }; + + enum class order_t { column_major, row_major, }; + + class format_guard { + + public: + + GLM_FUNC_DECL explicit format_guard(); + GLM_FUNC_DECL ~format_guard(); + + private: + + order_t order_; + char cr_; + + }; + + // decimal places (dflt: 3) + GLM_FUNC_DECL unsigned& precision(); + + // sign + value + '.' + decimals (dflt: 1 + 4 + 1 + precision()) + GLM_FUNC_DECL unsigned& value_width(); + + // matrix output order (dflt: row_major) + GLM_FUNC_DECL order_t& order(); + + // carriage/return char (dflt: '\n') + GLM_FUNC_DECL char& cr(); + + // matrix output order -> column_major + GLM_FUNC_DECL std::ios_base& column_major(std::ios_base&); + + // matrix output order -> row_major + GLM_FUNC_DECL std::ios_base& row_major (std::ios_base&); + + // carriage/return char -> '\n' + GLM_FUNC_DECL std::ios_base& formatted (std::ios_base&); + + // carriage/return char -> ' ' + GLM_FUNC_DECL std::ios_base& unformatted (std::ios_base&); + + }//namespace io + + namespace detail + { + + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tquat const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tvec2 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tvec3 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tvec4 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat2x2 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat2x3 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat2x4 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat3x2 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat3x3 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat3x4 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat4x2 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat4x3 const&); + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, tmat4x4 const&); + + template + GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, + std::pair const, + tmat4x4 const> const&); + + }//namespace detail + + /// @} +}//namespace glm + +#include "io.inl" + +#endif//GLM_GTX_io diff --git a/glm/gtx/io.inl b/glm/gtx/io.inl new file mode 100644 index 00000000..e588c480 --- /dev/null +++ b/glm/gtx/io.inl @@ -0,0 +1,420 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-11-22 +// Updated : 2013-11-22 +// Licence : This source is under MIT License +// File : glm/gtx/inl.inl +/////////////////////////////////////////////////////////////////////////////////////////////////// + +// #include // boost::io::ios_all_saver +#include // std::setfill<>, std::fixed, std::setprecision, std::right, + // std::setw +#include // std::basic_ostream<> + +namespace glm +{ + namespace io + { + + /* explicit */ GLM_FUNC_QUALIFIER + precision_guard::precision_guard() + : precision_ (precision()), + value_width_(value_width()) + {} + + GLM_FUNC_QUALIFIER + precision_guard::~precision_guard() + { + value_width() = value_width_; + precision() = precision_; + } + + /* explicit */ GLM_FUNC_QUALIFIER + format_guard::format_guard() + : order_(order()), + cr_ (cr()) + {} + + GLM_FUNC_QUALIFIER + format_guard::~format_guard() + { + cr() = cr_; + order() = order_; + } + + GLM_FUNC_QUALIFIER unsigned& + precision() + { + static unsigned p(3); + + return p; + } + + GLM_FUNC_QUALIFIER unsigned& + value_width() + { + static unsigned p(9); + + return p; + } + + GLM_FUNC_QUALIFIER order_t& + order() + { + static order_t p(order_t::row_major); + + return p; + } + + GLM_FUNC_QUALIFIER char& + cr() + { + static char p('\n'); return p; + } + + GLM_FUNC_QUALIFIER std::ios_base& + column_major(std::ios_base& os) + { + order() = order_t::column_major; + + return os; + } + + GLM_FUNC_QUALIFIER std::ios_base& + row_major(std::ios_base& os) + { + order() = order_t::row_major; + + return os; + } + + GLM_FUNC_QUALIFIER std::ios_base& + formatted(std::ios_base& os) + { + cr() = '\n'; + + return os; + } + + GLM_FUNC_QUALIFIER std::ios_base& + unformatted(std::ios_base& os) + { + cr() = ' '; + + return os; + } + + } // namespace io + + namespace detail { + + // functions, inlined (inline) + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tquat const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + // boost::io::ios_all_saver const ias(os); + + os << std::fixed << std::setprecision(io::precision()) + << '[' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.w << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.x << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.y << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.z + << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tvec2 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + // boost::io::ios_all_saver const ias(os); + + os << std::fixed << std::setprecision(io::precision()) + << '[' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.x << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.y + << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tvec3 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + // boost::io::ios_all_saver const ias(os); + + os << std::fixed << std::setprecision(io::precision()) + << '[' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.x << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.y << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.z + << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tvec4 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + // boost::io::ios_all_saver const ias(os); + + os << std::fixed << std::setprecision(io::precision()) + << '[' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.x << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.y << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.z << ',' + << std::right << std::setfill(' ') << std::setw(io::value_width()) << a.w + << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat2x2 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat2x2 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat2x3 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat3x2 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat2x4 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat4x2 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << io::cr() + << ' ' << m[3] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat3x2 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat2x3 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat3x3 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat3x3 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat3x4 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat4x3 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << io::cr() + << ' ' << m[3] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat4x2 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat2x4 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat4x3 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat3x4 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, tmat4x4 const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat4x4 m(a); + + if (io::order_t::row_major == io::order()) { + m = transpose(a); + } + + os << io::cr() + << '[' << m[0] << io::cr() + << ' ' << m[1] << io::cr() + << ' ' << m[2] << io::cr() + << ' ' << m[3] << ']'; + } + + return os; + } + + template + GLM_FUNC_QUALIFIER std::basic_ostream& + operator<<(std::basic_ostream& os, + std::pair const, tmat4x4 const> const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + tmat4x4 ml(a.first); + tmat4x4 mr(a.second); + + if (io::order_t::row_major == io::order()) { + ml = transpose(a.first); + mr = transpose(a.second); + } + + os << io::cr() + << '[' << ml[0] << " [" << mr[0] << io::cr() + << ' ' << ml[1] << " " << mr[1] << io::cr() + << ' ' << ml[2] << " " << mr[2] << io::cr() + << ' ' << ml[3] << "] " << mr[3] << ']'; + } + + return os; + } + + }//namespace detail +}//namespace glm diff --git a/glm/gtx/matrix_cross_product.hpp b/glm/gtx/matrix_cross_product.hpp index 498d0c8c..eac96b9f 100644 --- a/glm/gtx/matrix_cross_product.hpp +++ b/glm/gtx/matrix_cross_product.hpp @@ -53,13 +53,13 @@ namespace glm //! Build a cross product matrix. //! From GLM_GTX_matrix_cross_product extension. - template + template detail::tmat3x3 matrixCross3( detail::tvec3 const & x); //! Build a cross product matrix. //! From GLM_GTX_matrix_cross_product extension. - template + template detail::tmat4x4 matrixCross4( detail::tvec3 const & x); diff --git a/glm/gtx/matrix_cross_product.inl b/glm/gtx/matrix_cross_product.inl index ff9d0772..db0c749b 100644 --- a/glm/gtx/matrix_cross_product.inl +++ b/glm/gtx/matrix_cross_product.inl @@ -9,7 +9,7 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 matrixCross3 ( detail::tvec3 const & x @@ -25,7 +25,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 matrixCross4 ( detail::tvec3 const & x diff --git a/glm/gtx/matrix_major_storage.hpp b/glm/gtx/matrix_major_storage.hpp index 264b59fc..747b7088 100644 --- a/glm/gtx/matrix_major_storage.hpp +++ b/glm/gtx/matrix_major_storage.hpp @@ -53,20 +53,20 @@ namespace glm //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat2x2 rowMajor2( detail::tvec2 const & v1, detail::tvec2 const & v2); //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat2x2 rowMajor2( detail::tmat2x2 const & m); //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat3x3 rowMajor3( detail::tvec3 const & v1, detail::tvec3 const & v2, @@ -74,13 +74,13 @@ namespace glm //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat3x3 rowMajor3( detail::tmat3x3 const & m); //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat4x4 rowMajor4( detail::tvec4 const & v1, detail::tvec4 const & v2, @@ -89,26 +89,26 @@ namespace glm //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat4x4 rowMajor4( detail::tmat4x4 const & m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat2x2 colMajor2( detail::tvec2 const & v1, detail::tvec2 const & v2); //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat2x2 colMajor2( detail::tmat2x2 const & m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat3x3 colMajor3( detail::tvec3 const & v1, detail::tvec3 const & v2, @@ -116,13 +116,13 @@ namespace glm //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat3x3 colMajor3( detail::tmat3x3 const & m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat4x4 colMajor4( detail::tvec4 const & v1, detail::tvec4 const & v2, @@ -131,7 +131,7 @@ namespace glm //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. - template + template detail::tmat4x4 colMajor4( detail::tmat4x4 const & m); diff --git a/glm/gtx/matrix_major_storage.inl b/glm/gtx/matrix_major_storage.inl index ddcbc1d3..1b789719 100644 --- a/glm/gtx/matrix_major_storage.inl +++ b/glm/gtx/matrix_major_storage.inl @@ -9,7 +9,7 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER detail::tmat2x2 rowMajor2 ( detail::tvec2 const & v1, @@ -24,7 +24,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat2x2 rowMajor2( const detail::tmat2x2& m) { @@ -36,7 +36,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 rowMajor3( const detail::tvec3& v1, const detail::tvec3& v2, @@ -55,7 +55,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 rowMajor3( const detail::tmat3x3& m) { @@ -72,7 +72,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 rowMajor4( const detail::tvec4& v1, const detail::tvec4& v2, @@ -99,7 +99,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 rowMajor4( const detail::tmat4x4& m) { @@ -123,7 +123,7 @@ namespace glm return Result; } - template + template GLM_FUNC_QUALIFIER detail::tmat2x2 colMajor2( const detail::tvec2& v1, const detail::tvec2& v2) @@ -131,14 +131,14 @@ namespace glm return detail::tmat2x2(v1, v2); } - template + template GLM_FUNC_QUALIFIER detail::tmat2x2 colMajor2( const detail::tmat2x2& m) { return detail::tmat2x2(m); } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 colMajor3( const detail::tvec3& v1, const detail::tvec3& v2, @@ -147,14 +147,14 @@ namespace glm return detail::tmat3x3(v1, v2, v3); } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 colMajor3( const detail::tmat3x3& m) { return detail::tmat3x3(m); } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 colMajor4( const detail::tvec4& v1, const detail::tvec4& v2, @@ -164,7 +164,7 @@ namespace glm return detail::tmat4x4(v1, v2, v3, v4); } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 colMajor4( const detail::tmat4x4& m) { diff --git a/glm/gtx/matrix_operation.hpp b/glm/gtx/matrix_operation.hpp index 8a57324e..43a3de62 100644 --- a/glm/gtx/matrix_operation.hpp +++ b/glm/gtx/matrix_operation.hpp @@ -52,57 +52,57 @@ namespace glm //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat2x2 diagonal2x2( - detail::tvec2 const & v); + template + detail::tmat2x2 diagonal2x2( + detail::tvec2 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat2x3 diagonal2x3( - detail::tvec2 const & v); + template + detail::tmat2x3 diagonal2x3( + detail::tvec2 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat2x4 diagonal2x4( - detail::tvec2 const & v); + template + detail::tmat2x4 diagonal2x4( + detail::tvec2 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat3x2 diagonal3x2( - detail::tvec2 const & v); + template + detail::tmat3x2 diagonal3x2( + detail::tvec2 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat3x3 diagonal3x3( - detail::tvec3 const & v); + template + detail::tmat3x3 diagonal3x3( + detail::tvec3 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat3x4 diagonal3x4( - detail::tvec3 const & v); + template + detail::tmat3x4 diagonal3x4( + detail::tvec3 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat4x2 diagonal4x2( - detail::tvec2 const & v); + template + detail::tmat4x2 diagonal4x2( + detail::tvec2 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat4x3 diagonal4x3( - detail::tvec3 const & v); + template + detail::tmat4x3 diagonal4x3( + detail::tvec3 const & v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. - template - detail::tmat4x4 diagonal4x4( - detail::tvec4 const & v); + template + detail::tmat4x4 diagonal4x4( + detail::tvec4 const & v); /// @} }//namespace glm diff --git a/glm/gtx/matrix_operation.inl b/glm/gtx/matrix_operation.inl index 37b2b02d..2407afaa 100644 --- a/glm/gtx/matrix_operation.inl +++ b/glm/gtx/matrix_operation.inl @@ -9,87 +9,87 @@ namespace glm { - template - GLM_FUNC_QUALIFIER detail::tmat2x2 diagonal2x2 + template + GLM_FUNC_QUALIFIER detail::tmat2x2 diagonal2x2 ( - detail::tvec2 const & v + detail::tvec2 const & v ) { - detail::tmat2x2 Result(valType(1)); + detail::tmat2x2 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat2x3 diagonal2x3 + template + GLM_FUNC_QUALIFIER detail::tmat2x3 diagonal2x3 ( - detail::tvec2 const & v + detail::tvec2 const & v ) { - detail::tmat2x3 Result(valType(1)); + detail::tmat2x3 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat2x4 diagonal2x4 + template + GLM_FUNC_QUALIFIER detail::tmat2x4 diagonal2x4 ( - detail::tvec2 const & v + detail::tvec2 const & v ) { - detail::tmat2x4 Result(valType(1)); + detail::tmat2x4 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat3x2 diagonal3x2 + template + GLM_FUNC_QUALIFIER detail::tmat3x2 diagonal3x2 ( - detail::tvec2 const & v + detail::tvec2 const & v ) { - detail::tmat3x2 Result(valType(1)); + detail::tmat3x2 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat3x3 diagonal3x3 + template + GLM_FUNC_QUALIFIER detail::tmat3x3 diagonal3x3 ( - detail::tvec3 const & v + detail::tvec3 const & v ) { - detail::tmat3x3 Result(valType(1)); + detail::tmat3x3 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat3x4 diagonal3x4 + template + GLM_FUNC_QUALIFIER detail::tmat3x4 diagonal3x4 ( - detail::tvec3 const & v + detail::tvec3 const & v ) { - detail::tmat3x4 Result(valType(1)); + detail::tmat3x4 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat4x4 diagonal4x4 + template + GLM_FUNC_QUALIFIER detail::tmat4x4 diagonal4x4 ( - detail::tvec4 const & v + detail::tvec4 const & v ) { - detail::tmat4x4 Result(valType(1)); + detail::tmat4x4 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; @@ -97,26 +97,26 @@ namespace glm return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat4x3 diagonal4x3 + template + GLM_FUNC_QUALIFIER detail::tmat4x3 diagonal4x3 ( - detail::tvec3 const & v + detail::tvec3 const & v ) { - detail::tmat4x3 Result(valType(1)); + detail::tmat4x3 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } - template - GLM_FUNC_QUALIFIER detail::tmat4x2 diagonal4x2 + template + GLM_FUNC_QUALIFIER detail::tmat4x2 diagonal4x2 ( - detail::tvec2 const & v + detail::tvec2 const & v ) { - detail::tmat4x2 Result(valType(1)); + detail::tmat4x2 Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; diff --git a/glm/gtx/mixed_product.hpp b/glm/gtx/mixed_product.hpp index b2222714..162607a4 100644 --- a/glm/gtx/mixed_product.hpp +++ b/glm/gtx/mixed_product.hpp @@ -53,9 +53,9 @@ namespace glm /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) template valType mixedProduct( - detail::tvec3 const & v1, - detail::tvec3 const & v2, - detail::tvec3 const & v3); + detail::tvec3 const & v1, + detail::tvec3 const & v2, + detail::tvec3 const & v3); /// @} }// namespace glm diff --git a/glm/gtx/mixed_product.inl b/glm/gtx/mixed_product.inl index 9c3a1793..dca57939 100644 --- a/glm/gtx/mixed_product.inl +++ b/glm/gtx/mixed_product.inl @@ -12,9 +12,9 @@ namespace glm template GLM_FUNC_QUALIFIER valType mixedProduct ( - detail::tvec3 const & v1, - detail::tvec3 const & v2, - detail::tvec3 const & v3 + detail::tvec3 const & v1, + detail::tvec3 const & v2, + detail::tvec3 const & v3 ) { return dot(cross(v1, v2), v3); diff --git a/glm/gtx/multiple.inl b/glm/gtx/multiple.inl index c5f134dd..f5d59f27 100644 --- a/glm/gtx/multiple.inl +++ b/glm/gtx/multiple.inl @@ -10,8 +10,45 @@ // - GLM core /////////////////////////////////////////////////////////////////////////////////////////////////// -namespace glm +namespace glm{ +namespace detail { + template + struct higherMultiple + { + template + GLM_FUNC_QUALIFIER genType operator() + ( + genType const & Source, + genType const & Multiple + ) + { + if (Source > genType(0)) + { + genType Tmp = Source - genType(1); + return Tmp + (Multiple - (Tmp % Multiple)); + } + else + return Source + (-Source % Multiple); + } + }; + + template <> + struct higherMultiple + { + template + GLM_FUNC_QUALIFIER genType operator() + ( + genType const & Source, + genType const & Multiple + ) + { + genType Tmp = Source - genType(1); + return Tmp + (Multiple - (Tmp % Multiple)); + } + }; +}//namespace detail + ////////////////////// // higherMultiple @@ -22,13 +59,8 @@ namespace glm genType const & Multiple ) { - if (Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); + detail::higherMultiple::is_signed> Compute; + return Compute(Source, Multiple); } template <> diff --git a/glm/gtx/normalize_dot.inl b/glm/gtx/normalize_dot.inl index 5058eacc..5e9650e1 100644 --- a/glm/gtx/normalize_dot.inl +++ b/glm/gtx/normalize_dot.inl @@ -22,11 +22,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType normalizeDot + template + GLM_FUNC_QUALIFIER T normalizeDot ( - detail::tvec2 const & x, - detail::tvec2 const & y + detail::tvec2 const & x, + detail::tvec2 const & y ) { return @@ -35,11 +35,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType normalizeDot + template + GLM_FUNC_QUALIFIER T normalizeDot ( - detail::tvec3 const & x, - detail::tvec3 const & y + detail::tvec3 const & x, + detail::tvec3 const & y ) { return @@ -48,11 +48,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType normalizeDot + template + GLM_FUNC_QUALIFIER T normalizeDot ( - detail::tvec4 const & x, - detail::tvec4 const & y + detail::tvec4 const & x, + detail::tvec4 const & y ) { return @@ -74,11 +74,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType fastNormalizeDot + template + GLM_FUNC_QUALIFIER T fastNormalizeDot ( - detail::tvec2 const & x, - detail::tvec2 const & y + detail::tvec2 const & x, + detail::tvec2 const & y ) { return @@ -87,11 +87,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType fastNormalizeDot + template + GLM_FUNC_QUALIFIER T fastNormalizeDot ( - detail::tvec3 const & x, - detail::tvec3 const & y + detail::tvec3 const & x, + detail::tvec3 const & y ) { return @@ -100,11 +100,11 @@ namespace glm glm::dot(y, y)); } - template - GLM_FUNC_QUALIFIER valType fastNormalizeDot + template + GLM_FUNC_QUALIFIER T fastNormalizeDot ( - detail::tvec4 const & x, - detail::tvec4 const & y + detail::tvec4 const & x, + detail::tvec4 const & y ) { return diff --git a/glm/gtx/polar_coordinates.hpp b/glm/gtx/polar_coordinates.hpp index f95fb782..04a9fc0c 100644 --- a/glm/gtx/polar_coordinates.hpp +++ b/glm/gtx/polar_coordinates.hpp @@ -53,14 +53,14 @@ namespace glm /// Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. /// /// @see gtx_polar_coordinates - template + template detail::tvec3 polar( detail::tvec3 const & euclidean); /// Convert Polar to Euclidean coordinates. /// /// @see gtx_polar_coordinates - template + template detail::tvec3 euclidean( detail::tvec2 const & polar); diff --git a/glm/gtx/polar_coordinates.inl b/glm/gtx/polar_coordinates.inl index 8349080b..43718d7f 100644 --- a/glm/gtx/polar_coordinates.inl +++ b/glm/gtx/polar_coordinates.inl @@ -9,7 +9,7 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER detail::tvec3 polar ( detail::tvec3 const & euclidean @@ -32,7 +32,7 @@ namespace glm #endif } - template + template GLM_FUNC_QUALIFIER detail::tvec3 euclidean ( detail::tvec2 const & polar diff --git a/glm/gtx/transform2.hpp b/glm/gtx/transform2.hpp index 9de35f4f..cdd196e4 100644 --- a/glm/gtx/transform2.hpp +++ b/glm/gtx/transform2.hpp @@ -54,7 +54,7 @@ namespace glm //! Transforms a matrix with a shearing on X axis. //! From GLM_GTX_transform2 extension. - template + template detail::tmat3x3 shearX2D( detail::tmat3x3 const & m, T y); diff --git a/glm/gtx/transform2.inl b/glm/gtx/transform2.inl index 52c16b25..a54b7251 100644 --- a/glm/gtx/transform2.inl +++ b/glm/gtx/transform2.inl @@ -9,7 +9,7 @@ namespace glm { - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 shearX2D( const detail::tmat3x3& m, T s) @@ -19,7 +19,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 shearY2D( const detail::tmat3x3& m, T s) @@ -29,7 +29,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 shearX3D( const detail::tmat4x4& m, T s, @@ -41,7 +41,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 shearY3D( const detail::tmat4x4& m, T s, @@ -53,7 +53,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 shearZ3D( const detail::tmat4x4& m, T s, @@ -65,7 +65,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 reflect2D( const detail::tmat3x3& m, const detail::tvec3& normal) @@ -78,7 +78,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 reflect3D( const detail::tmat4x4& m, const detail::tvec3& normal) @@ -98,7 +98,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat3x3 proj2D( const detail::tmat3x3& m, const detail::tvec3& normal) @@ -111,7 +111,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 proj3D( const detail::tmat4x4& m, const detail::tvec3& normal) @@ -129,7 +129,7 @@ namespace glm return m * r; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 scaleBias( T scale, T bias) @@ -142,7 +142,7 @@ namespace glm return result; } - template + template GLM_FUNC_QUALIFIER detail::tmat4x4 scaleBias( const detail::tmat4x4& m, T scale, diff --git a/glm/gtx/vector_access.hpp b/glm/gtx/vector_access.hpp index 29bb8971..82b73eee 100644 --- a/glm/gtx/vector_access.hpp +++ b/glm/gtx/vector_access.hpp @@ -54,7 +54,7 @@ namespace glm /// @see gtx_vector_access extension. template void set( - detail::tvec2 & v, + detail::tvec2 & v, valType const & x, valType const & y); @@ -62,7 +62,7 @@ namespace glm /// @see gtx_vector_access extension. template void set( - detail::tvec3 & v, + detail::tvec3 & v, valType const & x, valType const & y, valType const & z); @@ -71,7 +71,7 @@ namespace glm /// @see gtx_vector_access extension. template void set( - detail::tvec4 & v, + detail::tvec4 & v, valType const & x, valType const & y, valType const & z, diff --git a/glm/gtx/vector_access.inl b/glm/gtx/vector_access.inl index b5a56037..e50b27b1 100644 --- a/glm/gtx/vector_access.inl +++ b/glm/gtx/vector_access.inl @@ -12,7 +12,7 @@ namespace glm template GLM_FUNC_QUALIFIER void set ( - detail::tvec2& v, + detail::tvec2& v, valType const & x, valType const & y ) @@ -24,7 +24,7 @@ namespace glm template GLM_FUNC_QUALIFIER void set ( - detail::tvec3& v, + detail::tvec3& v, valType const & x, valType const & y, valType const & z @@ -38,7 +38,7 @@ namespace glm template GLM_FUNC_QUALIFIER void set ( - detail::tvec4& v, + detail::tvec4& v, valType const & x, valType const & y, valType const & z, diff --git a/readme.txt b/readme.txt index 6e100f80..cc4069d9 100644 --- a/readme.txt +++ b/readme.txt @@ -69,6 +69,7 @@ GLM 0.9.5.0: 2013-XX-XX - Added C++11 initializer lists - Fixed umulExtended and imulExtended implementations for vector types (#76) - Fixed CUDA coverage for GTC extensions +- Added GTX_io extension ================================================================================ GLM 0.9.4.6: 2013-09-20 diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp index e464832a..cd4f05e1 100644 --- a/test/core/core_type_vec4.cpp +++ b/test/core/core_type_vec4.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -317,7 +318,7 @@ int test_vec4_perf_AoS(std::size_t Size) std::clock_t EndTime = std::clock(); - printf("AoS: %d\n", EndTime - StartTime); + std::printf("AoS: %d\n", EndTime - StartTime); return Error; } @@ -356,7 +357,7 @@ int test_vec4_perf_SoA(std::size_t Size) std::clock_t EndTime = std::clock(); - printf("SoA: %d\n", EndTime - StartTime); + std::printf("SoA: %d\n", EndTime - StartTime); return Error; } diff --git a/test/gtc/gtc_quaternion.cpp b/test/gtc/gtc_quaternion.cpp index be1638f7..079dbe7f 100644 --- a/test/gtc/gtc_quaternion.cpp +++ b/test/gtc/gtc_quaternion.cpp @@ -210,6 +210,15 @@ int test_quat_mul() glm::quat temp5 = glm::normalize(temp1 * temp2); glm::vec3 temp6 = temp5 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp5); + { + glm::quat temp7; + + temp7 *= temp5; + temp7 *= glm::inverse(temp5); + + Error += temp7 != glm::quat(); + } + return Error; } diff --git a/test/gtx/CMakeLists.txt b/test/gtx/CMakeLists.txt index ce0ef6f8..d3ba66a6 100644 --- a/test/gtx/CMakeLists.txt +++ b/test/gtx/CMakeLists.txt @@ -1,10 +1,38 @@ +glmCreateTestGTC(gtx_associated_min_max) glmCreateTestGTC(gtx_bit) +glmCreateTestGTC(gtx_closest_point) +glmCreateTestGTC(gtx_color_space_YCoCg) +glmCreateTestGTC(gtx_color_space) +glmCreateTestGTC(gtx_compatibility) +glmCreateTestGTC(gtx_component_wise) glmCreateTestGTC(gtx_euler_angle) +glmCreateTestGTC(gtx_extend) +glmCreateTestGTC(gtx_extented_min_max) +glmCreateTestGTC(gtx_fast_exponential) +glmCreateTestGTC(gtx_fast_square_root) +glmCreateTestGTC(gtx_fast_trigonometry) glmCreateTestGTC(gtx_gradient_paint) +glmCreateTestGTC(gtx_handed_coordinate_space) +glmCreateTestGTC(gtx_inertia) glmCreateTestGTC(gtx_integer) +glmCreateTestGTC(gtx_intersect) +glmCreateTestGTC(gtx_io) +glmCreateTestGTC(gtx_log_base) +glmCreateTestGTC(gtx_matrix_cross_product) glmCreateTestGTC(gtx_matrix_interpolation) +glmCreateTestGTC(gtx_matrix_major_storage) +glmCreateTestGTC(gtx_matrix_operation) glmCreateTestGTC(gtx_matrix_query) glmCreateTestGTC(gtx_multiple) +glmCreateTestGTC(gtx_norm) +glmCreateTestGTC(gtx_normal) +glmCreateTestGTC(gtx_normalize_dot) +glmCreateTestGTC(gtx_number_precision) +glmCreateTestGTC(gtx_orthonormalize) +glmCreateTestGTC(gtx_optimum_pow) +glmCreateTestGTC(gtx_perpendicular) +glmCreateTestGTC(gtx_polar_coordinates) +glmCreateTestGTC(gtx_projection) glmCreateTestGTC(gtx_quaternion) glmCreateTestGTC(gtx_dual_quaternion) glmCreateTestGTC(gtx_rotate_normalized_axis) @@ -12,6 +40,7 @@ glmCreateTestGTC(gtx_rotate_vector) glmCreateTestGTC(gtx_scalar_relational) glmCreateTestGTC(gtx_simd_vec4) glmCreateTestGTC(gtx_simd_mat4) +glmCreateTestGTC(gtx_spline) glmCreateTestGTC(gtx_string_cast) glmCreateTestGTC(gtx_vector_angle) glmCreateTestGTC(gtx_vector_query) diff --git a/test/gtx/gtx_associated_min_max.cpp b/test/gtx/gtx_associated_min_max.cpp new file mode 100644 index 00000000..65ae56c8 --- /dev/null +++ b/test/gtx/gtx_associated_min_max.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_closest_point.cpp b/test/gtx/gtx_closest_point.cpp new file mode 100644 index 00000000..65ae56c8 --- /dev/null +++ b/test/gtx/gtx_closest_point.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_color_space.cpp b/test/gtx/gtx_color_space.cpp new file mode 100644 index 00000000..13c7f225 --- /dev/null +++ b/test/gtx/gtx_color_space.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/color_space.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_color_space_YCoCg.cpp b/test/gtx/gtx_color_space_YCoCg.cpp new file mode 100644 index 00000000..b20f63d3 --- /dev/null +++ b/test/gtx/gtx_color_space_YCoCg.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/color_space_YCoCg.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_compatibility.cpp b/test/gtx/gtx_compatibility.cpp new file mode 100644 index 00000000..c23ff1c5 --- /dev/null +++ b/test/gtx/gtx_compatibility.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/compatibility.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_component_wise.cpp b/test/gtx/gtx_component_wise.cpp new file mode 100644 index 00000000..c1964829 --- /dev/null +++ b/test/gtx/gtx_component_wise.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/component_wise.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_extend.cpp b/test/gtx/gtx_extend.cpp new file mode 100644 index 00000000..12cb5fd1 --- /dev/null +++ b/test/gtx/gtx_extend.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/extend.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_extented_min_max.cpp b/test/gtx/gtx_extented_min_max.cpp new file mode 100644 index 00000000..65ae56c8 --- /dev/null +++ b/test/gtx/gtx_extented_min_max.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_fast_exponential.cpp b/test/gtx/gtx_fast_exponential.cpp new file mode 100644 index 00000000..5b52bed5 --- /dev/null +++ b/test/gtx/gtx_fast_exponential.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_fast_square_root.cpp b/test/gtx/gtx_fast_square_root.cpp new file mode 100644 index 00000000..f6c4bcc1 --- /dev/null +++ b/test/gtx/gtx_fast_square_root.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/fast_square_root.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp new file mode 100644 index 00000000..638313aa --- /dev/null +++ b/test/gtx/gtx_fast_trigonometry.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/fast_trigonometry.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_handed_coordinate_space.cpp b/test/gtx/gtx_handed_coordinate_space.cpp new file mode 100644 index 00000000..c5ca22e8 --- /dev/null +++ b/test/gtx/gtx_handed_coordinate_space.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/handed_coordinate_space.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_inertia.cpp b/test/gtx/gtx_inertia.cpp new file mode 100644 index 00000000..fa15e62f --- /dev/null +++ b/test/gtx/gtx_inertia.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/inertia.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_int_10_10_10_2.cpp b/test/gtx/gtx_int_10_10_10_2.cpp new file mode 100644 index 00000000..65ae56c8 --- /dev/null +++ b/test/gtx/gtx_int_10_10_10_2.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_intersect.cpp b/test/gtx/gtx_intersect.cpp new file mode 100644 index 00000000..fe6c674e --- /dev/null +++ b/test/gtx/gtx_intersect.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/intersect.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_io.cpp b/test/gtx/gtx_io.cpp new file mode 100644 index 00000000..86792bc9 --- /dev/null +++ b/test/gtx/gtx_io.cpp @@ -0,0 +1,140 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-11-22 +// Updated : 2013-11-22 +// Licence : This source is under MIT licence +// File : test/gtx/io.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +namespace { + + template + std::basic_ostream& + operator<<(std::basic_ostream& os, glm::precision const& a) + { + typename std::basic_ostream::sentry const cerberus(os); + + if (cerberus) { + switch (a) { + case glm::highp: os << "hi"; break; + case glm::mediump: os << "md"; break; + case glm::lowp: os << "lo"; break; + } + } + + return os; + } + +} // namespace { + +template +int test_io_vec(OS& os) +{ + os << '\n' + << typeid(OS).name() + << '\n'; + + glm::detail::tvec2 const v2(0, 1); + glm::detail::tvec3 const v3(2, 3, 4); + glm::detail::tvec4 const v4(5, 6, 7, 8); + + os << "vec2<" << typeid(T).name() << ',' << P << ">: " << v2 << '\n' + << "vec3<" << typeid(T).name() << ',' << P << ">: " << v3 << '\n' + << "vec4<" << typeid(T).name() << ',' << P << ">: " << v4 << '\n'; + + glm::io::precision_guard const iopg; + + glm::io::precision() = 2; + glm::io::value_width() = 1 + 2 + 1 + glm::io::precision(); + + os << "vec2<" << typeid(T).name() << ',' << P << ">: " << v2 << '\n' + << "vec3<" << typeid(T).name() << ',' << P << ">: " << v3 << '\n' + << "vec4<" << typeid(T).name() << ',' << P << ">: " << v4 << '\n'; + + return 0; +} + +template +int test_io_mat(OS& os) +{ + os << '\n' + << typeid(OS).name() + << '\n'; + + glm::detail::tvec2 const v2_1( 0, 1); + glm::detail::tvec2 const v2_2( 2, 3); + glm::detail::tvec2 const v2_3( 4, 5); + glm::detail::tvec2 const v2_4( 6, 7); + glm::detail::tvec3 const v3_1( 8, 9, 10); + glm::detail::tvec3 const v3_2(11, 12, 13); + glm::detail::tvec3 const v3_3(14, 15, 16); + glm::detail::tvec3 const v3_4(17, 18, 19); + glm::detail::tvec4 const v4_1(20, 21, 22, 23); + glm::detail::tvec4 const v4_2(24, 25, 26, 27); + glm::detail::tvec4 const v4_3(28, 29, 30, 31); + glm::detail::tvec4 const v4_4(32, 33, 34, 35); + +#if 0 + os << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2(v2_1, v2_2) << '\n' + << "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3(v3_1, v3_2) << '\n' + << "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4(v4_1, v4_2) << '\n' + << "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2(v2_1, v2_2, v2_3) << '\n' + << "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3(v3_1, v3_2, v3_3) << '\n' + << "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4(v4_1, v4_2, v4_3) << '\n' + << "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2(v2_1, v2_2, v2_3, v2_4) << '\n' + << "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3(v3_1, v3_2, v3_3, v3_4) << '\n' + << "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4(v4_1, v4_2, v4_3, v4_4) << '\n'; +#endif + + glm::io::precision_guard const iopg; + + glm::io::precision() = 2; + glm::io::value_width() = 1 + 2 + 1 + glm::io::precision(); + + os << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2(v2_1, v2_2) << '\n' + << "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3(v3_1, v3_2) << '\n' + << "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4(v4_1, v4_2) << '\n' + << "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2(v2_1, v2_2, v2_3) << '\n' + << "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3(v3_1, v3_2, v3_3) << '\n' + << "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4(v4_1, v4_2, v4_3) << '\n' + << "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2(v2_1, v2_2, v2_3, v2_4) << '\n' + << "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3(v3_1, v3_2, v3_3, v3_4) << '\n' + << "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4(v4_1, v4_2, v4_3, v4_4) << '\n'; + + os << glm::io::column_major + << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2(v2_1, v2_2) << '\n' + << "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3(v3_1, v3_2) << '\n' + << "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4(v4_1, v4_2) << '\n' + << "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2(v2_1, v2_2, v2_3) << '\n' + << "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3(v3_1, v3_2, v3_3) << '\n' + << "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4(v4_1, v4_2, v4_3) << '\n' + << "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2(v2_1, v2_2, v2_3, v2_4) << '\n' + << "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3(v3_1, v3_2, v3_3, v3_4) << '\n' + << "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4(v4_1, v4_2, v4_3, v4_4) << '\n'; + + return 0; +} + +int main() +{ + int Error(0); + + Error += test_io_vec(std::cout); + Error += test_io_vec(std::wcout); + Error += test_io_vec(std::cout); + Error += test_io_vec(std::wcout); + Error += test_io_vec(std::cout); + Error += test_io_vec(std::wcout); + + Error += test_io_mat(std::cout); + Error += test_io_mat(std::wcout); + + return Error; +} diff --git a/test/gtx/gtx_log_base.cpp b/test/gtx/gtx_log_base.cpp new file mode 100644 index 00000000..b3991044 --- /dev/null +++ b/test/gtx/gtx_log_base.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/log_base.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_matrix_cross_product.cpp b/test/gtx/gtx_matrix_cross_product.cpp new file mode 100644 index 00000000..6d7651c1 --- /dev/null +++ b/test/gtx/gtx_matrix_cross_product.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/matrix_cross_product.hpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_matrix_major_storage.cpp b/test/gtx/gtx_matrix_major_storage.cpp new file mode 100644 index 00000000..8eec864b --- /dev/null +++ b/test/gtx/gtx_matrix_major_storage.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/matrix_major_storage.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_matrix_operation.cpp b/test/gtx/gtx_matrix_operation.cpp new file mode 100644 index 00000000..23f6ee10 --- /dev/null +++ b/test/gtx/gtx_matrix_operation.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/matrix_operation.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_mixed_product.cpp b/test/gtx/gtx_mixed_product.cpp new file mode 100644 index 00000000..65ae56c8 --- /dev/null +++ b/test/gtx/gtx_mixed_product.cpp @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_norm.cpp b/test/gtx/gtx_norm.cpp new file mode 100644 index 00000000..4489288a --- /dev/null +++ b/test/gtx/gtx_norm.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/norm.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_normal.cpp b/test/gtx/gtx_normal.cpp new file mode 100644 index 00000000..5ac088ad --- /dev/null +++ b/test/gtx/gtx_normal.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/normal.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_normalize_dot.cpp b/test/gtx/gtx_normalize_dot.cpp new file mode 100644 index 00000000..758ecf04 --- /dev/null +++ b/test/gtx/gtx_normalize_dot.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/normalize_dot.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_number_precision.cpp b/test/gtx/gtx_number_precision.cpp new file mode 100644 index 00000000..cc4c4055 --- /dev/null +++ b/test/gtx/gtx_number_precision.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/number_precision.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_optimum_pow.cpp b/test/gtx/gtx_optimum_pow.cpp new file mode 100644 index 00000000..e6de00b9 --- /dev/null +++ b/test/gtx/gtx_optimum_pow.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/optimum_pow.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_orthonormalize.cpp b/test/gtx/gtx_orthonormalize.cpp new file mode 100644 index 00000000..3f1127f8 --- /dev/null +++ b/test/gtx/gtx_orthonormalize.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/orthonormalize.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_perpendicular.cpp b/test/gtx/gtx_perpendicular.cpp new file mode 100644 index 00000000..274d0dba --- /dev/null +++ b/test/gtx/gtx_perpendicular.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/perpendicular.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_polar_coordinates.cpp b/test/gtx/gtx_polar_coordinates.cpp new file mode 100644 index 00000000..3f94bda0 --- /dev/null +++ b/test/gtx/gtx_polar_coordinates.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/polar_coordinates.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_projection.cpp b/test/gtx/gtx_projection.cpp new file mode 100644 index 00000000..102e0786 --- /dev/null +++ b/test/gtx/gtx_projection.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/projection.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_simd_vec4.cpp b/test/gtx/gtx_simd_vec4.cpp index 6f262196..8ce92371 100644 --- a/test/gtx/gtx_simd_vec4.cpp +++ b/test/gtx/gtx_simd_vec4.cpp @@ -28,6 +28,14 @@ int main() //printf("C1(%2.3f, %2.3f, %2.3f, %2.3f)\n", C1.x, C1.y, C1.z, C1.w); //printf("D1(%2.3f, %2.3f, %2.3f, %2.3f)\n", D1.x, D1.y, D1.z, D1.w); + __m128 value; + __m128 data = _mm_cmpeq_ps(value, value); + __m128 add0 = _mm_add_ps(data, data); + + glm::simdVec4 GNI(add0); + + printf("%f\n", GNI.Data /* .m128_f32 */); + return 0; } diff --git a/test/gtx/gtx_spline.cpp b/test/gtx/gtx_spline.cpp new file mode 100644 index 00000000..0f410b9a --- /dev/null +++ b/test/gtx/gtx_spline.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2013-10-25 +// Updated : 2013-10-25 +// Licence : This source is under MIT licence +// File : test/gtx/associated_min_max.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main() +{ + int Error(0); + + return Error; +} diff --git a/test/gtx/gtx_vector_query.cpp b/test/gtx/gtx_vector_query.cpp index 0682dab9..384a1906 100644 --- a/test/gtx/gtx_vector_query.cpp +++ b/test/gtx/gtx_vector_query.cpp @@ -12,7 +12,7 @@ int test_areCollinear() { - int Error(0); + int Error(0); { bool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f); @@ -29,47 +29,47 @@ int test_areCollinear() Error += TestA ? 0 : 1; } - return Error; + return Error; } int test_areOrthogonal() { - int Error(0); - + int Error(0); + bool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f); - Error += TestA ? 0 : 1; + Error += TestA ? 0 : 1; - return Error; + return Error; } int test_isNormalized() { - int Error(0); - + int Error(0); + bool TestA = glm::isNormalized(glm::vec4(1, 0, 0, 0), 0.00001f); - Error += TestA ? 0 : 1; + Error += TestA ? 0 : 1; - return Error; + return Error; } int test_isNull() { - int Error(0); - + int Error(0); + bool TestA = glm::isNull(glm::vec4(0), 0.00001f); - Error += TestA ? 0 : 1; + Error += TestA ? 0 : 1; - return Error; + return Error; } int test_areOrthonormal() { - int Error(0); - - bool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f); - Error += TestA ? 0 : 1; + int Error(0); - return Error; + bool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f); + Error += TestA ? 0 : 1; + + return Error; } int main()