Browse Source

Merge branch '0.9.2' of ssh://ogl-math.git.sourceforge.net/gitroot/ogl-math/ogl-math into 0.9.2

Christophe Riccio 14 years ago
parent
commit
74e22c481e

+ 12 - 9
CMakeLists.txt

@@ -5,15 +5,18 @@ project(glm)
 enable_testing()
 
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-#add_definitions(/Za)
-#add_definitions(-pedantic)
-#add_definitions(-S)
-#add_definitions(-s)
-add_definitions(-msse2)
-#add_definitions(-m32)
-#add_definitions(-mfpmath=387)
-#add_definitions(-ffast-math)
-#add_definitions(-O3)
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+	#add_definitions(/Za)
+	#add_definitions(-pedantic)
+	#add_definitions(-S)
+	#add_definitions(-s)
+	add_definitions(-msse2)
+	#add_definitions(-m32)
+	#add_definitions(-mfpmath=387)
+	#add_definitions(-ffast-math)
+	#add_definitions(-O3)
+endif()
 
 include_directories(".")
 

+ 42 - 3
glm/core/type_mat2x2.hpp

@@ -56,10 +56,12 @@ namespace glm
 			GLM_FUNC_DECL tmat2x2<T> _inverse() const;
 
 		private:
+			//////////////////////////////////////
 			// Data 
 			col_type value[2];
 
 		public:
+			//////////////////////////////////////
 			// Constructors
 			GLM_FUNC_DECL tmat2x2();
 			GLM_FUNC_DECL tmat2x2(
@@ -76,6 +78,23 @@ namespace glm
 				col_type const & v1, 
 				col_type const & v2);
 
+			//////////////////////////////////////
+			// Convertion constructors
+			template <typename U> 
+			GLM_FUNC_DECL explicit tmat2x2(
+				U const & x);
+			
+			template <typename U, typename V, typename M, typename N> 
+			GLM_FUNC_DECL explicit tmat2x2(
+				U const & x1, V const & y1, 
+				M const & x2, N const & y2);
+			
+			//template <typename U, typename V, typename M, typename N> 
+			//GLM_FUNC_DECL explicit tmat2x2(
+			//	tvec2<U, V> const & v1, 
+			//	tvec2<M, N> const & v2);
+
+			//////////////////////////////////////
 			// Conversions
 			template <typename U> 
 			GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U> const & m);
@@ -224,17 +243,37 @@ namespace glm
 	{
 		//! 2 columns of 2 components matrix of low precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat2x2<lowp_float>		lowp_mat2;
+
+		//! 2 columns of 2 components matrix of medium precision floating-point numbers. 
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat2x2<mediump_float>	mediump_mat2;
+
+		//! 2 columns of 2 components matrix of high precision floating-point numbers. 
+		//! There is no guarantee on the actual precision. 
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat2x2<highp_float>	highp_mat2;
+
+		//! 2 columns of 2 components matrix of low precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat2x2<lowp_float>		lowp_mat2x2;
+
 		//! 2 columns of 2 components matrix of medium precision floating-point numbers. 
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat2x2<mediump_float>	mediump_mat2x2;
+
 		//! 2 columns of 2 components matrix of high precision floating-point numbers. 
 		//! There is no guarantee on the actual precision. 
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat2x2<highp_float>	highp_mat2x2;
 	}

+ 40 - 2
glm/core/type_mat2x2.inl

@@ -107,8 +107,46 @@ namespace detail
         this->value[1] = v1;
     }
 
