Browse Source

Merge branch 'static-const' of https://github.com/g-truc/glm into static-const

Christophe Riccio 10 years ago
parent
commit
869caacac5
49 changed files with 627 additions and 10 deletions
  1. 4 0
      glm/detail/type_mat2x2.hpp
  2. 7 0
      glm/detail/type_mat2x2.inl
  3. 5 0
      glm/detail/type_mat2x3.hpp
  4. 7 0
      glm/detail/type_mat2x3.inl
  5. 5 0
      glm/detail/type_mat2x4.hpp
  6. 7 0
      glm/detail/type_mat2x4.inl
  7. 5 0
      glm/detail/type_mat3x2.hpp
  8. 7 0
      glm/detail/type_mat3x2.inl
  9. 5 0
      glm/detail/type_mat3x3.hpp
  10. 8 0
      glm/detail/type_mat3x3.inl
  11. 5 0
      glm/detail/type_mat3x4.hpp
  12. 7 0
      glm/detail/type_mat3x4.inl
  13. 5 0
      glm/detail/type_mat4x2.hpp
  14. 7 0
      glm/detail/type_mat4x2.inl
  15. 5 0
      glm/detail/type_mat4x3.hpp
  16. 7 0
      glm/detail/type_mat4x3.inl
  17. 5 0
      glm/detail/type_mat4x4.hpp
  18. 7 0
      glm/detail/type_mat4x4.inl
  19. 4 0
      glm/detail/type_vec1.hpp
  20. 7 0
      glm/detail/type_vec1.inl
  21. 7 0
      glm/detail/type_vec2.hpp
  22. 13 0
      glm/detail/type_vec2.inl
  23. 11 0
      glm/detail/type_vec3.hpp
  24. 26 0
      glm/detail/type_vec3.inl
  25. 19 0
      glm/detail/type_vec4.hpp
  26. 66 0
      glm/detail/type_vec4.inl
  27. 20 0
      glm/gtc/quaternion.hpp
  28. 67 0
      glm/gtc/quaternion.inl
  29. 5 0
      glm/gtx/simd_mat4.hpp
  30. 5 0
      glm/gtx/simd_mat4.inl
  31. 20 0
      glm/gtx/simd_quat.hpp
  32. 19 0
      glm/gtx/simd_quat.inl
  33. 24 5
      glm/gtx/simd_vec4.hpp
  34. 23 4
      glm/gtx/simd_vec4.inl
  35. 11 0
      test/core/core_type_mat2x2.cpp
  36. 12 0
      test/core/core_type_mat2x3.cpp
  37. 11 0
      test/core/core_type_mat2x4.cpp
  38. 12 0
      test/core/core_type_mat3x2.cpp
  39. 11 0
      test/core/core_type_mat3x3.cpp
  40. 11 0
      test/core/core_type_mat3x4.cpp
  41. 11 0
      test/core/core_type_mat4x2.cpp
  42. 11 0
      test/core/core_type_mat4x3.cpp
  43. 11 0
      test/core/core_type_mat4x4.cpp
  44. 14 0
      test/core/core_type_vec1.cpp
  45. 14 0
      test/core/core_type_vec2.cpp
  46. 17 0
      test/core/core_type_vec3.cpp
  47. 24 0
      test/core/core_type_vec4.cpp
  48. 11 1
      test/gtx/gtx_simd_mat4.cpp
  49. 2 0
      test/gtx/gtx_simd_vec4.cpp

+ 4 - 0
glm/detail/type_mat2x2.hpp

@@ -61,6 +61,10 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
 	private:
 	private:
 		col_type value[2];
 		col_type value[2];
 
 

+ 7 - 0
glm/detail/type_mat2x2.inl

@@ -50,6 +50,13 @@ namespace detail
 	}
 	}
 }//namespace detail
 }//namespace detail
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat2x2<T, P> tmat2x2<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat2x2<T, P> tmat2x2<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat2x3.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[2];
 		col_type value[2];
 
 

+ 7 - 0
glm/detail/type_mat2x3.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat2x3<T, P> tmat2x3<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat2x3<T, P> tmat2x3<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat2x4.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[2];
 		col_type value[2];
 
 

+ 7 - 0
glm/detail/type_mat2x4.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat2x4<T, P> tmat2x4<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat2x4<T, P> tmat2x4<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat3x2.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[3];
 		col_type value[3];
 
 

+ 7 - 0
glm/detail/type_mat3x2.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat3x2<T, P> tmat3x2<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat3x2<T, P> tmat3x2<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat3x3.hpp

