Browse Source

Fixed length function for half vec* types

Christophe Riccio 14 years ago
parent
commit
0c7dadef8e
3 changed files with 109 additions and 0 deletions
  1. 3 0
      glm/gtc/half_float.hpp
  2. 16 0
      glm/gtc/half_float.inl
  3. 90 0
      test/gtc/gtc_half_float.cpp

+ 3 - 0
glm/gtc/half_float.hpp

@@ -28,6 +28,7 @@ namespace detail
 		typedef thalf value_type;
 		typedef std::size_t size_type;
 		static size_type value_size();
+		GLM_FUNC_DECL size_type length() const;
 
 		typedef tvec2<thalf> type;
 		typedef tvec2<bool> bool_type;
@@ -120,6 +121,7 @@ namespace detail
 		typedef thalf value_type;
 		typedef std::size_t size_type;
 		static size_type value_size();
+		GLM_FUNC_DECL size_type length() const;
 
 		typedef tvec3<thalf> type;
 		typedef tvec3<bool> bool_type;
@@ -216,6 +218,7 @@ namespace detail
 		typedef thalf value_type;
 		typedef std::size_t size_type;
 		static size_type value_size();
+		GLM_FUNC_DECL size_type length() const;
 
 		typedef tvec4<thalf> type;
 		typedef tvec4<bool> bool_type;

+ 16 - 0
glm/gtc/half_float.inl

@@ -20,6 +20,11 @@ GLM_FUNC_QUALIFIER tvec2<thalf>::size_type tvec2<thalf>::value_size()
 	return 2;
 }
 
+GLM_FUNC_QUALIFIER typename tvec2<thalf>::size_type tvec2<thalf>::length() const
+{
+	return 2;
+}
+
 //////////////////////////////////////
 // Accesses
 
@@ -288,6 +293,11 @@ GLM_FUNC_QUALIFIER tvec3<thalf>::size_type tvec3<thalf>::value_size()
 	return 3;
 }
 
+GLM_FUNC_QUALIFIER typename tvec3<thalf>::size_type tvec3<thalf>::length() const
+{
+	return 3;
+}
+
 //////////////////////////////////////
 // Accesses
 
@@ -600,6 +610,12 @@ GLM_FUNC_QUALIFIER tvec4<thalf>::size_type tvec4<thalf>::value_size()
 	return 4;
 }
 
+	
+GLM_FUNC_QUALIFIER typename tvec4<thalf>::size_type tvec4<thalf>::length() const
+{
+	return 4;
+}
+	
 //////////////////////////////////////
 // Accesses
 

+ 90 - 0
test/gtc/gtc_half_float.cpp

@@ -168,18 +168,108 @@ int test_half_ctor_vec2()
 
 int test_half_ctor_vec3()
 {
+	int Error = 0;
+	
+	{
+		glm::hvec3 A(1, 2, 3);
+		glm::hvec3 B(A);
+		glm::vec3 C(1, 2, 3);
+		glm::hvec3 D(C);
+		glm::dvec3 E(1, 2, 3);
+		glm::hvec3 F(E);
+		glm::hvec3 G(1, 2.0, 3);
+		glm::hvec3 H;
+		H = A;
+		
+		Error += A == B ? 0 : 1;
+		//Error += C == D ? 0 : 1;
+		//Error += E == F ? 0 : 1;
+		Error += A == G ? 0 : 1;
+		Error += A == H ? 0 : 1;
+	}
+	
+	{
+		glm::hvec3 A(1);
+		glm::vec3 B(1);
+		
+		//Error += A == B ? 0 : 1;
+	}
 	
+	return Error;
 }
 
 int test_half_ctor_vec4()
 {
+	int Error = 0;
+	
+	{
+		glm::hvec4 A(1, 2, 3, 4);
+		glm::hvec4 B(A);
+		glm::vec4 C(1, 2, 3, 4);
+		glm::hvec4 D(C);
+		glm::dvec4 E(1, 2, 3, 4);
+		glm::hvec4 F(E);
+		glm::hvec4 G(1, 2.0, 3, 4);
+		glm::hvec4 H;
+		H = A;
+		
+		Error += A == B ? 0 : 1;
+		//Error += C == D ? 0 : 1;
+		//Error += E == F ? 0 : 1;
+		Error += A == G ? 0 : 1;
+		Error += A == H ? 0 : 1;
+	}
 	
+	{
+		glm::hvec4 A(1);
+		glm::vec4 B(1);
+		
+		//Error += A == B ? 0 : 1;
+	}
+	
+	return Error;
+}
+
+int test_hvec2_size()
+{
+	int Error = 0;
+	
+	Error += sizeof(glm::hvec2) <= sizeof(glm::lowp_vec2) ? 0 : 1;
+	Error += 4 == sizeof(glm::hvec2) ? 0 : 1;
+	Error += glm::hvec2().length() == 2 ? 0 : 1;
+	
+	return Error;
+}
+
+int test_hvec3_size()
+{
+	int Error = 0;
+	
+	Error += sizeof(glm::hvec3) <= sizeof(glm::lowp_vec3) ? 0 : 1;
+	Error += 6 <= sizeof(glm::hvec3) ? 0 : 1;
+	Error += glm::hvec3().length() == 3 ? 0 : 1;
+		
+	return Error;
+}
+
+int test_hvec4_size()
+{
+	int Error = 0;
+	
+	Error += sizeof(glm::hvec4) <= sizeof(glm::lowp_vec4) ? 0 : 1;
+	Error += 8 <= sizeof(glm::hvec4) ? 0 : 1;
+	Error += glm::hvec4().length() == 4 ? 0 : 1;
+	
+	return Error;
 }
 
 int main()
 {
 	int Error = 0;
 
+	Error += test_hvec2_size();
+	Error += test_hvec3_size();
+	Error += test_hvec4_size();
 	Error += test_half_ctor_vec2();
 	Error += test_half_ctor_vec3();
 	Error += test_half_ctor_vec4();