+	//////////////////////////////////////
+	// Convertion constructors
+	template <typename T> 
+	template <typename U> 
+	GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+	(
+		U const & s
+	)
+	{
+		value_type const Zero(0);
+        this->value[0] = tvec2<T>(value_type(s), Zero);
+        this->value[1] = tvec2<T>(Zero, value_type(s));
+	}
+	
+	template <typename T> 
+	template <typename U, typename V, typename M, typename N> 
+	GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+	(
+		U const & x1, V const & y1, 
+		M const & x2, N const & y2
+	)		
+	{
+        this->value[0] = col_type(value_type(x1), value_type(y1));
+        this->value[1] = col_type(value_type(x2), value_type(y2));
+	}
+	
+	//template <typename T> 
+	//template <typename U, typename V, typename M, typename N> 
+	//GLM_FUNC_DECL tmat2x2<T>::tmat2x2
+	//(
+	//	tvec2<U, V> const & v1, 
+	//	tvec2<M, N> const & v2
+	//)		
+	//{
+ //       this->value[0] = col_type(v1);
+ //       this->value[1] = col_type(v2);
+	//}
+
     //////////////////////////////////////////////////////////////
-    // mat2 conversions
+    // mat2x2 conversions
 
     template <typename T> 
     template <typename U> 
@@ -215,7 +253,7 @@ namespace detail
     }
 
     //////////////////////////////////////////////////////////////
-    // mat3 operators
+    // mat2x2 operators
 
     // This function shouldn't required but it seems that VC7.1 have an optimisation bug if this operator wasn't declared
     template <typename T> 

+ 21 - 3
glm/core/type_mat3x3.hpp

@@ -223,17 +223,35 @@ namespace glm
 	{
 		//! 3 columns of 3 components matrix of low precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat3x3<lowp_float>		lowp_mat3;
+		//! 3 columns of 3 components matrix of medium precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat3x3<mediump_float>	mediump_mat3;
+		//! 3 columns of 3 components matrix of high precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat3x3<highp_float>	highp_mat3;
+
+		//! 3 columns of 3 components matrix of low precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat3x3<lowp_float>		lowp_mat3x3;
+
 		//! 3 columns of 3 components matrix of medium precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat3x3<mediump_float>	mediump_mat3x3;
+
 		//! 3 columns of 3 components matrix of high precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat3x3<highp_float>	highp_mat3x3;
 	}

+ 23 - 3
glm/core/type_mat4x4.hpp

@@ -223,17 +223,37 @@ namespace glm
 	{
 		//! 4 columns of 4 components matrix of low precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat4x4<lowp_float>		lowp_mat4;
+
+		//! 4 columns of 4 components matrix of medium precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat4x4<mediump_float>	mediump_mat4;
+
+		//! 4 columns of 4 components matrix of high precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
+		//! \ingroup core_precision
+		typedef detail::tmat4x4<highp_float>	highp_mat4;
+
+		//! 4 columns of 4 components matrix of low precision floating-point numbers.
+		//! There is no guarantee on the actual precision.
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat4x4<lowp_float>		lowp_mat4x4;
+
 		//! 4 columns of 4 components matrix of medium precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat4x4<mediump_float>	mediump_mat4x4;
+
 		//! 4 columns of 4 components matrix of high precision floating-point numbers.
 		//! There is no guarantee on the actual precision.
-		//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
+		//! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers
 		//! \ingroup core_precision
 		typedef detail::tmat4x4<highp_float>	highp_mat4x4;
 	}

+ 1 - 1
glm/core/type_vec2.hpp

@@ -93,7 +93,7 @@ namespace glm
 			tvec2(tref2<T> const & r);
 
 			//////////////////////////////////////
-			// Convertion scalar constructors
+			// Convertion constructors
 
 			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 			template <typename U> 

+ 11 - 0
glm/gtc/quaternion.hpp

@@ -221,6 +221,17 @@ namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and fun
 	//! From GLM_GTC_quaternion extension.
 	typedef detail::tquat<double>	dquat;
 
+	//! Quaternion of low precision floating-point numbers.
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<lowp_float>		lowp_quat;
+
+	//! Quaternion of medium precision floating-point numbers. 
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<mediump_float>	mediump_quat;
+
+	//! Quaternion of high precision floating-point numbers. 
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<highp_float>		highp_quat;
 	///@}
 
 } //namespace quaternion

+ 2 - 0
test/core/CMakeLists.txt

@@ -23,6 +23,8 @@ glmCreateTestGTC(core_func_noise)
 glmCreateTestGTC(core_func_packing)
 glmCreateTestGTC(core_func_trigonometric)
 glmCreateTestGTC(core_func_vector_relational)
