From 07ec8c95b225b54ddf603c1657a35e455925a66d Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 1 Jun 2011 00:58:31 +0100 Subject: [PATCH 1/7] Fixed a bunch of warnings --- glm/core/intrinsic_common.inl | 4 ++++ glm/core/intrinsic_matrix.inl | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/glm/core/intrinsic_common.inl b/glm/core/intrinsic_common.inl index 5905b3b5..47935d29 100644 --- a/glm/core/intrinsic_common.inl +++ b/glm/core/intrinsic_common.inl @@ -205,10 +205,12 @@ GLM_FUNC_QUALIFIER __m128 sse_mod_ps(__m128 x, __m128 y) } /// TODO +/* GLM_FUNC_QUALIFIER __m128 sse_modf_ps(__m128 x, __m128i & i) { return __m128(); } +*/ //GLM_FUNC_QUALIFIER __m128 _mm_min_ps(__m128 x, __m128 y) @@ -252,6 +254,7 @@ GLM_FUNC_QUALIFIER __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x) return mul2; } +/* TODO GLM_FUNC_QUALIFIER __m128 sse_nan_ps(__m128 x) { @@ -261,6 +264,7 @@ GLM_FUNC_QUALIFIER __m128 sse_inf_ps(__m128 x) { } +*/ // SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration // By Elan Ruskin, http://assemblyrequired.crashworks.org/ diff --git a/glm/core/intrinsic_matrix.inl b/glm/core/intrinsic_matrix.inl index 1246a744..7350488f 100644 --- a/glm/core/intrinsic_matrix.inl +++ b/glm/core/intrinsic_matrix.inl @@ -10,8 +10,9 @@ namespace glm{ namespace detail{ -static const __m128 _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f); -static const __m128 _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f); +/// \todo +//static const __m128 _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f); +//static const __m128 _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f); template GLM_FUNC_QUALIFIER matType sse_comp_mul_ps From 35ed096cc831c1ec71106be20878895ebcffa429 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 1 Jun 2011 10:02:02 +0100 Subject: [PATCH 2/7] Added declarations for missing constructors --- glm/core/type_mat2x2.hpp | 12 ++++++------ glm/core/type_mat2x2.inl | 22 +++++++++++----------- glm/core/type_mat2x3.hpp | 20 +++++++++++++++++++- glm/core/type_mat2x4.hpp | 25 +++++++++++++++++++++++-- glm/core/type_mat3x2.hpp | 25 ++++++++++++++++++++++++- glm/core/type_mat3x3.hpp | 23 +++++++++++++++++++++++ glm/core/type_mat3x4.hpp | 25 ++++++++++++++++++++++++- glm/core/type_mat4x2.hpp | 28 +++++++++++++++++++++++++++- glm/core/type_mat4x3.hpp | 30 +++++++++++++++++++++++++++--- glm/core/type_mat4x4.hpp | 24 ++++++++++++++++++++++++ 10 files changed, 208 insertions(+), 26 deletions(-) diff --git a/glm/core/type_mat2x2.hpp b/glm/core/type_mat2x2.hpp index 7f0df2c7..9ae7cd13 100644 --- a/glm/core/type_mat2x2.hpp +++ b/glm/core/type_mat2x2.hpp @@ -79,7 +79,7 @@ namespace glm col_type const & v2); ////////////////////////////////////// - // Convertion constructors + // Conversions template GLM_FUNC_DECL explicit tmat2x2( U const & x); @@ -89,13 +89,13 @@ namespace glm U const & x1, V const & y1, M const & x2, N const & y2); - //template - //GLM_FUNC_DECL explicit tmat2x2( - // tvec2 const & v1, - // tvec2 const & v2); + template + GLM_FUNC_DECL explicit tmat2x2( + tvec2 const & v1, + tvec2 const & v2); ////////////////////////////////////// - // Conversions + // Matrix conversions template GLM_FUNC_DECL explicit tmat2x2(tmat2x2 const & m); diff --git a/glm/core/type_mat2x2.inl b/glm/core/type_mat2x2.inl index 11a3f11c..77638dbb 100644 --- a/glm/core/type_mat2x2.inl +++ b/glm/core/type_mat2x2.inl @@ -133,17 +133,17 @@ namespace detail this->value[1] = col_type(value_type(x2), value_type(y2)); } - //template - //template - //GLM_FUNC_DECL tmat2x2::tmat2x2 - //( - // tvec2 const & v1, - // tvec2 const & v2 - //) - //{ - // this->value[0] = col_type(v1); - // this->value[1] = col_type(v2); - //} + template + template + GLM_FUNC_DECL tmat2x2::tmat2x2 + ( + tvec2 const & v1, + tvec2 const & v2 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + } ////////////////////////////////////////////////////////////// // mat2x2 conversions diff --git a/glm/core/type_mat2x3.hpp b/glm/core/type_mat2x3.hpp index ed87f9e2..4ff621e1 100644 --- a/glm/core/type_mat2x3.hpp +++ b/glm/core/type_mat2x3.hpp @@ -71,7 +71,25 @@ namespace glm col_type const & v0, col_type const & v1); - // Conversion + + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat2x3( + U const & x); + + template + GLM_FUNC_DECL explicit tmat2x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2); + + template + GLM_FUNC_DECL explicit tmat2x3( + tvec3 const & v1, + tvec3 const & v2); + + ////////////////////////////////////// + // Matrix conversion template GLM_FUNC_DECL explicit tmat2x3(tmat2x3 const & m); diff --git a/glm/core/type_mat2x4.hpp b/glm/core/type_mat2x4.hpp index a14cc033..8eee4105 100644 --- a/glm/core/type_mat2x4.hpp +++ b/glm/core/type_mat2x4.hpp @@ -70,8 +70,29 @@ namespace glm GLM_FUNC_DECL explicit tmat2x4( col_type const & v0, col_type const & v1); - - // Conversion + + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat2x4( + U const & x); + + template + < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2 + > + GLM_FUNC_DECL explicit tmat2x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,); + + template + GLM_FUNC_DECL explicit tmat2x4( + tvec4 const & v1, + tvec4 const & v2); + + ////////////////////////////////////// + // Matrix conversions template GLM_FUNC_DECL explicit tmat2x4(tmat2x4 const & m); diff --git a/glm/core/type_mat3x2.hpp b/glm/core/type_mat3x2.hpp index 3457b72f..70c0795a 100644 --- a/glm/core/type_mat3x2.hpp +++ b/glm/core/type_mat3x2.hpp @@ -73,7 +73,30 @@ namespace glm col_type const & v1, col_type const & v2); - // Conversion + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat3x2( + U const & x); + + template + < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3 + > + GLM_FUNC_DECL explicit tmat3x2( + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3); + + template + GLM_FUNC_DECL explicit tmat3x2( + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3); + + // Matrix conversions template GLM_FUNC_DECL explicit tmat3x2(tmat3x2 const & m); diff --git a/glm/core/type_mat3x3.hpp b/glm/core/type_mat3x3.hpp index 3f4725dc..4f47eb7a 100644 --- a/glm/core/type_mat3x3.hpp +++ b/glm/core/type_mat3x3.hpp @@ -77,8 +77,31 @@ namespace glm col_type const & v1, col_type const & v2); + ////////////////////////////////////// // Conversions template + GLM_FUNC_DECL explicit tmat3x3( + U const & x); + + template + < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3 + > + GLM_FUNC_DECL explicit tmat3x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3); + + template + GLM_FUNC_DECL explicit tmat3x3( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3); + + // Matrix conversions + template GLM_FUNC_DECL explicit tmat3x3(tmat3x3 const & m); GLM_FUNC_DECL explicit tmat3x3(tmat2x2 const & x); diff --git a/glm/core/type_mat3x4.hpp b/glm/core/type_mat3x4.hpp index 1f84ec7b..7978361e 100644 --- a/glm/core/type_mat3x4.hpp +++ b/glm/core/type_mat3x4.hpp @@ -73,7 +73,30 @@ namespace glm col_type const & v1, col_type const & v2); - // Conversion + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat3x4( + U const & x); + + template + < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3 + > + GLM_FUNC_DECL explicit tmat3x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3); + + template + GLM_FUNC_DECL explicit tmat3x4( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3); + + // Matrix conversion template GLM_FUNC_DECL explicit tmat3x4(tmat3x4 const & m); diff --git a/glm/core/type_mat4x2.hpp b/glm/core/type_mat4x2.hpp index 3354ce8e..67c5b2b2 100644 --- a/glm/core/type_mat4x2.hpp +++ b/glm/core/type_mat4x2.hpp @@ -74,9 +74,35 @@ namespace glm col_type const & v1, col_type const & v2, col_type const & v3); - + + ////////////////////////////////////// // Conversions template + GLM_FUNC_DECL explicit tmat4x2( + U const & x); + + template + < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3, + typename X4, typename Y4 + > + GLM_FUNC_DECL explicit tmat4x2( + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3, + X4 const & x4, Y4 const & y4); + + template + GLM_FUNC_DECL explicit tmat4x2( + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3, + tvec2 const & v4); + + // Matrix conversions + template GLM_FUNC_DECL explicit tmat4x2(tmat4x2 const & m); GLM_FUNC_DECL explicit tmat4x2(tmat2x2 const & x); diff --git a/glm/core/type_mat4x3.hpp b/glm/core/type_mat4x3.hpp index b15a3c30..3876150b 100644 --- a/glm/core/type_mat4x3.hpp +++ b/glm/core/type_mat4x3.hpp @@ -73,9 +73,33 @@ namespace glm col_type const & v0, col_type const & v1, col_type const & v2, - col_type const & v3); - - // Conversion + col_type const & v3); + + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat4x3( + U const & x); + + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3, + typename X4, typename Y4, typename Z4> + GLM_FUNC_DECL explicit tmat4x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3, + X4 const & x4, Y4 const & y4, Z4 const & z4); + + template + GLM_FUNC_DECL explicit tmat4x3( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3, + tvec3 const & v4); + + // Matrix conversions template GLM_FUNC_DECL explicit tmat4x3(tmat4x3 const & m); diff --git a/glm/core/type_mat4x4.hpp b/glm/core/type_mat4x4.hpp index e992ddaf..a470f34a 100644 --- a/glm/core/type_mat4x4.hpp +++ b/glm/core/type_mat4x4.hpp @@ -79,8 +79,32 @@ namespace glm col_type const & v2, col_type const & v3); + ////////////////////////////////////// // Conversions template + GLM_FUNC_DECL explicit tmat4x4( + U const & x); + + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3, + typename X4, typename Y4, typename Z4> + GLM_FUNC_DECL explicit tmat4x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, + X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4); + + template + GLM_FUNC_DECL explicit tmat4x4( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3, + tvec4 const & v4); + + // Matrix conversions + template GLM_FUNC_DECL explicit tmat4x4(tmat4x4 const & m); GLM_FUNC_DECL explicit tmat4x4(tmat2x2 const & x); From 92d3fc5b6a665b31fc6ac796f057ce962058bcef Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 1 Jun 2011 17:22:15 +0100 Subject: [PATCH 3/7] Fixed #102, removed GCC warnings --- glm/core/intrinsic_common.inl | 194 +++++++++++++++++----------------- glm/core/intrinsic_matrix.inl | 8 +- glm/core/setup.hpp | 6 ++ 3 files changed, 109 insertions(+), 99 deletions(-) diff --git a/glm/core/intrinsic_common.inl b/glm/core/intrinsic_common.inl index fdaac0c8..cda40420 100644 --- a/glm/core/intrinsic_common.inl +++ b/glm/core/intrinsic_common.inl @@ -21,107 +21,107 @@ namespace detail{ ieee754_QNAN() : f(0.0)/*, mantissa(0x7FFFFF), exp(0xFF), sign(0x0)*/ {} }; - static const __m128 zero = _mm_setzero_ps(); - static const __m128 one = _mm_set_ps1(1.0f); - static const __m128 minus_one = _mm_set_ps1(-1.0f); - static const __m128 two = _mm_set_ps1(2.0f); - static const __m128 three = _mm_set_ps1(3.0f); - static const __m128 pi = _mm_set_ps1(3.1415926535897932384626433832795f); - static const __m128 hundred_eighty = _mm_set_ps1(180.f); - static const __m128 pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f); - static const __m128 hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f); + static const __m128 GLM_VAR_USED zero = _mm_setzero_ps(); + static const __m128 GLM_VAR_USED one = _mm_set_ps1(1.0f); + static const __m128 GLM_VAR_USED minus_one = _mm_set_ps1(-1.0f); + static const __m128 GLM_VAR_USED two = _mm_set_ps1(2.0f); + static const __m128 GLM_VAR_USED three = _mm_set_ps1(3.0f); + static const __m128 GLM_VAR_USED pi = _mm_set_ps1(3.1415926535897932384626433832795f); + static const __m128 GLM_VAR_USED hundred_eighty = _mm_set_ps1(180.f); + static const __m128 GLM_VAR_USED pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f); + static const __m128 GLM_VAR_USED hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f); static const ieee754_QNAN absMask; - static const __m128 abs4Mask = _mm_set_ps1(absMask.f); + static const __m128 GLM_VAR_USED abs4Mask = _mm_set_ps1(absMask.f); - static const __m128 _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000)); - //static const __m128 _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF)); - //static const __m128 _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000)); - //static const __m128 _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF)); - //static const __m128 _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000)); - static const __m128 _epi32_0 = _mm_set_ps1(0); - static const __m128 _epi32_1 = _mm_set_ps1(1); - static const __m128 _epi32_2 = _mm_set_ps1(2); - static const __m128 _epi32_3 = _mm_set_ps1(3); - static const __m128 _epi32_4 = _mm_set_ps1(4); - static const __m128 _epi32_5 = _mm_set_ps1(5); - static const __m128 _epi32_6 = _mm_set_ps1(6); - static const __m128 _epi32_7 = _mm_set_ps1(7); - static const __m128 _epi32_8 = _mm_set_ps1(8); - static const __m128 _epi32_9 = _mm_set_ps1(9); - static const __m128 _epi32_127 = _mm_set_ps1(127); - //static const __m128 _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000)); - //static const __m128 _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000)); + static const __m128 GLM_VAR_USED _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000)); + //static const __m128 GLM_VAR_USED _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF)); + //static const __m128 GLM_VAR_USED _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000)); + //static const __m128 GLM_VAR_USED _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF)); + //static const __m128 GLM_VAR_USED _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000)); + static const __m128 GLM_VAR_USED _epi32_0 = _mm_set_ps1(0); + static const __m128 GLM_VAR_USED _epi32_1 = _mm_set_ps1(1); + static const __m128 GLM_VAR_USED _epi32_2 = _mm_set_ps1(2); + static const __m128 GLM_VAR_USED _epi32_3 = _mm_set_ps1(3); + static const __m128 GLM_VAR_USED _epi32_4 = _mm_set_ps1(4); + static const __m128 GLM_VAR_USED _epi32_5 = _mm_set_ps1(5); + static const __m128 GLM_VAR_USED _epi32_6 = _mm_set_ps1(6); + static const __m128 GLM_VAR_USED _epi32_7 = _mm_set_ps1(7); + static const __m128 GLM_VAR_USED _epi32_8 = _mm_set_ps1(8); + static const __m128 GLM_VAR_USED _epi32_9 = _mm_set_ps1(9); + static const __m128 GLM_VAR_USED _epi32_127 = _mm_set_ps1(127); + //static const __m128 GLM_VAR_USED _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000)); + //static const __m128 GLM_VAR_USED _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000)); - static const __m128 _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f); - static const __m128 _ps_0p5 = _mm_set_ps1(0.5f); - static const __m128 _ps_1 = _mm_set_ps1(1.0f); - static const __m128 _ps_m1 = _mm_set_ps1(-1.0f); - static const __m128 _ps_2 = _mm_set_ps1(2.0f); - static const __m128 _ps_3 = _mm_set_ps1(3.0f); - static const __m128 _ps_127 = _mm_set_ps1(127.0f); - static const __m128 _ps_255 = _mm_set_ps1(255.0f); - static const __m128 _ps_2pow23 = _mm_set_ps1(8388608.0f); + static const __m128 GLM_VAR_USED _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f); + static const __m128 GLM_VAR_USED _ps_0p5 = _mm_set_ps1(0.5f); + static const __m128 GLM_VAR_USED _ps_1 = _mm_set_ps1(1.0f); + static const __m128 GLM_VAR_USED _ps_m1 = _mm_set_ps1(-1.0f); + static const __m128 GLM_VAR_USED _ps_2 = _mm_set_ps1(2.0f); + static const __m128 GLM_VAR_USED _ps_3 = _mm_set_ps1(3.0f); + static const __m128 GLM_VAR_USED _ps_127 = _mm_set_ps1(127.0f); + static const __m128 GLM_VAR_USED _ps_255 = _mm_set_ps1(255.0f); + static const __m128 GLM_VAR_USED _ps_2pow23 = _mm_set_ps1(8388608.0f); - static const __m128 _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f); - static const __m128 _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f); - static const __m128 _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f); - static const __m128 _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f); + static const __m128 GLM_VAR_USED _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f); + static const __m128 GLM_VAR_USED _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f); + static const __m128 GLM_VAR_USED _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f); + static const __m128 GLM_VAR_USED _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f); - static const __m128 _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f); - static const __m128 _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f); - static const __m128 _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f); - static const __m128 _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f); - static const __m128 _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f); - static const __m128 _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f); + static const __m128 GLM_VAR_USED _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f); + static const __m128 GLM_VAR_USED _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f); + static const __m128 GLM_VAR_USED _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f); + static const __m128 GLM_VAR_USED _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f); + static const __m128 GLM_VAR_USED _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f); + static const __m128 GLM_VAR_USED _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f); - static const __m128 _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f); - static const __m128 _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f); - static const __m128 _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f); - static const __m128 _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f); - static const __m128 _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f); - static const __m128 _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f); - static const __m128 _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f); - static const __m128 _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f); - static const __m128 _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f); - static const __m128 _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f); - static const __m128 _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f); - static const __m128 _ps_tan_poleval = _mm_set_ps1(3.68935e19f); - static const __m128 _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f); - static const __m128 _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f); - static const __m128 _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f); - static const __m128 _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f); - static const __m128 _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f); - static const __m128 _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f); - static const __m128 _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f); - static const __m128 _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f); + static const __m128 GLM_VAR_USED _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f); + static const __m128 GLM_VAR_USED _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f); + static const __m128 GLM_VAR_USED _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f); + static const __m128 GLM_VAR_USED _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f); + static const __m128 GLM_VAR_USED _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f); + static const __m128 GLM_VAR_USED _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f); + static const __m128 GLM_VAR_USED _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f); + static const __m128 GLM_VAR_USED _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f); + static const __m128 GLM_VAR_USED _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f); + static const __m128 GLM_VAR_USED _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f); + static const __m128 GLM_VAR_USED _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f); + static const __m128 GLM_VAR_USED _ps_tan_poleval = _mm_set_ps1(3.68935e19f); + static const __m128 GLM_VAR_USED _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f); + static const __m128 GLM_VAR_USED _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f); + static const __m128 GLM_VAR_USED _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f); + static const __m128 GLM_VAR_USED _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f); + static const __m128 GLM_VAR_USED _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f); + static const __m128 GLM_VAR_USED _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f); + static const __m128 GLM_VAR_USED _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f); + static const __m128 GLM_VAR_USED _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f); - static const __m128 _ps_exp_hi = _mm_set_ps1(88.3762626647949f); - static const __m128 _ps_exp_lo = _mm_set_ps1(-88.3762626647949f); - static const __m128 _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f); - static const __m128 _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f); - static const __m128 _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f); - static const __m128 _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f); - static const __m128 _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f); - static const __m128 _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f); - static const __m128 _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f); - static const __m128 _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f); - static const __m128 _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f); - static const __m128 _ps_exp2_hi = _mm_set_ps1(127.4999961853f); - static const __m128 _ps_exp2_lo = _mm_set_ps1(-127.4999961853f); - static const __m128 _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f); - static const __m128 _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f); - static const __m128 _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f); - static const __m128 _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f); - static const __m128 _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f); - static const __m128 _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f); - static const __m128 _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f); - static const __m128 _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f); - static const __m128 _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f); - static const __m128 _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f); - static const __m128 _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f); - static const __m128 _ps_log_c0 = _mm_set_ps1(0.693147180559945f); - static const __m128 _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f); + static const __m128 GLM_VAR_USED _ps_exp_hi = _mm_set_ps1(88.3762626647949f); + static const __m128 GLM_VAR_USED _ps_exp_lo = _mm_set_ps1(-88.3762626647949f); + static const __m128 GLM_VAR_USED _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f); + static const __m128 GLM_VAR_USED _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f); + static const __m128 GLM_VAR_USED _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f); + static const __m128 GLM_VAR_USED _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f); + static const __m128 GLM_VAR_USED _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f); + static const __m128 GLM_VAR_USED _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f); + static const __m128 GLM_VAR_USED _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f); + static const __m128 GLM_VAR_USED _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f); + static const __m128 GLM_VAR_USED _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f); + static const __m128 GLM_VAR_USED _ps_exp2_hi = _mm_set_ps1(127.4999961853f); + static const __m128 GLM_VAR_USED _ps_exp2_lo = _mm_set_ps1(-127.4999961853f); + static const __m128 GLM_VAR_USED _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f); + static const __m128 GLM_VAR_USED _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f); + static const __m128 GLM_VAR_USED _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f); + static const __m128 GLM_VAR_USED _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f); + static const __m128 GLM_VAR_USED _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f); + static const __m128 GLM_VAR_USED _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f); + static const __m128 GLM_VAR_USED _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f); + static const __m128 GLM_VAR_USED _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f); + static const __m128 GLM_VAR_USED _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f); + static const __m128 GLM_VAR_USED _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f); + static const __m128 GLM_VAR_USED _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f); + static const __m128 GLM_VAR_USED _ps_log_c0 = _mm_set_ps1(0.693147180559945f); + static const __m128 GLM_VAR_USED _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f); GLM_FUNC_QUALIFIER __m128 sse_abs_ps(__m128 x) { @@ -252,14 +252,18 @@ GLM_FUNC_QUALIFIER __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x) return mul2; } +/// \todo GLM_FUNC_QUALIFIER __m128 sse_nan_ps(__m128 x) { - + __m128 empty; + return empty; } +/// \todo GLM_FUNC_QUALIFIER __m128 sse_inf_ps(__m128 x) { - + __m128 empty; + return empty; } // SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration diff --git a/glm/core/intrinsic_matrix.inl b/glm/core/intrinsic_matrix.inl index 1246a744..c3ec68a7 100644 --- a/glm/core/intrinsic_matrix.inl +++ b/glm/core/intrinsic_matrix.inl @@ -10,8 +10,8 @@ namespace glm{ namespace detail{ -static const __m128 _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f); -static const __m128 _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f); +static const __m128 GLM_VAR_USED _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f); +static const __m128 GLM_VAR_USED _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f); template GLM_FUNC_QUALIFIER matType sse_comp_mul_ps @@ -968,7 +968,7 @@ GLM_FUNC_QUALIFIER void sse_inverse_fast_ps(__m128 const in[4], __m128 out[4]) out[2] = _mm_mul_ps(Inv2, Rcp0); out[3] = _mm_mul_ps(Inv3, Rcp0); } - +/* GLM_FUNC_QUALIFIER void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) { float a = glm::radians(Angle); @@ -1038,7 +1038,7 @@ GLM_FUNC_QUALIFIER void sse_rotate_ps(__m128 const in[4], float Angle, float con //return Result; sse_mul_ps(in, Result, out); } - +*/ GLM_FUNC_QUALIFIER void sse_outer_ps(__m128 const & c, __m128 const & r, __m128 out[4]) { out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); diff --git a/glm/core/setup.hpp b/glm/core/setup.hpp index 70ad1576..28a89b52 100644 --- a/glm/core/setup.hpp +++ b/glm/core/setup.hpp @@ -441,6 +441,12 @@ # define GLM_CUDA_FUNC_DECL #endif +#if GLM_COMPILER & GLM_COMPILER_GCC +#define GLM_VAR_USED __attribute__ ((unused)) +#else +#define GLM_VAR_USED +#endif + #if(defined(GLM_FORCE_INLINE)) # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005)) # define GLM_INLINE __forceinline From d373c85b676bf28e721f3b30fd3fb0b1ceadd0d2 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 1 Jun 2011 19:01:44 +0100 Subject: [PATCH 4/7] Updated documentation for 0.9.2.2 release --- doc/src/data.xml | 62 ++++++++++++++++++++++++++++++++++++++++-------- readme.txt | 23 +++++++++++------- 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/doc/src/data.xml b/doc/src/data.xml index e0ba3945..fdfaa64a 100644 --- a/doc/src/data.xml +++ b/doc/src/data.xml @@ -3,16 +3,17 @@
- - - - - - - - - - + + + + + + + + + + + @@ -64,6 +65,7 @@
+ @@ -152,6 +154,46 @@ + + + The main improvement of this version comes from the extented number of matrix contructors so that a programmer can used diffent scalar types for each parameter. + + + + #include + <glm/glm.hpp> + + + + + + // Create an identity matrix + + + glm::mat3 m( + + + 1, 0.0, 0, + + + 0.0, 1.0, 0.0f, + + + 0, 0.0, 1.0f); + + + + The quaternion implementation has been updated as well, fixing the various slerp implementation flavour (mix, shortMix and fastMix) and providing more completeness: Added interaction with GLM_GTX_epsilon and missing lowp_quat, mediump_quat and highp_quat but also none square matrix equivalents. + + + Finally, some efforts have been put to remove warnings across all supported compilers. + + + GLM 0.9.2.2 (zip) + GLM 0.9.2.2 (7z) + Submit a bug report + + GLM 0.9.2.1 significantly improves compiler detection which allows CUDA to be automatically recognized when GLM is used inside a CUDA kernel. diff --git a/readme.txt b/readme.txt index 50157d1a..33f5726a 100644 --- a/readme.txt +++ b/readme.txt @@ -37,7 +37,14 @@ More informations in GLM manual: http://glm.g-truc.net/glm-0.9.2.pdf ================================================================================ -GLM 0.9.2.1: 2010-05-24 +GLM 0.9.2.2: 2011-06-XX +-------------------------------------------------------------------------------- +- Expend matrix constructors flexibility +- Improved quaternion implementation +- Fixed many warnings across platforms and compilers + +================================================================================ +GLM 0.9.2.1: 2011-05-24 -------------------------------------------------------------------------------- - Automatically detect CUDA support - Improved compiler detection @@ -46,7 +53,7 @@ GLM 0.9.2.1: 2010-05-24 - Fixed and tested GLM_GTX_rotate_vector ================================================================================ -GLM 0.9.2.0: 2010-05-09 +GLM 0.9.2.0: 2011-05-09 -------------------------------------------------------------------------------- - Added CUDA support - Added CTest test suite @@ -56,27 +63,27 @@ GLM 0.9.2.0: 2010-05-09 - Updated quaternion slerp interpolation ================================================================================ -GLM 0.9.1.3: 2010-05-07 +GLM 0.9.1.3: 2011-05-07 -------------------------------------------------------------------------------- - Fixed bugs ================================================================================ -GLM 0.9.1.2: 2010-04-15 +GLM 0.9.1.2: 2011-04-15 -------------------------------------------------------------------------------- - Fixed bugs ================================================================================ -GLM 0.9.1.1: 2010-03-17 +GLM 0.9.1.1: 2011-03-17 -------------------------------------------------------------------------------- - Fixed bugs ================================================================================ -GLM 0.9.1.0: 2010-03-03 +GLM 0.9.1.0: 2011-03-03 -------------------------------------------------------------------------------- - Fixed bugs ================================================================================ -GLM 0.9.1.B: 2010-02-13 +GLM 0.9.1.B: 2011-02-13 -------------------------------------------------------------------------------- - Updated API documentation - Improved SIMD implementation @@ -89,7 +96,7 @@ GLM 0.9.0.8: 2011-02-13 - Clarify that GLM is a header only library. ================================================================================ -GLM 0.9.1.A: 2010-01-31 +GLM 0.9.1.A: 2011-01-31 -------------------------------------------------------------------------------- - Added SIMD support - Added new swizzle functions From f9dd517d0c08ab99b39be295d3775fcc50ad264b Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 1 Jun 2011 20:17:23 +0100 Subject: [PATCH 5/7] Added implementation of missing matrix constructor --- glm/core/type_mat2x2.inl | 14 +++++------ glm/core/type_mat2x3.inl | 44 ++++++++++++++++++++++++++++++++++- glm/core/type_mat2x4.inl | 44 ++++++++++++++++++++++++++++++++++- glm/core/type_mat3x2.inl | 50 +++++++++++++++++++++++++++++++++++++++- glm/core/type_mat3x3.inl | 46 ++++++++++++++++++++++++++++++++++++ glm/core/type_mat3x4.inl | 46 ++++++++++++++++++++++++++++++++++++ glm/core/type_mat4x2.inl | 48 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 282 insertions(+), 10 deletions(-) diff --git a/glm/core/type_mat2x2.inl b/glm/core/type_mat2x2.inl index 77638dbb..f7fced77 100644 --- a/glm/core/type_mat2x2.inl +++ b/glm/core/type_mat2x2.inl @@ -122,11 +122,11 @@ namespace detail } template - template + template GLM_FUNC_DECL tmat2x2::tmat2x2 ( - U const & x1, V const & y1, - M const & x2, N const & y2 + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2 ) { this->value[0] = col_type(value_type(x1), value_type(y1)); @@ -134,11 +134,11 @@ namespace detail } template - template + template GLM_FUNC_DECL tmat2x2::tmat2x2 ( - tvec2 const & v1, - tvec2 const & v2 + tvec2 const & v1, + tvec2 const & v2 ) { this->value[0] = col_type(v1); @@ -146,7 +146,7 @@ namespace detail } ////////////////////////////////////////////////////////////// - // mat2x2 conversions + // mat2x2 matrix conversions template template diff --git a/glm/core/type_mat2x3.inl b/glm/core/type_mat2x3.inl index 83e8b2e3..79d9c423 100644 --- a/glm/core/type_mat2x3.inl +++ b/glm/core/type_mat2x3.inl @@ -106,7 +106,49 @@ namespace detail this->value[1] = v1; } - // Conversion + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat2x3::tmat2x3 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec3(value_type(s), Zero, Zero); + this->value[1] = tvec3(Zero, value_type(s), Zero); + } + + template + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2> + GLM_FUNC_DECL tmat2x3::tmat2x3 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2)); + } + + template + template + GLM_FUNC_DECL tmat2x3::tmat2x3 + ( + tvec3 const & v1, + tvec3 const & v2 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + } + + ////////////////////////////////////// + // Matrix conversions + template template GLM_FUNC_QUALIFIER tmat2x3::tmat2x3 diff --git a/glm/core/type_mat2x4.inl b/glm/core/type_mat2x4.inl index b19193f6..0a644d99 100644 --- a/glm/core/type_mat2x4.inl +++ b/glm/core/type_mat2x4.inl @@ -109,7 +109,49 @@ namespace detail this->value[1] = v1; } - // Conversion + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat2x4::tmat2x4 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec4(value_type(s), Zero, Zero, Zero); + this->value[1] = tvec4(Zero, value_type(s), Zero, Zero); + } + + template + template < + typename X1, typename Y1, typename Z1, typename W1 + typename X2, typename Y2, typename Z2, typename W2> + GLM_FUNC_DECL tmat2x4::tmat2x4 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2)); + } + + template + template + GLM_FUNC_DECL tmat2x4::tmat2x4 + ( + tvec4 const & v1, + tvec4 const & v2 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + } + + ////////////////////////////////////// + // Matrix conversions + template template GLM_FUNC_QUALIFIER tmat2x4::tmat2x4 diff --git a/glm/core/type_mat3x2.inl b/glm/core/type_mat3x2.inl index 5fddb4c1..4138208f 100644 --- a/glm/core/type_mat3x2.inl +++ b/glm/core/type_mat3x2.inl @@ -113,7 +113,55 @@ namespace detail this->value[2] = v2; } - // Conversion + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat3x2::tmat3x2 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec2(value_type(s), Zero); + this->value[1] = tvec2(Zero, value_type(s)); + this->value[2] = tvec2(Zero); + } + + template + template < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3> + GLM_FUNC_DECL tmat3x2::tmat3x2 + ( + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1)); + this->value[1] = col_type(value_type(x2), value_type(y2)); + this->value[2] = col_type(value_type(x3), value_type(y3)); + } + + template + template + GLM_FUNC_DECL tmat3x2::tmat3x2 + ( + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + } + + ////////////////////////////////////////////////////////////// + // mat3x2 matrix conversions + template template GLM_FUNC_QUALIFIER tmat3x2::tmat3x2 diff --git a/glm/core/type_mat3x3.inl b/glm/core/type_mat3x3.inl index 667f2235..3aeeaeb9 100644 --- a/glm/core/type_mat3x3.inl +++ b/glm/core/type_mat3x3.inl @@ -116,6 +116,52 @@ namespace detail this->value[2] = v2; } + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat3x3::tmat3x3 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec3(value_type(s), Zero, Zero); + this->value[1] = tvec3(Zero, value_type(s), Zero); + this->value[2] = tvec3(Zero, Zero, value_type(s)); + } + + template + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3> + GLM_FUNC_DECL tmat3x3::tmat3x3 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2)); + this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3)); + } + + template + template + GLM_FUNC_DECL tmat3x3::tmat3x3 + ( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + } + ////////////////////////////////////////////////////////////// // Conversions diff --git a/glm/core/type_mat3x4.inl b/glm/core/type_mat3x4.inl index 1a0b8499..8502dacd 100644 --- a/glm/core/type_mat3x4.inl +++ b/glm/core/type_mat3x4.inl @@ -114,6 +114,52 @@ namespace detail this->value[2] = v2; } + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat3x4::tmat3x4 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec4(value_type(s), Zero, Zero, Zero); + this->value[1] = tvec4(Zero, value_type(s), Zero, Zero); + this->value[2] = tvec4(Zero, Zero, value_type(s), Zero); + } + + template + template < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3> + GLM_FUNC_DECL tmat3x4::tmat3x4 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2)); + this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3)); + } + + template + template + GLM_FUNC_DECL tmat3x4::tmat3x4 + ( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + } + // Conversion template template diff --git a/glm/core/type_mat4x2.inl b/glm/core/type_mat4x2.inl index cb30a98c..60c54df9 100644 --- a/glm/core/type_mat4x2.inl +++ b/glm/core/type_mat4x2.inl @@ -123,6 +123,54 @@ namespace detail this->value[3] = v3; } + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat4x2::tmat4x2 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec4(value_type(s), Zero); + this->value[1] = tvec4(Zero, value_type(s)); + this->value[2] = tvec4(Zero, Zero); + this->value[3] = tvec4(Zero, Zero); + } + + template + template < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3, + typename X4, typename Y4> + GLM_FUNC_DECL tmat4x2::tmat4x2 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2)); + this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3)); + } + + template + template + GLM_FUNC_DECL tmat4x2::tmat4x2 + ( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + } + // Conversion template template From a0256b5946cd5ebfa3c9762bc7f55f8c6a0845f1 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 2 Jun 2011 09:58:20 +0100 Subject: [PATCH 6/7] Fixed build on Visual C++, completed extended matrix cast #105 --- glm/core/intrinsic_common.inl | 12 +----- glm/core/type_mat2x4.hpp | 8 ++-- glm/core/type_mat2x4.inl | 4 +- glm/core/type_mat3x2.inl | 2 +- glm/core/type_mat4x2.inl | 32 ++++++++------ glm/core/type_mat4x3.inl | 54 ++++++++++++++++++++++- glm/core/type_mat4x4.hpp | 8 ++-- glm/core/type_mat4x4.inl | 81 +++++++++++++++++++++++++++++++++++ 8 files changed, 164 insertions(+), 37 deletions(-) diff --git a/glm/core/intrinsic_common.inl b/glm/core/intrinsic_common.inl index b4cccd35..8080bb35 100644 --- a/glm/core/intrinsic_common.inl +++ b/glm/core/intrinsic_common.inl @@ -205,19 +205,11 @@ GLM_FUNC_QUALIFIER __m128 sse_mod_ps(__m128 x, __m128 y) } /// TODO -<<<<<<< HEAD -/* GLM_FUNC_QUALIFIER __m128 sse_modf_ps(__m128 x, __m128i & i) { - return __m128(); + __m128 empty; + return empty; } -*/ -======= -//GLM_FUNC_QUALIFIER __m128 sse_modf_ps(__m128 x, __m128i & i) -//{ -// return __m128(); -//} ->>>>>>> d373c85b676bf28e721f3b30fd3fb0b1ceadd0d2 //GLM_FUNC_QUALIFIER __m128 _mm_min_ps(__m128 x, __m128 y) diff --git a/glm/core/type_mat2x4.hpp b/glm/core/type_mat2x4.hpp index 8eee4105..cf21c6f8 100644 --- a/glm/core/type_mat2x4.hpp +++ b/glm/core/type_mat2x4.hpp @@ -77,14 +77,12 @@ namespace glm GLM_FUNC_DECL explicit tmat2x4( U const & x); - template - < + template < typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2 - > + typename X2, typename Y2, typename Z2, typename W2> GLM_FUNC_DECL explicit tmat2x4( X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,); + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2); template GLM_FUNC_DECL explicit tmat2x4( diff --git a/glm/core/type_mat2x4.inl b/glm/core/type_mat2x4.inl index 0a644d99..2c12df43 100644 --- a/glm/core/type_mat2x4.inl +++ b/glm/core/type_mat2x4.inl @@ -125,12 +125,12 @@ namespace detail template template < - typename X1, typename Y1, typename Z1, typename W1 + typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> GLM_FUNC_DECL tmat2x4::tmat2x4 ( X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2 ) { this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); diff --git a/glm/core/type_mat3x2.inl b/glm/core/type_mat3x2.inl index 4138208f..1c45e58a 100644 --- a/glm/core/type_mat3x2.inl +++ b/glm/core/type_mat3x2.inl @@ -146,7 +146,7 @@ namespace detail } template - template + template GLM_FUNC_DECL tmat3x2::tmat3x2 ( tvec2 const & v1, diff --git a/glm/core/type_mat4x2.inl b/glm/core/type_mat4x2.inl index 60c54df9..4cd8b063 100644 --- a/glm/core/type_mat4x2.inl +++ b/glm/core/type_mat4x2.inl @@ -133,10 +133,10 @@ namespace detail ) { value_type const Zero(0); - this->value[0] = tvec4(value_type(s), Zero); - this->value[1] = tvec4(Zero, value_type(s)); - this->value[2] = tvec4(Zero, Zero); - this->value[3] = tvec4(Zero, Zero); + this->value[0] = tvec2(value_type(s), Zero); + this->value[1] = tvec2(Zero, value_type(s)); + this->value[2] = tvec2(Zero, Zero); + this->value[3] = tvec2(Zero, Zero); } template @@ -147,28 +147,32 @@ namespace detail typename X4, typename Y4> GLM_FUNC_DECL tmat4x2::tmat4x2 ( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, - X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3 + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3, + X4 const & x4, Y4 const & y4 ) { - this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); - this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2)); - this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3)); + this->value[0] = col_type(value_type(x1), value_type(y1)); + this->value[1] = col_type(value_type(x2), value_type(y2)); + this->value[2] = col_type(value_type(x3), value_type(y3)); + this->value[3] = col_type(value_type(x4), value_type(y4)); } template - template + template GLM_FUNC_DECL tmat4x2::tmat4x2 ( - tvec4 const & v1, - tvec4 const & v2, - tvec4 const & v3 + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3, + tvec2 const & v4 ) { this->value[0] = col_type(v1); this->value[1] = col_type(v2); this->value[2] = col_type(v3); + this->value[3] = col_type(v4); } // Conversion diff --git a/glm/core/type_mat4x3.inl b/glm/core/type_mat4x3.inl index b882af27..87e3dcea 100644 --- a/glm/core/type_mat4x3.inl +++ b/glm/core/type_mat4x3.inl @@ -123,8 +123,60 @@ namespace detail this->value[3] = v3; } + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat4x3::tmat4x3 + ( + U const & s + ) + { + value_type const Zero(0); + this->value[0] = tvec3(value_type(s), Zero, Zero); + this->value[1] = tvec3(Zero, value_type(s), Zero); + this->value[2] = tvec3(Zero, Zero, value_type(s)); + this->value[3] = tvec3(Zero, Zero, Zero); + } + + template + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3, + typename X4, typename Y4, typename Z4> + GLM_FUNC_DECL tmat4x3::tmat4x3 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3, + X4 const & x4, Y4 const & y4, Z4 const & z4 + ) + { + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2)); + this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3)); + this->value[3] = col_type(value_type(x4), value_type(y4), value_type(z4)); + } + + template + template + GLM_FUNC_DECL tmat4x3::tmat4x3 + ( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3, + tvec3 const & v4 + ) + { + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + this->value[3] = col_type(v4); + } + ////////////////////////////////////////////////////////////// - // Conversions + // Matrix conversions template template diff --git a/glm/core/type_mat4x4.hpp b/glm/core/type_mat4x4.hpp index a470f34a..4ff29db9 100644 --- a/glm/core/type_mat4x4.hpp +++ b/glm/core/type_mat4x4.hpp @@ -86,10 +86,10 @@ namespace glm U const & x); template < - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3, + typename X4, typename Y4, typename Z4, typename W4> GLM_FUNC_DECL explicit tmat4x4( X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, diff --git a/glm/core/type_mat4x4.inl b/glm/core/type_mat4x4.inl index 8df4b062..765491b7 100644 --- a/glm/core/type_mat4x4.inl +++ b/glm/core/type_mat4x4.inl @@ -136,6 +136,87 @@ namespace detail this->value[3] = col_type(m[3]); } + ////////////////////////////////////// + // Convertion constructors + template + template + GLM_FUNC_DECL tmat4x4::tmat4x4 + ( + U const & s + ) + { + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types"); + + value_type const Zero(0); + this->value[0] = tvec4(value_type(s), Zero, Zero, Zero); + this->value[1] = tvec4(Zero, value_type(s), Zero, Zero); + this->value[2] = tvec4(Zero, Zero, value_type(s), Zero); + this->value[3] = tvec4(Zero, Zero, Zero, value_type(s)); + } + + template + template < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3, + typename X4, typename Y4, typename Z4, typename W4> + GLM_FUNC_DECL tmat4x4::tmat4x4 + ( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, + X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); + + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); + + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); + + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); + + this->value[0] = col_type(value_type(x1), value_type(y1), value_type(z1), value_type(w1)); + this->value[1] = col_type(value_type(x2), value_type(y2), value_type(z2), value_type(w2)); + this->value[2] = col_type(value_type(x3), value_type(y3), value_type(z3), value_type(w3)); + this->value[3] = col_type(value_type(x4), value_type(y4), value_type(z4), value_type(w4)); + } + + template + template + GLM_FUNC_DECL tmat4x4::tmat4x4 + ( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3, + tvec4 const & v4 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); + GLM_STATIC_ASSERT(detail::type::is_float || std::numeric_limits::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); + + this->value[0] = col_type(v1); + this->value[1] = col_type(v2); + this->value[2] = col_type(v3); + this->value[3] = col_type(v4); + } + + ////////////////////////////////////// + // Matrix convertion constructors template GLM_FUNC_QUALIFIER tmat4x4::tmat4x4 ( From 40f3e519a80e6d2ab27afc80c00c2182880f7a30 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 2 Jun 2011 10:08:44 +0100 Subject: [PATCH 7/7] Fixed build on MinGW --- glm/gtx/quaternion.inl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/glm/gtx/quaternion.inl b/glm/gtx/quaternion.inl index b63e6c0f..910cdd78 100644 --- a/glm/gtx/quaternion.inl +++ b/glm/gtx/quaternion.inl @@ -256,28 +256,28 @@ namespace quaternion if(a <= typename detail::tquat::value_type(0)) return x; if(a >= typename detail::tquat::value_type(1)) return y; - detail::tquat::value_type fCos = dot(x, y); + T fCos = dot(x, y); detail::tquat y2(y); //BUG!!! tquat y2; - if(fCos < typename detail::tquat::value_type(0)) + if(fCos < T(0)) { y2 = -y; fCos = -fCos; } //if(fCos > 1.0f) // problem - detail::tquat::value_type k0, k1; - if(fCos > typename detail::tquat::value_type(0.9999)) + T k0, k1; + if(fCos > T(0.9999)) { - k0 = typename detail::tquat::value_type(1) - a; - k1 = typename detail::tquat::value_type(0) + a; //BUG!!! 1.0f + a; + k0 = T(1) - a; + k1 = T(0) + a; //BUG!!! 1.0f + a; } else { - typename detail::tquat::value_type fSin = sqrt(T(1) - fCos * fCos); - typename detail::tquat::value_type fAngle = atan(fSin, fCos); - typename detail::tquat::value_type fOneOverSin = T(1) / fSin; - k0 = sin((typename detail::tquat::value_type(1) - a) * fAngle) * fOneOverSin; - k1 = sin((typename detail::tquat::value_type(0) + a) * fAngle) * fOneOverSin; + T fSin = sqrt(T(1) - fCos * fCos); + T fAngle = atan(fSin, fCos); + T fOneOverSin = T(1) / fSin; + k0 = sin((T(1) - a) * fAngle) * fOneOverSin; + k1 = sin((T(0) + a) * fAngle) * fOneOverSin; } return detail::tquat( @@ -295,7 +295,7 @@ namespace quaternion T const & a ) { - return glm::normalize(x * (detail::tquat::value_type(1) - a) + (y * a)); + return glm::normalize(x * (T(1) - a) + (y * a)); } }//namespace quaternion