@@ -56,6 +56,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 		template <typename U, precision Q>
 		template <typename U, precision Q>
 		friend tvec3<U, Q> operator/(tmat3x3<U, Q> const & m, tvec3<U, Q> const & v);
 		friend tvec3<U, Q> operator/(tmat3x3<U, Q> const & m, tvec3<U, Q> const & v);
 		template <typename U, precision Q>
 		template <typename U, precision Q>

+ 8 - 0
glm/detail/type_mat3x3.inl

@@ -56,6 +56,14 @@ namespace detail
 	}
 	}
 }//namespace detail
 }//namespace detail
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat3x3<T, P> tmat3x3<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat3x3<T, P> tmat3x3<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
+
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat3x4.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[3];
 		col_type value[3];
 
 

+ 7 - 0
glm/detail/type_mat3x4.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat3x4<T, P> tmat3x4<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat3x4<T, P> tmat3x4<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat4x2.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[4];
 		col_type value[4];
 
 

+ 7 - 0
glm/detail/type_mat4x2.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat4x2<T, P> tmat4x2<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat4x2<T, P> tmat4x2<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat4x3.hpp

@@ -57,6 +57,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 	private:
 	private:
 		col_type value[4];
 		col_type value[4];
 
 

+ 7 - 0
glm/detail/type_mat4x3.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat4x3<T, P> tmat4x3<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat4x3<T, P> tmat4x3<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 5 - 0
glm/detail/type_mat4x4.hpp

@@ -56,6 +56,11 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 		template <typename U, precision Q>
 		template <typename U, precision Q>
 		friend tvec4<U, Q> operator/(tmat4x4<U, Q> const & m, tvec4<U, Q> const & v);
 		friend tvec4<U, Q> operator/(tmat4x4<U, Q> const & m, tvec4<U, Q> const & v);
 		template <typename U, precision Q>
 		template <typename U, precision Q>

+ 7 - 0
glm/detail/type_mat4x4.inl

@@ -92,6 +92,13 @@ namespace detail
 	}
 	}
 }//namespace detail
 }//namespace detail
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+		template<typename T, precision P>
+		const tmat4x4<T, P> tmat4x4<T, P>::ZERO(static_cast<T>(0));
+
+		template<typename T, precision P>
+		const tmat4x4<T, P> tmat4x4<T, P>::IDENTITY(static_cast<T>(1));
+#	endif
 	// -- Constructors --
 	// -- Constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 4 - 0
glm/detail/type_vec1.hpp

@@ -59,6 +59,10 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type X;
+#		endif
 		// -- Data --
 		// -- Data --
 
 
 #		if GLM_HAS_ANONYMOUS_UNION
 #		if GLM_HAS_ANONYMOUS_UNION

+ 7 - 0
glm/detail/type_vec1.inl

@@ -32,6 +32,13 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	template<typename T, precision P>
+	const tvec1<T, P> tvec1<T, P>::X(static_cast<T>(1));
+
+	template<typename T, precision P>
+	const tvec1<T, P> tvec1<T, P>::ZERO(static_cast<T>(0));
+#	endif
 	// -- Implicit basic constructors --
 	// -- Implicit basic constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 7 - 0
glm/detail/type_vec2.hpp

@@ -58,6 +58,13 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type X;
+		static const type Y;
+		static const type XY;
+#		endif
+
 		// -- Data --
 		// -- Data --
 
 
 #		if GLM_HAS_ANONYMOUS_UNION
 #		if GLM_HAS_ANONYMOUS_UNION

+ 13 - 0
glm/detail/type_vec2.inl