+glmCreateTestGTC(core_setup_message)
+glmCreateTestGTC(core_setup_precision)
 
 
 

+ 30 - 0
test/core/core_setup_message.cpp

@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-05-31
+// Updated : 2011-05-31
+// Licence : This source is under MIT License
+// File    : test/core/setup_message.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#define GLM_MESSAGES
+#include <glm/glm.hpp>
+
+static int test_operators()
+{
+	glm::vec3 A(1.0f);
+	glm::vec3 B(1.0f);
+	bool R = A != B;
+	bool S = A == B;
+
+	return (S && !R) ? 0 : 1;
+}
+
+int main()
+{
+	int Error = 0;
+
+	Error += test_operators();
+	
+	return Error;
+}

+ 53 - 0
test/core/core_setup_precision.cpp

@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-05-31
+// Updated : 2011-05-31
+// Licence : This source is under MIT License
+// File    : test/core/setup_precision_highp.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#define GLM_PRECISION_HIGHP_FLOAT
+#include <glm/glm.hpp>
+
+static int test_mat()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::mat2) == sizeof(glm::highp_mat2) ? 0 : 1;
+	Error += sizeof(glm::mat3) == sizeof(glm::highp_mat3) ? 0 : 1;
+	Error += sizeof(glm::mat4) == sizeof(glm::highp_mat4) ? 0 : 1;
+
+	Error += sizeof(glm::mat2x2) == sizeof(glm::highp_mat2x2) ? 0 : 1;
+	Error += sizeof(glm::mat2x3) == sizeof(glm::highp_mat2x3) ? 0 : 1;
+	Error += sizeof(glm::mat2x4) == sizeof(glm::highp_mat2x4) ? 0 : 1;
+	Error += sizeof(glm::mat3x2) == sizeof(glm::highp_mat3x2) ? 0 : 1;
+	Error += sizeof(glm::mat3x3) == sizeof(glm::highp_mat3x3) ? 0 : 1;
+	Error += sizeof(glm::mat3x4) == sizeof(glm::highp_mat3x4) ? 0 : 1;
+	Error += sizeof(glm::mat4x2) == sizeof(glm::highp_mat4x2) ? 0 : 1;
+	Error += sizeof(glm::mat4x3) == sizeof(glm::highp_mat4x3) ? 0 : 1;
+	Error += sizeof(glm::mat4x4) == sizeof(glm::highp_mat4x4) ? 0 : 1;
+
+	return Error;
+}
+
+static int test_vec()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::vec2) == sizeof(glm::highp_vec2) ? 0 : 1;
+	Error += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;
+	Error += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;
+
+	return Error;
+}
+
+int main()
+{
+	int Error = 0;
+
+	Error += test_mat();
+	Error += test_vec();
+	
+	return Error;
+}

+ 0 - 1
test/core/core_type_mat4x4.cpp

@@ -7,7 +7,6 @@
 // File    : test/core/type_mat4x4.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #define GLM_PRECISION_HIGHP_FLOAT
 #include <glm/glm.hpp>
 #include <cstdio>

+ 79 - 7
test/gtc/gtc_half_float.cpp

@@ -1,19 +1,91 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-09-16
-// Updated : 2010-09-16
+// Created : 2011-05-32
+// Updated : 2011-05-32
 // Licence : This source is under MIT licence