@@ -28,6 +28,19 @@
 
 
 namespace glm
 namespace glm
 {
 {
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	template <typename T, precision P>
+	const tvec2<T, P> tvec2<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec2<T, P> tvec2<T, P>::X(static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec2<T, P> tvec2<T, P>::Y(static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec2<T, P> tvec2<T, P>::XY(static_cast<T>(1), static_cast<T>(1));
+#	endif
 	// -- Implicit basic constructors --
 	// -- Implicit basic constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 11 - 0
glm/detail/type_vec3.hpp

@@ -58,6 +58,17 @@ namespace glm
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type X;
+		static const type Y;
+		static const type Z;
+		static const type XY;
+		static const type XZ;
+		static const type YZ;
+		static const type XYZ;
+#		endif
+
 		// -- Data --
 		// -- Data --
 
 
 #		if GLM_HAS_ANONYMOUS_UNION
 #		if GLM_HAS_ANONYMOUS_UNION

+ 26 - 0
glm/detail/type_vec3.inl

@@ -32,6 +32,32 @@
 
 
 namespace glm
 namespace glm
 {
 {
+
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::X(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::Y(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::Z(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::XY(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::XZ(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::YZ(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec3<T, P> tvec3<T, P>::XYZ(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+#	endif
 	// -- Implicit basic constructors --
 	// -- Implicit basic constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 19 - 0
glm/detail/type_vec4.hpp

@@ -112,6 +112,25 @@ namespace detail
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 			static GLM_RELAXED_CONSTEXPR precision prec = P;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type X;
+		static const type Y;
+		static const type Z;
+		static const type W;
+		static const type XY;
+		static const type XZ;
+		static const type XW;
+		static const type YZ;
+		static const type YW;
+		static const type ZW;
+		static const type XYZ;
+		static const type XYW;
+		static const type XZW;
+		static const type YZW;
+		static const type XYZW;
+#		endif
+
 		// -- Data --
 		// -- Data --
 
 
 #		if GLM_HAS_ANONYMOUS_UNION && GLM_NOT_BUGGY_VC32BITS
 #		if GLM_HAS_ANONYMOUS_UNION && GLM_NOT_BUGGY_VC32BITS

+ 66 - 0
glm/detail/type_vec4.inl

@@ -32,6 +32,72 @@
 
 
 namespace glm
 namespace glm
 {
 {
+
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::ZERO
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::X
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::Y
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::Z
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::W
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XY
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XZ
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XW
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::YZ
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::YW
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::ZW
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XYZ
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XYW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XZW
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::YZW
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tvec4<T, P> tvec4<T, P>::XYZW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+#	endif
 	// -- Implicit basic constructors --
 	// -- Implicit basic constructors --
 
 
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
 #	if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)

+ 20 - 0
glm/gtc/quaternion.hpp

@@ -76,6 +76,26 @@ namespace glm
 
 
 		T x, y, z, w;
 		T x, y, z, w;
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type IDENTITY;
+		static const type X;
+		static const type Y;
+		static const type Z;
+		static const type W;
+		static const type XY;
+		static const type XZ;
+		static const type XW;
+		static const type YZ;
+		static const type YW;
+		static const type ZW;
+		static const type XYZ;
+		static const type XYW;
+		static const type XZW;
+		static const type YZW;
+		static const type XYZW;
+#		endif
+
 		// -- Component accesses --
 		// -- Component accesses --
 
 
 #		ifdef GLM_FORCE_SIZE_FUNC
 #		ifdef GLM_FORCE_SIZE_FUNC

+ 67 - 0
glm/gtc/quaternion.inl

@@ -49,6 +49,73 @@ namespace detail
 	};
 	};
 }//namespace detail
 }//namespace detail
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::ZERO
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P> const tquat<T, P> tquat<T, P>::IDENTITY;
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::X
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::Y
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::Z
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::W
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XY
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XZ
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::YZ
+			(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::YW
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::ZW
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XYZ
+			(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XYW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XZW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::YZW
+			(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+	template <typename T, precision P>
+	const tquat<T, P> tquat<T, P>::XYZW
+			(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+#	endif
 	// -- Component accesses --
 	// -- Component accesses --
 
 
 #	ifdef GLM_FORCE_SIZE_FUNC
 #	ifdef GLM_FORCE_SIZE_FUNC

+ 5 - 0
glm/gtx/simd_mat4.hpp

@@ -83,6 +83,11 @@ namespace detail
 			static GLM_RELAXED_CONSTEXPR precision prec = defaultp;
 			static GLM_RELAXED_CONSTEXPR precision prec = defaultp;
 #		endif//GLM_META_PROG_HELPERS
 #		endif//GLM_META_PROG_HELPERS
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+			static const type ZERO;
+			static const type IDENTITY;
+#		endif
+
 		GLM_FUNC_DECL length_t length() const;
 		GLM_FUNC_DECL length_t length() const;
 
 
 		fvec4SIMD Data[4];
 		fvec4SIMD Data[4];

+ 5 - 0
glm/gtx/simd_mat4.inl

@@ -61,6 +61,11 @@ GLM_FUNC_QUALIFIER fvec4SIMD const & fmat4x4SIMD::operator[]
 	return this->Data[i];
 	return this->Data[i];
 }
 }
 
 
+#ifdef GLM_STATIC_CONST_MEMBERS
+	const fmat4x4SIMD fmat4x4SIMD::ZERO(static_cast<float>(0));
+	const fmat4x4SIMD fmat4x4SIMD::IDENTITY(static_cast<float>(1));
+#endif
+
 //////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////
 // Constructors
 // Constructors
 
 

+ 20 - 0
glm/gtx/simd_quat.hpp

@@ -91,6 +91,26 @@ namespace detail
 		__m128 Data;
 		__m128 Data;
 #endif
 #endif
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type IDENTITY;
+		static const type X;
+		static const type Y;
+		static const type Z;
+		static const type W;
+		static const type XY;
+		static const type XZ;
+		static const type XW;
+		static const type YZ;
+		static const type YW;
+		static const type ZW;
+		static const type XYZ;
+		static const type XYW;
+		static const type XZW;
+		static const type YZW;
+		static const type XYZW;
+#		endif
+
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Implicit basic constructors
 		// Implicit basic constructors
 
 

+ 19 - 0
glm/gtx/simd_quat.inl

@@ -51,6 +51,25 @@ void print(const fvec4SIMD &v)
 }
 }
 #endif
 #endif
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	const fquatSIMD fquatSIMD::ZERO(0, 0, 0, 0);
+	const fquatSIMD fquatSIMD::IDENTITY(1, 0, 0, 0);
+	const fquatSIMD fquatSIMD::X(0, 1, 0, 0);
+	const fquatSIMD fquatSIMD::Y(0, 0, 1, 0);
+	const fquatSIMD fquatSIMD::Z(0, 0, 0, 1);
+	const fquatSIMD fquatSIMD::W(1, 0, 0, 0);
+	const fquatSIMD fquatSIMD::XY(0, 1, 1, 0);
+	const fquatSIMD fquatSIMD::XZ(0, 1, 0, 1);
+	const fquatSIMD fquatSIMD::XW(1, 1, 0, 0);
+	const fquatSIMD fquatSIMD::YZ(0, 0, 1, 1);
+	const fquatSIMD fquatSIMD::YW(1, 0, 1, 0);
+	const fquatSIMD fquatSIMD::ZW(1, 0, 0, 1);
+	const fquatSIMD fquatSIMD::XYZ(0, 1, 1, 1);
+	const fquatSIMD fquatSIMD::XYW(1, 1, 1, 0);
+	const fquatSIMD fquatSIMD::XZW(1, 1, 0, 1);
+	const fquatSIMD fquatSIMD::YZW(1, 0, 1, 1);
+	const fquatSIMD fquatSIMD::XYZW(1, 1, 1, 1);
+#	endif
 
 
 //////////////////////////////////////
 //////////////////////////////////////
 // Implicit basic constructors
 // Implicit basic constructors

+ 24 - 5
glm/gtx/simd_vec4.hpp

@@ -114,6 +114,25 @@ namespace detail
 		__m128 Data;
 		__m128 Data;
 #endif
 #endif
 
 
+#		ifdef GLM_STATIC_CONST_MEMBERS
+		static const type ZERO;
+		static const type X;
+		static const type Y;
+		static const type Z;
+		static const type W;
+		static const type XY;
+		static const type XZ;
+		static const type XW;
+		static const type YZ;
+		static const type YW;
+		static const type ZW;
+		static const type XYZ;
+		static const type XYW;
+		static const type XZW;
+		static const type YZW;
+		static const type XYZW;
+#		endif
+
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Implicit basic constructors
 		// Implicit basic constructors
 
 
@@ -167,15 +186,15 @@ namespace detail
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Swizzle operators
 		// Swizzle operators
 
 
-		template <comp X, comp Y, comp Z, comp W>
+		template <comp X_, comp Y_, comp Z_, comp W_>
 		fvec4SIMD& swizzle();
 		fvec4SIMD& swizzle();
-		template <comp X, comp Y, comp Z, comp W>
+		template <comp X_, comp Y_, comp Z_, comp W_>
 		fvec4SIMD swizzle() const;
 		fvec4SIMD swizzle() const;
-		template <comp X, comp Y, comp Z>
+		template <comp X_, comp Y_, comp Z_>
 		fvec4SIMD swizzle() const;
 		fvec4SIMD swizzle() const;
-		template <comp X, comp Y>
+		template <comp X_, comp Y_>
 		fvec4SIMD swizzle() const;
 		fvec4SIMD swizzle() const;
-		template <comp X>
+		template <comp X_>
 		fvec4SIMD swizzle() const;
 		fvec4SIMD swizzle() const;
 	};
 	};
 }//namespace detail
 }//namespace detail

+ 23 - 4
glm/gtx/simd_vec4.inl

@@ -16,6 +16,25 @@ struct shuffle_mask
 	enum{value = Value};
 	enum{value = Value};
 };
 };
 
 
+#	ifdef GLM_STATIC_CONST_MEMBERS
+	const fvec4SIMD fvec4SIMD::ZERO(0, 0, 0, 0);
+	const fvec4SIMD fvec4SIMD::X(1, 0, 0, 0);
+	const fvec4SIMD fvec4SIMD::Y(0, 1, 0, 0);
+	const fvec4SIMD fvec4SIMD::Z(0, 0, 1, 0);
+	const fvec4SIMD fvec4SIMD::W(0, 0, 0, 1);
+	const fvec4SIMD fvec4SIMD::XY(1, 1, 0, 0);
+	const fvec4SIMD fvec4SIMD::XZ(1, 0, 1, 0);
+	const fvec4SIMD fvec4SIMD::XW(1, 0, 0, 1);
+	const fvec4SIMD fvec4SIMD::YZ(0, 1, 1, 0);
+	const fvec4SIMD fvec4SIMD::YW(0, 1, 0, 1);
+	const fvec4SIMD fvec4SIMD::ZW(0, 0, 1, 1);
+	const fvec4SIMD fvec4SIMD::XYZ(1, 1, 1, 0);
+	const fvec4SIMD fvec4SIMD::XYW(1, 1, 0, 1);
+	const fvec4SIMD fvec4SIMD::XZW(1, 0, 1, 1);
+	const fvec4SIMD fvec4SIMD::YZW(0, 1, 1, 1);
+	const fvec4SIMD fvec4SIMD::XYZW(1, 1, 1, 1);
+#	endif
+
 //////////////////////////////////////
 //////////////////////////////////////
 // Implicit basic constructors
 // Implicit basic constructors
 
 
@@ -167,21 +186,21 @@ GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::operator--()
 //////////////////////////////////////
 //////////////////////////////////////
 // Swizzle operators
 // Swizzle operators
 
 
-template <comp X, comp Y, comp Z, comp W>
+template <comp X_, comp Y_, comp Z_, comp W_>
 GLM_FUNC_QUALIFIER fvec4SIMD fvec4SIMD::swizzle() const
 GLM_FUNC_QUALIFIER fvec4SIMD fvec4SIMD::swizzle() const
 {
 {
 	__m128 Data = _mm_shuffle_ps(
 	__m128 Data = _mm_shuffle_ps(
 		this->Data, this->Data, 
 		this->Data, this->Data, 
-		shuffle_mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value);
+		shuffle_mask<(W_ << 6) | (Z_ << 4) | (Y_ << 2) | (X_ << 0)>::value);
 	return fvec4SIMD(Data);
 	return fvec4SIMD(Data);
 }
 }
 
 
-template <comp X, comp Y, comp Z, comp W>
+template <comp X_, comp Y_, comp Z_, comp W_>
 GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::swizzle()
 GLM_FUNC_QUALIFIER fvec4SIMD& fvec4SIMD::swizzle()
 {
 {
 	this->Data = _mm_shuffle_ps(
 	this->Data = _mm_shuffle_ps(
 		this->Data, this->Data, 
 		this->Data, this->Data, 
-		shuffle_mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value);
+		shuffle_mask<(W_ << 6) | (Z_ << 4) | (Y_ << 2) | (X_ << 0)>::value);
 	return *this;
 	return *this;
 }
 }
 
 

+ 11 - 0
test/core/core_type_mat2x2.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/epsilon.hpp>
 #include <glm/matrix.hpp>
 #include <glm/matrix.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
@@ -86,6 +87,15 @@ int test_inverse()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat2x2(1) == glm::mat2x2::IDENTITY ? 0 : 1;
+	Error += glm::mat2x2(0) == glm::mat2x2::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 int test_ctr()
 int test_ctr()
 {
 {
 	int Error(0);
 	int Error(0);
@@ -173,6 +183,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 	Error += test_inverse();
 	Error += test_inverse();

+ 12 - 0
test/core/core_type_mat2x3.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -102,6 +103,16 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat2x3(1) == glm::mat2x3::IDENTITY ? 0 : 1;
+	Error += glm::mat2x3(0) == glm::mat2x3::ZERO ? 0 : 1;
+
+	return Error;
+}
+
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -147,6 +158,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 
 

+ 11 - 0
test/core/core_type_mat2x4.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -98,6 +99,15 @@ int test_ctr()
 	};
 	};
 	
 	
 #endif//GLM_HAS_INITIALIZER_LISTS
 #endif//GLM_HAS_INITIALIZER_LISTS
+
+	return Error;
+}
+
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat2x4(1) == glm::mat2x4::IDENTITY ? 0 : 1;
+	Error += glm::mat2x4(0) == glm::mat2x4::ZERO ? 0 : 1;
 	
 	
 	return Error;
 	return Error;
 }
 }
@@ -147,6 +157,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 
 

+ 12 - 0
test/core/core_type_mat3x2.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -106,6 +107,16 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat3x2(1) == glm::mat3x2::IDENTITY ? 0 : 1;
+	Error += glm::mat3x2(0) == glm::mat3x2::ZERO ? 0 : 1;
+
+	return Error;
+}
+
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -152,6 +163,7 @@ int main()
 
 
 	Error += cast::test();
 	Error += cast::test();
 	Error += test_ctr();
 	Error += test_ctr();