-// File    : test/gtc/matrix_transform.cpp
+// File    : test/gtc/half_float.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
-#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/half_float.hpp>
+
+int test_half_precision_scalar()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::half) == 2 ? 0 : 1;
+
+	return Error;
+}
+
+int test_half_precision_vec()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::hvec2) == 4 ? 0 : 1;
+	Error += sizeof(glm::hvec3) == 6 ? 0 : 1;
+	Error += sizeof(glm::hvec4) == 8 ? 0 : 1;
+    
+    return Error;
+}
+
+int test_half_precision_mat()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::hmat2) == 8 ? 0 : 1;
+	Error += sizeof(glm::hmat3) == 18 ? 0 : 1;
+	Error += sizeof(glm::hmat4) == 32 ? 0 : 1;
+
+	Error += sizeof(glm::hmat2x2) == 8 ? 0 : 1;
+	Error += sizeof(glm::hmat2x3) == 12 ? 0 : 1;
+	Error += sizeof(glm::hmat2x4) == 16 ? 0 : 1;
+	Error += sizeof(glm::hmat3x2) == 12 ? 0 : 1;
+	Error += sizeof(glm::hmat3x3) == 18 ? 0 : 1;
+	Error += sizeof(glm::hmat3x4) == 24 ? 0 : 1;
+	Error += sizeof(glm::hmat4x2) == 16 ? 0 : 1;
+	Error += sizeof(glm::hmat4x3) == 24 ? 0 : 1;
+	Error += sizeof(glm::hmat4x4) == 32 ? 0 : 1;
+
+    return Error;
+}
+
+int test_half_ctor_mat2x2()
+{
+	int Error = 0;
+
+	{
+		glm::hvec2 A(1, 2);
+		glm::hvec2 B(3, 4);
+		glm::hmat2 C(A, B);//, 2.0f, 3.0f, 4.0f);
+		glm::hmat2 D(1, 2, 3, 4);
+
+		Error += C[0] == D[0] ? 0 : 1;
+		Error += C[1] == D[1] ? 0 : 1;
+	}
+
+	{
+		glm::hvec2 A(1, 2.0);
+		glm::hvec2 B(3, 4.0);
+		glm::hmat2 C(A, B);//, 2.0f, 3.0f, 4.0f);
+		glm::hmat2 D(1, 2.0, 3u, 4.0f);
+
+		Error += C[0] == D[0] ? 0 : 1;
+		Error += C[1] == D[1] ? 0 : 1;
+	}
+
+    return Error;
+}
 
 int main()
 {
-	int Failed = 0;
+	int Error = 0;
+
+	Error += test_half_ctor_mat2x2();
+	Error += test_half_precision_scalar();
+	Error += test_half_precision_vec();
+	Error += test_half_precision_mat();
 
-	return Failed;
+	return Error;
 }

+ 0 - 1
test/gtc/gtc_matrix_access.cpp

@@ -7,7 +7,6 @@
 // File    : test/gtc/matrix_access.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_access.hpp>
 

+ 0 - 1
test/gtc/gtc_matrix_integer.cpp

@@ -7,7 +7,6 @@
 // File    : test/gtc/matrix_integer.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_integer.hpp>
 

+ 0 - 1
test/gtc/gtc_matrix_transform.cpp

@@ -7,7 +7,6 @@
 // File    : test/gtc/matrix_transform.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_transform.hpp>
 

+ 11 - 0
test/gtc/gtc_quaternion.cpp

@@ -11,6 +11,16 @@
 #include <glm/gtc/quaternion.hpp>
 #include <glm/gtx/epsilon.hpp>
 
+int test_quat_precision()
+{
+	int Error = 0;
+
+	Error += sizeof(glm::lowp_quat) <= sizeof(glm::mediump_quat) ? 0 : 1;
+	Error += sizeof(glm::mediump_quat) <= sizeof(glm::highp_quat) ? 0 : 1;
+    
+    return Error;
+}
+
 int test_quat_type()
 {
     glm::quat A;
@@ -75,6 +85,7 @@ int main()
 {
 	int Error = 0;
     
+	Error += test_quat_precision();
     Error += test_quat_type();
     Error += test_quat_slerp();
     Error += test_quat_length();

+ 0 - 1
test/gtc/gtc_swizzle.cpp

@@ -7,7 +7,6 @@
 // File    : test/gtc/swizzle.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
 #include <glm/gtc/swizzle.hpp>
 

+ 0 - 1
test/gtc/gtc_type_ptr.cpp

@@ -7,7 +7,6 @@
 // File    : test/gtc/type_ptr.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define GLM_MESSAGES
 #include <glm/glm.hpp>
 #include <glm/gtc/type_ptr.hpp>