+	Error += test_static_const();
 	Error += test_operators();
 	Error += test_operators();
 
 
 	return Error;
 	return Error;

+ 11 - 0
test/core/core_type_mat3x3.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/epsilon.hpp>
 #include <glm/matrix.hpp>
 #include <glm/matrix.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
@@ -165,6 +166,15 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat3x3(1) == glm::mat3x3::IDENTITY ? 0 : 1;
+	Error += glm::mat3x3(0) == glm::mat3x3::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -210,6 +220,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_mat3x3();
 	Error += test_mat3x3();
 	Error += test_operators();
 	Error += test_operators();

+ 11 - 0
test/core/core_type_mat3x4.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -106,6 +107,15 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat3x4(1) == glm::mat3x4::IDENTITY ? 0 : 1;
+	Error += glm::mat3x4(0) == glm::mat3x4::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -151,6 +161,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 
 

+ 11 - 0
test/core/core_type_mat4x2.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -110,6 +111,15 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat4x2(1) == glm::mat4x2::IDENTITY ? 0 : 1;
+	Error += glm::mat4x2(0) == glm::mat4x2::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -155,6 +165,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 
 

+ 11 - 0
test/core/core_type_mat4x3.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
@@ -110,6 +111,15 @@ int test_ctr()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat4x3(1) == glm::mat4x3::IDENTITY ? 0 : 1;
+	Error += glm::mat4x3(0) == glm::mat4x3::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -155,6 +165,7 @@ int main()
 #endif
 #endif
 
 
 	Error += cast::test();
 	Error += cast::test();
+	Error += test_static_const();
 	Error += test_ctr();
 	Error += test_ctr();
 	Error += test_operators();
 	Error += test_operators();
 
 

+ 11 - 0
test/core/core_type_mat4x4.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #define GLM_SIMD
 #define GLM_SIMD
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/epsilon.hpp>
 #include <glm/matrix.hpp>
 #include <glm/matrix.hpp>
@@ -283,6 +284,15 @@ int perf_mul()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat4x4(1) == glm::mat4x4::IDENTITY ? 0 : 1;
+	Error += glm::mat4x4(0) == glm::mat4x4::ZERO ? 0 : 1;
+
+	return Error;
+}
+
 namespace cast
 namespace cast
 {
 {
 	template <typename genType>
 	template <typename genType>
@@ -339,6 +349,7 @@ int main()
 
 
 	Error += cast::test();
 	Error += cast::test();
 	Error += test_ctr();
 	Error += test_ctr();
+	Error += test_static_const();
 	Error += test_inverse_dmat4x4();
 	Error += test_inverse_dmat4x4();
 	Error += test_inverse_mat4x4();
 	Error += test_inverse_mat4x4();
 	Error += test_operators();
 	Error += test_operators();

+ 14 - 0
test/core/core_type_vec1.cpp

@@ -32,6 +32,7 @@
 #if !(GLM_COMPILER & GLM_COMPILER_GCC)
 #if !(GLM_COMPILER & GLM_COMPILER_GCC)
 #	define GLM_META_PROG_HELPERS
 #	define GLM_META_PROG_HELPERS
 #endif
 #endif
+#define GLM_STATIC_CONST_MEMBERS
 #define GLM_SWIZZLE
 #define GLM_SWIZZLE
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/gtc/vec1.hpp>
 #include <glm/gtc/vec1.hpp>
@@ -166,6 +167,18 @@ int test_vec1_operator_increment()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_vec1_static_const() {
+	int Error = 0;
+
+	Error += (glm::vec1(1.0f) == glm::vec1::X) ? 0 : 1;
+	Error += (glm::ivec1(1) == glm::ivec1::X) ? 0 : 1;
+	Error += (glm::dvec1(1.0) == glm::dvec1::X) ? 0 : 1;
+	Error += (glm::bvec1(false) == glm::bvec1::ZERO) ? 0 : 1;
+	Error += (glm::uvec1(0) == glm::uvec1::ZERO) ? 0 : 1;
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
@@ -178,6 +191,7 @@ int main()
 		assert(glm::vec1::components == 1);
 		assert(glm::vec1::components == 1);
 #	endif
 #	endif
 
 
+	Error += test_vec1_static_const();
 	Error += test_vec1_size();
 	Error += test_vec1_size();
 	Error += test_vec1_ctor();
 	Error += test_vec1_ctor();
 	Error += test_vec1_operators();
 	Error += test_vec1_operators();

+ 14 - 0
test/core/core_type_vec2.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #if !(GLM_COMPILER & GLM_COMPILER_GCC)
 #if !(GLM_COMPILER & GLM_COMPILER_GCC)
 #	define GLM_META_PROG_HELPERS
 #	define GLM_META_PROG_HELPERS
 #endif
 #endif
@@ -40,6 +41,7 @@
 #	include <type_traits>
 #	include <type_traits>
 #endif
 #endif
 
 
+
 int test_vec2_operators()
 int test_vec2_operators()
 {
 {
 	int Error = 0;
 	int Error = 0;
@@ -331,6 +333,17 @@ int test_operator_increment()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_vec2_static_const() {
+	int Error(0);
+
+	Error += (glm::ivec2(0, 0) == glm::ivec2::ZERO) ? 0 : 1;
+	Error += (glm::vec2(1, 0) == glm::vec2::X) ? 0 : 1;
+	Error += (glm::bvec2(false, true) == glm::bvec2::Y) ? 0 : 1;
+	Error += (glm::dvec2(1, 1) == glm::dvec2::XY) ? 0 : 1;
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
@@ -343,6 +356,7 @@ int main()
 		assert(glm::vec2::components == 2);
 		assert(glm::vec2::components == 2);
 #	endif
 #	endif
 
 
+	Error += test_vec2_static_const();
 	Error += test_vec2_size();
 	Error += test_vec2_size();
 	Error += test_vec2_ctor();
 	Error += test_vec2_ctor();
 	Error += test_vec2_operators();
 	Error += test_vec2_operators();

+ 17 - 0
test/core/core_type_vec3.cpp

@@ -33,6 +33,7 @@
 #	define GLM_META_PROG_HELPERS
 #	define GLM_META_PROG_HELPERS
 #endif
 #endif
 #define GLM_SWIZZLE
 #define GLM_SWIZZLE
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/geometric.hpp>
 #include <glm/geometric.hpp>
 #include <glm/vec2.hpp>
 #include <glm/vec2.hpp>
@@ -493,6 +494,21 @@ int test_operator_increment()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_vec3_static_const() {
+	int Error(0);
+
+	Error += (glm::ivec3(0, 0, 0) == glm::ivec3::ZERO) ? 0 : 1;
+	Error += (glm::vec3(1, 0, 0) == glm::vec3::X) ? 0 : 1;
+	Error += (glm::bvec3(false, true, false) == glm::bvec3::Y) ? 0 : 1;
+	Error += (glm::bvec3(false, false, true) == glm::bvec3::Z) ? 0 : 1;
+	Error += (glm::dvec3(1, 1, 0) == glm::dvec3::XY) ? 0 : 1;
+	Error += (glm::vec3(1, 0, 1) == glm::vec3::XZ) ? 0 : 1;
+	Error += (glm::uvec3(0u, 1u, 1u) == glm::uvec3::YZ) ? 0 : 1;
+	Error += (glm::dvec3(1, 1, 1) == glm::dvec3::XYZ) ? 0 : 1;
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
@@ -505,6 +521,7 @@ int main()
 		assert(glm::vec3::components == 3);
 		assert(glm::vec3::components == 3);
 #	endif
 #	endif
 
 
+	Error += test_vec3_static_const();
 	Error += test_vec3_ctor();
 	Error += test_vec3_ctor();
 	Error += test_vec3_operators();
 	Error += test_vec3_operators();
 	Error += test_vec3_size();
 	Error += test_vec3_size();

+ 24 - 0
test/core/core_type_vec4.cpp

@@ -33,6 +33,7 @@
 #	define GLM_META_PROG_HELPERS
 #	define GLM_META_PROG_HELPERS
 #endif
 #endif
 #define GLM_SWIZZLE
 #define GLM_SWIZZLE
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/vec2.hpp>
 #include <glm/vec2.hpp>
 #include <glm/vec3.hpp>
 #include <glm/vec3.hpp>
@@ -376,6 +377,28 @@ int test_operator_increment()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_vec4_static_const() {
+	int Error(0);
+
+	Error += (glm::ivec4(0, 0, 0, 0) == glm::ivec4::ZERO) ? 0 : 1;
+	Error += (glm::vec4(1, 0, 0, 0) == glm::vec4::X) ? 0 : 1;
+	Error += (glm::bvec4(false, true, false, false) == glm::bvec4::Y) ? 0 : 1;
+	Error += (glm::bvec4(false, false, true, false) == glm::bvec4::Z) ? 0 : 1;
+	Error += (glm::uvec4(0u, 0u, 0u, 1u) == glm::uvec4::W) ? 0 : 1;
+	Error += (glm::dvec4(1, 1, 0, 0) == glm::dvec4::XY) ? 0 : 1;
+	Error += (glm::vec4(1, 0, 1, 0) == glm::vec4::XZ) ? 0 : 1;
+	Error += (glm::vec4(1, 0, 0, 1) == glm::vec4::XW) ? 0 : 1;
+	Error += (glm::uvec4(0u, 1u, 1u, 0u) == glm::uvec4::YZ) ? 0 : 1;
+	Error += (glm::vec4(0, 1, 0, 1) == glm::vec4::YW) ? 0 : 1;
+	Error += (glm::dvec4(1, 1, 1, 0) == glm::dvec4::XYZ) ? 0 : 1;
+	Error += (glm::vec4(1, 1, 0, 1) == glm::vec4::XYW) ? 0 : 1;
+	Error += (glm::vec4(1, 0, 1, 1) == glm::vec4::XZW) ? 0 : 1;
+	Error += (glm::vec4(0, 1, 1, 1) == glm::vec4::YZW) ? 0 : 1;
+	Error += (glm::vec4(1, 1, 1, 1) == glm::vec4::XYZW) ? 0 : 1;
+
+	return Error;
+}
+
 struct AoS
 struct AoS
 {
 {
 	glm::vec4 A;
 	glm::vec4 A;
@@ -486,6 +509,7 @@ int main()
 		Error += test_vec4_perf_SoA(Size);
 		Error += test_vec4_perf_SoA(Size);
 #	endif//NDEBUG
 #	endif//NDEBUG
 
 
+	Error += test_vec4_static_const();
 	Error += test_vec4_ctor();
 	Error += test_vec4_ctor();
 	Error += test_vec4_size();
 	Error += test_vec4_size();
 	Error += test_vec4_operators();
 	Error += test_vec4_operators();

+ 11 - 1
test/gtx/gtx_simd_mat4.cpp

@@ -29,6 +29,7 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
 #include <glm/glm.hpp>
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_transform.hpp>
 #include <glm/gtc/matrix_transform.hpp>
 #include <glm/gtc/quaternion.hpp>
 #include <glm/gtc/quaternion.hpp>
@@ -252,6 +253,15 @@ int test_compute_gtx()
 	return 0;
 	return 0;
 }
 }
 
 
+int test_static_const() {
+	int Error(0);
+
+	Error += glm::mat4_cast(glm::simdMat4(static_cast<float>(1))) == glm::mat4_cast(glm::simdMat4::IDENTITY) ? 0 : 1;
+	Error += glm::mat4_cast(glm::simdMat4(static_cast<float>(0))) == glm::mat4_cast(glm::simdMat4::ZERO) ? 0 : 1;
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
@@ -313,7 +323,7 @@ int main()
 
 
 	Error += test_compute_glm();
 	Error += test_compute_glm();
 	Error += test_compute_gtx();
 	Error += test_compute_gtx();
-	
+	Error += test_static_const();
 	float Det = glm::determinant(glm::simdMat4(1.0));
 	float Det = glm::determinant(glm::simdMat4(1.0));
 	Error += Det == 1.0f ? 0 : 1;
 	Error += Det == 1.0f ? 0 : 1;
 	
 	

+ 2 - 0
test/gtx/gtx_simd_vec4.cpp

@@ -29,6 +29,8 @@
 /// @author Christophe Riccio
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_STATIC_CONST_MEMBERS
+
 #include <glm/glm.hpp>
 #include <glm/glm.hpp>
 #include <glm/gtx/simd_vec4.hpp>
 #include <glm/gtx/simd_vec4.hpp>
 #include <cstdio>
 #include <cstdio>