Browse Source

Updated header files formatting

Christophe Riccio 14 years ago
parent
commit
d7510204c1

+ 327 - 328
glm/gtc/half_float.hpp

@@ -18,346 +18,345 @@
 #endif
 
 namespace glm{
-	namespace detail
-	{
+namespace detail
+{
 #ifndef _MSC_EXTENSIONS
-		template <>
-		struct tvec2<thalf>
-		{
-			enum ctor{null};
-			typedef thalf value_type;
-			typedef std::size_t size_type;
-			static size_type value_size();
-
-			typedef tvec2<thalf> type;
-			typedef tvec2<bool> bool_type;
-
-			//////////////////////////////////////
-			// Data
-
-			thalf x, y;
-
-			//////////////////////////////////////
-			// Accesses
-
-			thalf & operator[](size_type i);
-			thalf const & operator[](size_type i) const;
-
-			//////////////////////////////////////
-			// Implicit basic constructors
-
-			tvec2();
-			tvec2(tvec2<thalf> const & v);
-
-			//////////////////////////////////////
-			// Explicit basic constructors
-
-			explicit tvec2(ctor);
-			explicit tvec2(
-				thalf const & s);
-			explicit tvec2(
-				thalf const & s1, 
-				thalf const & s2);
-
-			//////////////////////////////////////
-			// Swizzle constructors
-
-			tvec2(tref2<thalf> const & r);
-
-			//////////////////////////////////////
-			// Convertion scalar constructors
-
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec2(U const & x);
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U, typename V> 
-			explicit tvec2(U const & x, V const & y);			
-
-			//////////////////////////////////////
-			// Convertion vector constructors
-
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec2(tvec2<U> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec2(tvec3<U> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec2(tvec4<U> const & v);
-
-			//////////////////////////////////////
-			// Unary arithmetic operators
-
-			tvec2<thalf>& operator= (tvec2<thalf> const & v);
-
-			tvec2<thalf>& operator+=(thalf const & s);
-			tvec2<thalf>& operator+=(tvec2<thalf> const & v);
-			tvec2<thalf>& operator-=(thalf const & s);
-			tvec2<thalf>& operator-=(tvec2<thalf> const & v);
-			tvec2<thalf>& operator*=(thalf const & s);
-			tvec2<thalf>& operator*=(tvec2<thalf> const & v);
-			tvec2<thalf>& operator/=(thalf const & s);
-			tvec2<thalf>& operator/=(tvec2<thalf> const & v);
-			tvec2<thalf>& operator++();
-			tvec2<thalf>& operator--();
-
-			//////////////////////////////////////
-			// Swizzle operators
-
-			thalf swizzle(comp X) const;
-			tvec2<thalf> swizzle(comp X, comp Y) const;
-			tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
-			tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
-			tref2<thalf> swizzle(comp X, comp Y);
-		};
-
-		template <>
-		struct tvec3<thalf>
-		{
-			enum ctor{null};
-			typedef thalf value_type;
-			typedef std::size_t size_type;
-			static size_type value_size();
-
-			typedef tvec3<thalf> type;
-			typedef tvec3<bool> bool_type;
-
-			//////////////////////////////////////
-			// Data
-
-			thalf x, y, z;
-
-			//////////////////////////////////////
-			// Accesses
-
-			thalf & operator[](size_type i);
-			thalf const & operator[](size_type i) const;
-
-			//////////////////////////////////////
-			// Implicit basic constructors
-
-			tvec3();
-			tvec3(tvec3<thalf> const & v);
-
-			//////////////////////////////////////
-			// Explicit basic constructors
-
-			explicit tvec3(ctor);
-			explicit tvec3(
-				thalf const & s);
-			explicit tvec3(
-				thalf const & s1, 
-				thalf const & s2, 
-				thalf const & s3);
-
-			//////////////////////////////////////
-			// Swizzle constructors
-
-			tvec3(tref3<thalf> const & r);
-
-			//////////////////////////////////////
-			// Convertion scalar constructors
-
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec3(U const & x);
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U, typename V, typename W> 
-			explicit tvec3(U const & x, V const & y, W const & z);			
-
-			//////////////////////////////////////
-			// Convertion vector constructors
-
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B> 
-			explicit tvec3(tvec2<A> const & v, B const & s);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B> 
-			explicit tvec3(A const & s, tvec2<B> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec3(tvec3<U> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec3(tvec4<U> const & v);
-
-			//////////////////////////////////////
-			// Unary arithmetic operators
-
-			tvec3<thalf>& operator= (tvec3<thalf> const & v);
-
-			tvec3<thalf>& operator+=(thalf const & s);
-			tvec3<thalf>& operator+=(tvec3<thalf> const & v);
-			tvec3<thalf>& operator-=(thalf const & s);
-			tvec3<thalf>& operator-=(tvec3<thalf> const & v);
-			tvec3<thalf>& operator*=(thalf const & s);
-			tvec3<thalf>& operator*=(tvec3<thalf> const & v);
-			tvec3<thalf>& operator/=(thalf const & s);
-			tvec3<thalf>& operator/=(tvec3<thalf> const & v);
-			tvec3<thalf>& operator++();
-			tvec3<thalf>& operator--();
-
-			//////////////////////////////////////
-			// Swizzle operators
-
-			thalf swizzle(comp X) const;
-			tvec2<thalf> swizzle(comp X, comp Y) const;
-			tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
-			tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
-			tref3<thalf> swizzle(comp X, comp Y, comp Z);
-		};
-
-		template <>
-		struct tvec4<thalf>
-		{
-			enum ctor{null};
-			typedef thalf value_type;
-			typedef std::size_t size_type;
-			static size_type value_size();
-
-			typedef tvec4<thalf> type;
-			typedef tvec4<bool> bool_type;
-
-			//////////////////////////////////////
-			// Data
-
-			thalf x, y, z, w;
-
-			//////////////////////////////////////
-			// Accesses
-
-			thalf & operator[](size_type i);
-			thalf const & operator[](size_type i) const;
-
-			//////////////////////////////////////
-			// Implicit basic constructors
-
-			tvec4();
-			tvec4(tvec4<thalf> const & v);
-
-			//////////////////////////////////////
-			// Explicit basic constructors
-
-			explicit tvec4(ctor);
-			explicit tvec4(
-				thalf const & s);
-			explicit tvec4(
-				thalf const & s0, 
-				thalf const & s1, 
-				thalf const & s2, 
-				thalf const & s3);
-
-			//////////////////////////////////////
-			// Swizzle constructors
-
-			tvec4(tref4<thalf> const & r);
-
-			//////////////////////////////////////
-			// Convertion scalar constructors
-
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec4(U const & x);
-			//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B, typename C, typename D> 
-			explicit tvec4(A const & x, B const & y, C const & z, D const & w);			
-
-			//////////////////////////////////////
-			// Convertion vector constructors
-
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B, typename C> 
-			explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B, typename C> 
-			explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B, typename C> 
-			explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B> 
-			explicit tvec4(tvec3<A> const & v, B const & s);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B> 
-			explicit tvec4(A const & s, tvec3<B> const & v);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename A, typename B> 
-			explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
-			//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-			template <typename U> 
-			explicit tvec4(tvec4<U> const & v);
-
-			//////////////////////////////////////
-			// Unary arithmetic operators
-
-			tvec4<thalf>& operator= (tvec4<thalf> const & v);
-
-			tvec4<thalf>& operator+=(thalf const & s);
-			tvec4<thalf>& operator+=(tvec4<thalf> const & v);
-			tvec4<thalf>& operator-=(thalf const & s);
-			tvec4<thalf>& operator-=(tvec4<thalf> const & v);
-			tvec4<thalf>& operator*=(thalf const & s);
-			tvec4<thalf>& operator*=(tvec4<thalf> const & v);
-			tvec4<thalf>& operator/=(thalf const & s);
-			tvec4<thalf>& operator/=(tvec4<thalf> const & v);
-			tvec4<thalf>& operator++();
-			tvec4<thalf>& operator--();
-
-			//////////////////////////////////////
-			// Swizzle operators
-
-			thalf swizzle(comp X) const;
-			tvec2<thalf> swizzle(comp X, comp Y) const;
-			tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
-			tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
-			tref4<thalf> swizzle(comp X, comp Y, comp Z, comp W);
-		};
+	template <>
+	struct tvec2<thalf>
+	{
+		enum ctor{null};
+		typedef thalf value_type;
+		typedef std::size_t size_type;
+		static size_type value_size();
+
+		typedef tvec2<thalf> type;
+		typedef tvec2<bool> bool_type;
+
+		//////////////////////////////////////
+		// Data
+
+		thalf x, y;
+
+		//////////////////////////////////////
+		// Accesses
+
+		thalf & operator[](size_type i);
+		thalf const & operator[](size_type i) const;
+
+		//////////////////////////////////////
+		// Implicit basic constructors
+
+		tvec2();
+		tvec2(tvec2<thalf> const & v);
+
+		//////////////////////////////////////
+		// Explicit basic constructors
+
+		explicit tvec2(ctor);
+		explicit tvec2(
+			thalf const & s);
+		explicit tvec2(
+			thalf const & s1, 
+			thalf const & s2);
+
+		//////////////////////////////////////
+		// Swizzle constructors
+
+		tvec2(tref2<thalf> const & r);
+
+		//////////////////////////////////////
+		// Convertion scalar constructors
+
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec2(U const & x);
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U, typename V> 
+		explicit tvec2(U const & x, V const & y);			
+
+		//////////////////////////////////////
+		// Convertion vector constructors
+
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec2(tvec2<U> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec2(tvec3<U> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec2(tvec4<U> const & v);
+
+		//////////////////////////////////////
+		// Unary arithmetic operators
+
+		tvec2<thalf>& operator= (tvec2<thalf> const & v);
+
+		tvec2<thalf>& operator+=(thalf const & s);
+		tvec2<thalf>& operator+=(tvec2<thalf> const & v);
+		tvec2<thalf>& operator-=(thalf const & s);
+		tvec2<thalf>& operator-=(tvec2<thalf> const & v);
+		tvec2<thalf>& operator*=(thalf const & s);
+		tvec2<thalf>& operator*=(tvec2<thalf> const & v);
+		tvec2<thalf>& operator/=(thalf const & s);
+		tvec2<thalf>& operator/=(tvec2<thalf> const & v);
+		tvec2<thalf>& operator++();
+		tvec2<thalf>& operator--();
+
+		//////////////////////////////////////
+		// Swizzle operators
+
+		thalf swizzle(comp X) const;
+		tvec2<thalf> swizzle(comp X, comp Y) const;
+		tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
+		tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
+		tref2<thalf> swizzle(comp X, comp Y);
+	};
+
+	template <>
+	struct tvec3<thalf>
+	{
+		enum ctor{null};
+		typedef thalf value_type;
+		typedef std::size_t size_type;
+		static size_type value_size();
+
+		typedef tvec3<thalf> type;
+		typedef tvec3<bool> bool_type;
+
+		//////////////////////////////////////
+		// Data
+
+		thalf x, y, z;
+
+		//////////////////////////////////////
+		// Accesses
+
+		thalf & operator[](size_type i);
+		thalf const & operator[](size_type i) const;
+
+		//////////////////////////////////////
+		// Implicit basic constructors
+
+		tvec3();
+		tvec3(tvec3<thalf> const & v);
+
+		//////////////////////////////////////
+		// Explicit basic constructors
+
+		explicit tvec3(ctor);
+		explicit tvec3(
+			thalf const & s);
+		explicit tvec3(
+			thalf const & s1, 
+			thalf const & s2, 
+			thalf const & s3);
+
+		//////////////////////////////////////
+		// Swizzle constructors
+
+		tvec3(tref3<thalf> const & r);
+
+		//////////////////////////////////////
+		// Convertion scalar constructors
+
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec3(U const & x);
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U, typename V, typename W> 
+		explicit tvec3(U const & x, V const & y, W const & z);			
+
+		//////////////////////////////////////
+		// Convertion vector constructors
+
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B> 
+		explicit tvec3(tvec2<A> const & v, B const & s);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B> 
+		explicit tvec3(A const & s, tvec2<B> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec3(tvec3<U> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec3(tvec4<U> const & v);
+
+		//////////////////////////////////////
+		// Unary arithmetic operators
+
+		tvec3<thalf>& operator= (tvec3<thalf> const & v);
+
+		tvec3<thalf>& operator+=(thalf const & s);
+		tvec3<thalf>& operator+=(tvec3<thalf> const & v);
+		tvec3<thalf>& operator-=(thalf const & s);
+		tvec3<thalf>& operator-=(tvec3<thalf> const & v);
+		tvec3<thalf>& operator*=(thalf const & s);
+		tvec3<thalf>& operator*=(tvec3<thalf> const & v);
+		tvec3<thalf>& operator/=(thalf const & s);
+		tvec3<thalf>& operator/=(tvec3<thalf> const & v);
+		tvec3<thalf>& operator++();
+		tvec3<thalf>& operator--();
+
+		//////////////////////////////////////
+		// Swizzle operators
+
+		thalf swizzle(comp X) const;
+		tvec2<thalf> swizzle(comp X, comp Y) const;
+		tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
+		tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
+		tref3<thalf> swizzle(comp X, comp Y, comp Z);
+	};
+
+	template <>
+	struct tvec4<thalf>
+	{
+		enum ctor{null};
+		typedef thalf value_type;
+		typedef std::size_t size_type;
+		static size_type value_size();
+
+		typedef tvec4<thalf> type;
+		typedef tvec4<bool> bool_type;
+
+		//////////////////////////////////////
+		// Data
+
+		thalf x, y, z, w;
+
+		//////////////////////////////////////
+		// Accesses
+
+		thalf & operator[](size_type i);
+		thalf const & operator[](size_type i) const;
+
+		//////////////////////////////////////
+		// Implicit basic constructors
+
+		tvec4();
+		tvec4(tvec4<thalf> const & v);
+
+		//////////////////////////////////////
+		// Explicit basic constructors
+
+		explicit tvec4(ctor);
+		explicit tvec4(
+			thalf const & s);
+		explicit tvec4(
+			thalf const & s0, 
+			thalf const & s1, 
+			thalf const & s2, 
+			thalf const & s3);
+
+		//////////////////////////////////////
+		// Swizzle constructors
+
+		tvec4(tref4<thalf> const & r);
+
+		//////////////////////////////////////
+		// Convertion scalar constructors
+
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec4(U const & x);
+		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B, typename C, typename D> 
+		explicit tvec4(A const & x, B const & y, C const & z, D const & w);			
+
+		//////////////////////////////////////
+		// Convertion vector constructors
+
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B, typename C> 
+		explicit tvec4(tvec2<A> const & v, B const & s1, C const & s2);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B, typename C> 
+		explicit tvec4(A const & s1, tvec2<B> const & v, C const & s2);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B, typename C> 
+		explicit tvec4(A const & s1, B const & s2, tvec2<C> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B> 
+		explicit tvec4(tvec3<A> const & v, B const & s);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B> 
+		explicit tvec4(A const & s, tvec3<B> const & v);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename A, typename B> 
+		explicit tvec4(tvec2<A> const & v1, tvec2<B> const & v2);
+		//! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+		template <typename U> 
+		explicit tvec4(tvec4<U> const & v);
+
+		//////////////////////////////////////
+		// Unary arithmetic operators
+
+		tvec4<thalf>& operator= (tvec4<thalf> const & v);
+
+		tvec4<thalf>& operator+=(thalf const & s);
+		tvec4<thalf>& operator+=(tvec4<thalf> const & v);
+		tvec4<thalf>& operator-=(thalf const & s);
+		tvec4<thalf>& operator-=(tvec4<thalf> const & v);
+		tvec4<thalf>& operator*=(thalf const & s);
+		tvec4<thalf>& operator*=(tvec4<thalf> const & v);
+		tvec4<thalf>& operator/=(thalf const & s);
+		tvec4<thalf>& operator/=(tvec4<thalf> const & v);
+		tvec4<thalf>& operator++();
+		tvec4<thalf>& operator--();
+
+		//////////////////////////////////////
+		// Swizzle operators
+
+		thalf swizzle(comp X) const;
+		tvec2<thalf> swizzle(comp X, comp Y) const;
+		tvec3<thalf> swizzle(comp X, comp Y, comp Z) const;
+		tvec4<thalf> swizzle(comp X, comp Y, comp Z, comp W) const;
+		tref4<thalf> swizzle(comp X, comp Y, comp Z, comp W);
+	};
 #endif//_MSC_EXTENSIONS
-	}
-	//namespace detail
+}
+//namespace detail
 
-	namespace gtc{
-	//! GLM_GTC_half_float extension: Add support for half precision floating-point types
-	namespace half_float
-	{
-		/// \addtogroup gtc_half_float
-		///@{
+namespace gtc{
+namespace half_float ///< GLM_GTC_half_float extension: Add support for half precision floating-point types
+{
+	/// \addtogroup gtc_half_float
+	///@{
 
-		//! Type for half-precision floating-point numbers. 
-		//! From GLM_GTC_half_float extension.
-		typedef detail::thalf					half;
+	/// Type for half-precision floating-point numbers. 
+	/// From GLM_GTC_half_float extension.
+	typedef detail::thalf					half;
 
-		//! Vector of 2 half-precision floating-point numbers. 
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tvec2<detail::thalf>	hvec2;
+	/// Vector of 2 half-precision floating-point numbers. 
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tvec2<detail::thalf>	hvec2;
 
-		//! Vector of 3 half-precision floating-point numbers.
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tvec3<detail::thalf>	hvec3;
+	/// Vector of 3 half-precision floating-point numbers.
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tvec3<detail::thalf>	hvec3;
 
-		//! Vector of 4 half-precision floating-point numbers. 
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tvec4<detail::thalf>	hvec4;
+	/// Vector of 4 half-precision floating-point numbers. 
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tvec4<detail::thalf>	hvec4;
 
-		//! 2 * 2 matrix of half-precision floating-point numbers.
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tmat2x2<detail::thalf>	hmat2;
+	/// 2 * 2 matrix of half-precision floating-point numbers.
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tmat2x2<detail::thalf>	hmat2;
 
-		//! 3 * 3 matrix of half-precision floating-point numbers.
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tmat3x3<detail::thalf>	hmat3;
+	/// 3 * 3 matrix of half-precision floating-point numbers.
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tmat3x3<detail::thalf>	hmat3;
 
-		//! 4 * 4 matrix of half-precision floating-point numbers.
-		//! From GLM_GTC_half_float extension.
-		typedef detail::tmat4x4<detail::thalf>	hmat4;
+	/// 4 * 4 matrix of half-precision floating-point numbers.
+	/// From GLM_GTC_half_float extension.
+	typedef detail::tmat4x4<detail::thalf>	hmat4;
 
-		///@}
+	/// @}
 
-	}//namespace half_float
-	}//namespace gtc
-}//namespace glm
+}// namespace half_float
+}// namespace gtc
+}// namespace glm
 
 #include "half_float.inl"
 

+ 1 - 2
glm/gtc/matrix_access.hpp

@@ -22,8 +22,7 @@
 
 namespace glm{
 namespace gtc{
-//! GLM_GTC_matrix_access extension: Set a column or a row of a matrix
-namespace matrix_access
+namespace matrix_access ///< GLM_GTC_matrix_access extension: Set a column or a row of a matrix
 {
 	/// \addtogroup gtc_matrix_access
 	///@{

+ 164 - 166
glm/gtc/matrix_integer.hpp

@@ -20,185 +20,183 @@
 #	pragma message("GLM: GLM_GTC_matrix_integer extension included")
 #endif
 
-namespace glm
+namespace glm{
+namespace gtc{
+namespace matrix_integer ///< GLM_GTC_matrix_integer extension: Add integer matrices
 {
-	namespace gtc{
-	//! GLM_GTC_matrix_integer extension: Add integer matrices
-	namespace matrix_integer
-	{
-		/// \addtogroup gtc_matrix_integer
-		///@{
-
-		typedef detail::tmat2x2<highp_int>				highp_imat2;	//!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<highp_int>				highp_imat3;	//!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<highp_int>				highp_imat4;	//!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<highp_int>				highp_imat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<highp_int>				highp_imat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<highp_int>				highp_imat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<highp_int>				highp_imat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<highp_int>				highp_imat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<highp_int>				highp_imat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<highp_int>				highp_imat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<highp_int>				highp_imat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<highp_int>				highp_imat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<mediump_int>			mediump_imat2;	//!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<mediump_int>			mediump_imat3;	//!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<mediump_int>			mediump_imat4;	//!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<mediump_int>			mediump_imat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<mediump_int>			mediump_imat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<mediump_int>			mediump_imat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<mediump_int>			mediump_imat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<mediump_int>			mediump_imat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<mediump_int>			mediump_imat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<mediump_int>			mediump_imat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<mediump_int>			mediump_imat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<mediump_int>			mediump_imat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<lowp_int>				lowp_imat2;	//!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<lowp_int>				lowp_imat3;	//!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<lowp_int>				lowp_imat4;	//!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<lowp_int>				lowp_imat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<lowp_int>				lowp_imat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<lowp_int>				lowp_imat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<lowp_int>				lowp_imat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<lowp_int>				lowp_imat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<lowp_int>				lowp_imat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<lowp_int>				lowp_imat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<lowp_int>				lowp_imat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<lowp_int>				lowp_imat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<highp_uint>				highp_umat2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<highp_uint>				highp_umat3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<highp_uint>				highp_umat4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<highp_uint>				highp_umat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<highp_uint>				highp_umat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<highp_uint>				highp_umat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<highp_uint>				highp_umat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<highp_uint>				highp_umat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<highp_uint>				highp_umat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<highp_uint>				highp_umat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<highp_uint>				highp_umat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<highp_uint>				highp_umat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<mediump_uint>			mediump_umat2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<mediump_uint>			mediump_umat3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<mediump_uint>			mediump_umat4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<mediump_uint>			mediump_umat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<mediump_uint>			mediump_umat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<mediump_uint>			mediump_umat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<mediump_uint>			mediump_umat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<mediump_uint>			mediump_umat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<mediump_uint>			mediump_umat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<mediump_uint>			mediump_umat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<mediump_uint>			mediump_umat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<mediump_uint>			mediump_umat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<lowp_uint>				lowp_umat2;	//!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<lowp_uint>				lowp_umat3;	//!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<lowp_uint>				lowp_umat4;	//!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-
-		typedef detail::tmat2x2<lowp_uint>				lowp_umat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x3<lowp_uint>				lowp_umat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat2x4<lowp_uint>				lowp_umat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x2<lowp_uint>				lowp_umat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x3<lowp_uint>				lowp_umat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat3x4<lowp_uint>				lowp_umat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x2<lowp_uint>				lowp_umat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x3<lowp_uint>				lowp_umat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef detail::tmat4x4<lowp_uint>				lowp_umat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	/// \addtogroup gtc_matrix_integer
+	///@{
+
+	typedef detail::tmat2x2<highp_int>				highp_imat2;	//!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<highp_int>				highp_imat3;	//!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<highp_int>				highp_imat4;	//!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<highp_int>				highp_imat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<highp_int>				highp_imat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<highp_int>				highp_imat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<highp_int>				highp_imat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<highp_int>				highp_imat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<highp_int>				highp_imat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<highp_int>				highp_imat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<highp_int>				highp_imat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<highp_int>				highp_imat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<mediump_int>			mediump_imat2;	//!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<mediump_int>			mediump_imat3;	//!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<mediump_int>			mediump_imat4;	//!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<mediump_int>			mediump_imat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<mediump_int>			mediump_imat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<mediump_int>			mediump_imat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<mediump_int>			mediump_imat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<mediump_int>			mediump_imat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<mediump_int>			mediump_imat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<mediump_int>			mediump_imat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<mediump_int>			mediump_imat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<mediump_int>			mediump_imat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<lowp_int>				lowp_imat2;	//!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<lowp_int>				lowp_imat3;	//!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<lowp_int>				lowp_imat4;	//!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<lowp_int>				lowp_imat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<lowp_int>				lowp_imat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<lowp_int>				lowp_imat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<lowp_int>				lowp_imat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<lowp_int>				lowp_imat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<lowp_int>				lowp_imat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<lowp_int>				lowp_imat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<lowp_int>				lowp_imat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<lowp_int>				lowp_imat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<highp_uint>				highp_umat2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<highp_uint>				highp_umat3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<highp_uint>				highp_umat4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<highp_uint>				highp_umat2x2; //!< \brief High-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<highp_uint>				highp_umat2x3; //!< \brief High-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<highp_uint>				highp_umat2x4; //!< \brief High-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<highp_uint>				highp_umat3x2; //!< \brief High-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<highp_uint>				highp_umat3x3; //!< \brief High-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<highp_uint>				highp_umat3x4; //!< \brief High-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<highp_uint>				highp_umat4x2; //!< \brief High-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<highp_uint>				highp_umat4x3; //!< \brief High-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<highp_uint>				highp_umat4x4; //!< \brief High-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<mediump_uint>			mediump_umat2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<mediump_uint>			mediump_umat3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<mediump_uint>			mediump_umat4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<mediump_uint>			mediump_umat2x2; //!< \brief Medium-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<mediump_uint>			mediump_umat2x3; //!< \brief Medium-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<mediump_uint>			mediump_umat2x4; //!< \brief Medium-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<mediump_uint>			mediump_umat3x2; //!< \brief Medium-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<mediump_uint>			mediump_umat3x3; //!< \brief Medium-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<mediump_uint>			mediump_umat3x4; //!< \brief Medium-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<mediump_uint>			mediump_umat4x2; //!< \brief Medium-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<mediump_uint>			mediump_umat4x3; //!< \brief Medium-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<mediump_uint>			mediump_umat4x4; //!< \brief Medium-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<lowp_uint>				lowp_umat2;	//!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<lowp_uint>				lowp_umat3;	//!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<lowp_uint>				lowp_umat4;	//!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+
+	typedef detail::tmat2x2<lowp_uint>				lowp_umat2x2; //!< \brief Low-precision signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x3<lowp_uint>				lowp_umat2x3; //!< \brief Low-precision signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat2x4<lowp_uint>				lowp_umat2x4; //!< \brief Low-precision signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x2<lowp_uint>				lowp_umat3x2; //!< \brief Low-precision signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x3<lowp_uint>				lowp_umat3x3; //!< \brief Low-precision signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat3x4<lowp_uint>				lowp_umat3x4; //!< \brief Low-precision signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x2<lowp_uint>				lowp_umat4x2; //!< \brief Low-precision signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x3<lowp_uint>				lowp_umat4x3; //!< \brief Low-precision signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef detail::tmat4x4<lowp_uint>				lowp_umat4x4; //!< \brief Low-precision signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 
 #if(defined(GLM_PRECISION_HIGHP_INT))
-		typedef highp_imat2								imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat3								imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat4								imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat2								imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat3								imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat4								imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #elif(defined(GLM_PRECISION_LOWP_INT))
-		typedef lowp_imat2								imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat3								imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat4								imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat2								imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat3								imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat4								imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #else //if(defined(GLM_PRECISION_MEDIUMP_INT))
-		typedef mediump_imat2							imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat3							imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat4							imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat2							imat2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat3							imat3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat4							imat4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat2x2							imat2x2; //!< \brief Signed integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat2x3							imat2x3; //!< \brief Signed integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat2x4							imat2x4; //!< \brief Signed integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat3x2							imat3x2; //!< \brief Signed integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat3x3							imat3x3; //!< \brief Signed integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat3x4							imat3x4; //!< \brief Signed integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat4x2							imat4x2; //!< \brief Signed integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat4x3							imat4x3; //!< \brief Signed integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_imat4x4							imat4x4; //!< \brief Signed integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #endif//GLM_PRECISION
 
 #if(defined(GLM_PRECISION_HIGHP_UINT))
-		typedef highp_umat2								umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat3								umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat4								umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef highp_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat2								umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat3								umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat4								umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef highp_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #elif(defined(GLM_PRECISION_LOWP_UINT))
-		typedef lowp_umat2								umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat3								umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat4								umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef lowp_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat2								umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat3								umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat4								umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef lowp_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
-		typedef mediump_umat2							umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat3							umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat4							umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
-		typedef mediump_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat2							umat2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat3							umat3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat4							umat4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat2x2							umat2x2; //!< \brief Unsigned integer 2x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat2x3							umat2x3; //!< \brief Unsigned integer 2x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat2x4							umat2x4; //!< \brief Unsigned integer 2x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat3x2							umat3x2; //!< \brief Unsigned integer 3x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat3x3							umat3x3; //!< \brief Unsigned integer 3x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat3x4							umat3x4; //!< \brief Unsigned integer 3x4 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat4x2							umat4x2; //!< \brief Unsigned integer 4x2 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat4x3							umat4x3; //!< \brief Unsigned integer 4x3 matrix. (from GLM_GTC_matrix_integer extension)
+	typedef mediump_umat4x4							umat4x4; //!< \brief Unsigned integer 4x4 matrix. (from GLM_GTC_matrix_integer extension)
 #endif//GLM_PRECISION
 
-		///@}
+	///@}
 
-	}//namespace matrix_integer
-	}//namespace gtc
+}//namespace matrix_integer
+}//namespace gtc
 }//namespace glm
 
 namespace glm{using namespace gtc::matrix_integer;}

+ 1 - 2
glm/gtc/matrix_inverse.hpp

@@ -22,8 +22,7 @@
 
 namespace glm{
 namespace gtc{
-//! GLM_GTC_matrix_inverse extension: Inverse matrix functions
-namespace matrix_inverse
+namespace matrix_inverse ///< GLM_GTC_matrix_inverse extension: Inverse matrix functions
 {
 	/// \addtogroup gtc_matrix_inverse
 	///@{

+ 126 - 128
glm/gtc/matrix_transform.hpp

@@ -21,136 +21,134 @@
 #	pragma message("GLM: GLM_GTC_matrix_transform extension included")
 #endif
 
-namespace glm
+namespace glm{
+namespace gtc{
+namespace matrix_transform ///< GLM_GTC_matrix_transform extension: Add transformation matrices
 {
-	namespace gtc{
-	//! GLM_GTC_matrix_transform extension: Add transformation matrices
-	namespace matrix_transform
-	{
-		/// \addtogroup gtc_matrix_transform
-		///@{
-
-		//! Builds a translation 4 * 4 matrix created from a vector of 3 components.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> translate(
-			detail::tmat4x4<T> const & m,
-			detail::tvec3<T> const & v);
+	/// \addtogroup gtc_matrix_transform
+	///@{
+
+	//! Builds a translation 4 * 4 matrix created from a vector of 3 components.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> translate(
+		detail::tmat4x4<T> const & m,
+		detail::tvec3<T> const & v);
 		
-		//! Builds a rotation 4 * 4 matrix created from an axis vector and an angle expressed in degrees. 
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> rotate(
-			detail::tmat4x4<T> const & m,
-			T const & angle, 
-			detail::tvec3<T> const & v);
-
-		//! Builds a scale 4 * 4 matrix created from 3 scalars. 
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> scale(
-			detail::tmat4x4<T> const & m,
-			detail::tvec3<T> const & v);
-
-		//! Creates a matrix for an orthographic parallel viewing volume.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> ortho(
-			T const & left, 
-			T const & right, 
-			T const & bottom, 
-			T const & top, 
-			T const & zNear, 
-			T const & zFar);
-
-		//! Creates a matrix for projecting two-dimensional coordinates onto the screen.
-		//! From GLM_GTC_matrix_transform extension.
-        template <typename T> 
-		detail::tmat4x4<T> ortho(
-			T const & left, 
-			T const & right, 
-			T const & bottom, 
-			T const & top);
-
-		//! Creates a frustum matrix.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> frustum(
-			T const & left, 
-			T const & right, 
-			T const & bottom, 
-			T const & top, 
-			T const & nearVal, 
-			T const & farVal);
-
-		//! Creates a matrix for a symetric perspective-view frustum.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> perspective(
-			T const & fovy, 
-			T const & aspect, 
-			T const & zNear, 
-			T const & zFar);
-
-		//! Builds a perspective projection matrix based on a field of view
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename valType> 
-		detail::tmat4x4<valType> perspectiveFov(
-			valType const & fov, 
-			valType const & width, 
-			valType const & height, 
-			valType const & zNear, 
-			valType const & zFar);
-
-		//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite .
-		//! From GLM_GTC_matrix_transform extension.
-        template <typename T> 
-		detail::tmat4x4<T> infinitePerspective(
-			T fovy, T aspect, T zNear);
-
-		//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
-		//! From GLM_GTC_matrix_transform extension.
-        template <typename T> 
-		detail::tmat4x4<T> tweakedInfinitePerspective(
-			T fovy, T aspect, T zNear);
-
-		//! Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T, typename U> 
-		detail::tvec3<T> project(
-			detail::tvec3<T> const & obj, 
-			detail::tmat4x4<T> const & model, 
-			detail::tmat4x4<T> const & proj, 
-			detail::tvec4<U> const & viewport);
-
-		//! Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T, typename U> 
-		detail::tvec3<T> unProject(
-			detail::tvec3<T> const & win, 
-			detail::tmat4x4<T> const & model, 
-			detail::tmat4x4<T> const & proj, 
-			detail::tvec4<U> const & viewport);
-
-		//! Define a picking region
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T, typename U> 
-		detail::tmat4x4<T> pickMatrix(
-			detail::tvec2<T> const & center, 
-			detail::tvec2<T> const & delta, 
-			detail::tvec4<U> const & viewport);
-
-		//! Build a look at view matrix.
-		//! From GLM_GTC_matrix_transform extension.
-		template <typename T> 
-		detail::tmat4x4<T> lookAt(
-			detail::tvec3<T> const & eye, 
-			detail::tvec3<T> const & center, 
-			detail::tvec3<T> const & up);
-
-		///@}
-	}//namespace matrix_transform
-	}//namespace gtc
+	//! Builds a rotation 4 * 4 matrix created from an axis vector and an angle expressed in degrees. 
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> rotate(
+		detail::tmat4x4<T> const & m,
+		T const & angle, 
+		detail::tvec3<T> const & v);
+
+	//! Builds a scale 4 * 4 matrix created from 3 scalars. 
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> scale(
+		detail::tmat4x4<T> const & m,
+		detail::tvec3<T> const & v);
+
+	//! Creates a matrix for an orthographic parallel viewing volume.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> ortho(
+		T const & left, 
+		T const & right, 
+		T const & bottom, 
+		T const & top, 
+		T const & zNear, 
+		T const & zFar);
+
+	//! Creates a matrix for projecting two-dimensional coordinates onto the screen.
+	//! From GLM_GTC_matrix_transform extension.
+    template <typename T> 
+	detail::tmat4x4<T> ortho(
+		T const & left, 
+		T const & right, 
+		T const & bottom, 
+		T const & top);
+
+	//! Creates a frustum matrix.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> frustum(
+		T const & left, 
+		T const & right, 
+		T const & bottom, 
+		T const & top, 
+		T const & nearVal, 
+		T const & farVal);
+
+	//! Creates a matrix for a symetric perspective-view frustum.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> perspective(
+		T const & fovy, 
+		T const & aspect, 
+		T const & zNear, 
+		T const & zFar);
+
+	//! Builds a perspective projection matrix based on a field of view
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename valType> 
+	detail::tmat4x4<valType> perspectiveFov(
+		valType const & fov, 
+		valType const & width, 
+		valType const & height, 
+		valType const & zNear, 
+		valType const & zFar);
+
+	//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite .
+	//! From GLM_GTC_matrix_transform extension.
+    template <typename T> 
+	detail::tmat4x4<T> infinitePerspective(
+		T fovy, T aspect, T zNear);
+
+	//! Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
+	//! From GLM_GTC_matrix_transform extension.
+    template <typename T> 
+	detail::tmat4x4<T> tweakedInfinitePerspective(
+		T fovy, T aspect, T zNear);
+
+	//! Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T, typename U> 
+	detail::tvec3<T> project(
+		detail::tvec3<T> const & obj, 
+		detail::tmat4x4<T> const & model, 
+		detail::tmat4x4<T> const & proj, 
+		detail::tvec4<U> const & viewport);
+
+	//! Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T, typename U> 
+	detail::tvec3<T> unProject(
+		detail::tvec3<T> const & win, 
+		detail::tmat4x4<T> const & model, 
+		detail::tmat4x4<T> const & proj, 
+		detail::tvec4<U> const & viewport);
+
+	//! Define a picking region
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T, typename U> 
+	detail::tmat4x4<T> pickMatrix(
+		detail::tvec2<T> const & center, 
+		detail::tvec2<T> const & delta, 
+		detail::tvec4<U> const & viewport);
+
+	//! Build a look at view matrix.
+	//! From GLM_GTC_matrix_transform extension.
+	template <typename T> 
+	detail::tmat4x4<T> lookAt(
+		detail::tvec3<T> const & eye, 
+		detail::tvec3<T> const & center, 
+		detail::tvec3<T> const & up);
+
+	///@}
+}//namespace matrix_transform
+}//namespace gtc
 }//namespace glm
 
 #include "matrix_transform.inl"

+ 189 - 191
glm/gtc/quaternion.hpp

@@ -26,202 +26,200 @@
 #	pragma message("GLM: GLM_GTC_quaternion extension included")
 #endif
 
-namespace glm
+namespace glm{
+namespace detail
 {
-	namespace detail
+	//! \brief Template for quaternion. 
+	//! From GLM_GTC_quaternion extension.
+	/// \ingroup gtc_quaternion
+	template <typename T> 
+	struct tquat// : public genType<T, tquat>
 	{
-		//! \brief Template for quaternion. 
-		//! From GLM_GTC_quaternion extension.
-		/// \ingroup gtc_quaternion
-		template <typename T> 
-		struct tquat// : public genType<T, tquat>
-		{
-			typedef T value_type;
-
-		public:
-			value_type x, y, z, w;
-
-			// Constructors
-			tquat();
-			explicit tquat(
-				value_type const & s, 
-				tvec3<T> const & v);
-			explicit tquat(
-				value_type const & w, 
-				value_type const & x, 
-				value_type const & y, 
-				value_type const & z);
-
-			// Convertions
-			//explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
-			//! pitch, yaw, roll
-			explicit tquat(
-				tvec3<T> const & eulerAngles);
-			explicit tquat(
-				tmat3x3<T> const & m);
-			explicit tquat(
-				tmat4x4<T> const & m);
-
-			// Accesses
-			value_type & operator[](int i);
-			value_type const & operator[](int i) const;
-
-			// Operators
-			tquat<T> & operator*=(value_type const & s);
-			tquat<T> & operator/=(value_type const & s);
-		};
-
-		template <typename T> 
-		detail::tquat<T> operator- (
-			detail::tquat<T> const & q);
-
-		template <typename T> 
-		detail::tquat<T> operator* ( 
-			detail::tquat<T> const & q, 
-			detail::tquat<T> const & p); 
-
-		template <typename T> 
-		detail::tvec3<T> operator* (
-			detail::tquat<T> const & q, 
-			detail::tvec3<T> const & v);
-
-		template <typename T> 
-		detail::tvec3<T> operator* (
-			detail::tvec3<T> const & v,
-			detail::tquat<T> const & q);
-
-		template <typename T> 
-		detail::tvec4<T> operator* (
-			detail::tquat<T> const & q, 
-			detail::tvec4<T> const & v);
-
-		template <typename T> 
-		detail::tvec4<T> operator* (
-			detail::tvec4<T> const & v,
-			detail::tquat<T> const & q);
-
-		template <typename T> 
-		detail::tquat<T> operator* (
-			detail::tquat<T> const & q, 
-			typename detail::tquat<T>::value_type const & s);
-
-		template <typename T> 
-		detail::tquat<T> operator* (
-			typename detail::tquat<T>::value_type const & s,
-			detail::tquat<T> const & q);
-
-		template <typename T> 
-		detail::tquat<T> operator/ (
-			detail::tquat<T> const & q, 
-			typename detail::tquat<T>::value_type const & s);
-
-	} //namespace detail
-
-	namespace gtc{
-	//! GLM_GTC_quaternion extension: Quaternion types and functions
-    namespace quaternion
-    {
-		/// \addtogroup gtc_quaternion
-		///@{
-
-		//! Returns the length of the quaternion x. 
-		//! From GLM_GTC_quaternion extension.
-        template <typename T> 
-		typename detail::tquat<T>::value_type length(
-			detail::tquat<T> const & q);
-
-        //! Returns the normalized quaternion of from x. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tquat<T> normalize(
-			detail::tquat<T> const & q);
+		typedef T value_type;
+
+	public:
+		value_type x, y, z, w;
+
+		// Constructors
+		tquat();
+		explicit tquat(
+			value_type const & s, 
+			tvec3<T> const & v);
+		explicit tquat(
+			value_type const & w, 
+			value_type const & x, 
+			value_type const & y, 
+			value_type const & z);
+
+		// Convertions
+		//explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
+		//! pitch, yaw, roll
+		explicit tquat(
+			tvec3<T> const & eulerAngles);
+		explicit tquat(
+			tmat3x3<T> const & m);
+		explicit tquat(
+			tmat4x4<T> const & m);
+
+		// Accesses
+		value_type & operator[](int i);
+		value_type const & operator[](int i) const;
+
+		// Operators
+		tquat<T> & operator*=(value_type const & s);
+		tquat<T> & operator/=(value_type const & s);
+	};
+
+	template <typename T> 
+	detail::tquat<T> operator- (
+		detail::tquat<T> const & q);
+
+	template <typename T> 
+	detail::tquat<T> operator* ( 
+		detail::tquat<T> const & q, 
+		detail::tquat<T> const & p); 
+
+	template <typename T> 
+	detail::tvec3<T> operator* (
+		detail::tquat<T> const & q, 
+		detail::tvec3<T> const & v);
+
+	template <typename T> 
+	detail::tvec3<T> operator* (
+		detail::tvec3<T> const & v,
+		detail::tquat<T> const & q);
+
+	template <typename T> 
+	detail::tvec4<T> operator* (
+		detail::tquat<T> const & q, 
+		detail::tvec4<T> const & v);
+
+	template <typename T> 
+	detail::tvec4<T> operator* (
+		detail::tvec4<T> const & v,
+		detail::tquat<T> const & q);
+
+	template <typename T> 
+	detail::tquat<T> operator* (
+		detail::tquat<T> const & q, 
+		typename detail::tquat<T>::value_type const & s);
+
+	template <typename T> 
+	detail::tquat<T> operator* (
+		typename detail::tquat<T>::value_type const & s,
+		detail::tquat<T> const & q);
+
+	template <typename T> 
+	detail::tquat<T> operator/ (
+		detail::tquat<T> const & q, 
+		typename detail::tquat<T>::value_type const & s);
+
+} //namespace detail
+
+namespace gtc{
+namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and functions
+{
+	/// \addtogroup gtc_quaternion
+	///@{
+
+	//! Returns the length of the quaternion x. 
+	//! From GLM_GTC_quaternion extension.
+    template <typename T> 
+	typename detail::tquat<T>::value_type length(
+		detail::tquat<T> const & q);
+
+    //! Returns the normalized quaternion of from x. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tquat<T> normalize(
+		detail::tquat<T> const & q);
 		
-        //! Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		typename detail::tquat<T>::value_type dot(
-			detail::tquat<T> const & q1, 
-			detail::tquat<T> const & q2);
-
-        //! Returns the cross product of q1 and q2. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		GLM_DEPRECATED detail::tquat<T> cross(
-			detail::tquat<T> const & q1, 
-			detail::tquat<T> const & q2);
+    //! Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	typename detail::tquat<T>::value_type dot(
+		detail::tquat<T> const & q1, 
+		detail::tquat<T> const & q2);
+
+    //! Returns the cross product of q1 and q2. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	GLM_DEPRECATED detail::tquat<T> cross(
+		detail::tquat<T> const & q1, 
+		detail::tquat<T> const & q2);
 		
-		//! Returns a SLERP interpolated quaternion of x and y according a. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tquat<T> mix(
-			detail::tquat<T> const & x, 
-			detail::tquat<T> const & y, 
-			typename detail::tquat<T>::value_type const & a);
+	//! Returns a SLERP interpolated quaternion of x and y according a. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tquat<T> mix(
+		detail::tquat<T> const & x, 
+		detail::tquat<T> const & y, 
+		typename detail::tquat<T>::value_type const & a);
 		
-		//! Returns the q conjugate. 
-		//! From GLM_GTC_quaternion extension.
-        template <typename T> 
-		detail::tquat<T> conjugate(
-			detail::tquat<T> const & q);
-
-		//! Returns the q inverse. 
-		//! From GLM_GTC_quaternion extension.
-        template <typename T> 
-		detail::tquat<T> inverse(
-			detail::tquat<T> const & q);
-
-		//! Rotates a quaternion from an vector of 3 components axis and an angle expressed in degrees.
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tquat<T> rotate(
-			detail::tquat<T> const & q, 
-			typename detail::tquat<T>::value_type const & angle, 
-			detail::tvec3<T> const & v);
-
-		//! Converts a quaternion to a 3 * 3 matrix. 
-		//! From GLM_GTC_quaternion extension.
-        template <typename T> 
-		detail::tmat3x3<T> mat3_cast(
-			detail::tquat<T> const & x);
-
-		//! Converts a quaternion to a 4 * 4 matrix. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tmat4x4<T> mat4_cast(
-			detail::tquat<T> const & x);
-
-		//! Converts a 3 * 3 matrix to a quaternion. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tquat<T> quat_cast(
-			detail::tmat3x3<T> const & x);
-
-		//! Converts a 4 * 4 matrix to a quaternion. 
-		//! From GLM_GTC_quaternion extension.
-		template <typename T> 
-		detail::tquat<T> quat_cast(
-			detail::tmat4x4<T> const & x);
-
-		//! Quaternion of floating-point numbers. 
-		//! From GLM_GTC_quaternion extension.
-        typedef detail::tquat<float> quat;
-
-		//! Quaternion of half-precision floating-point numbers.
-		//! From GLM_GTC_quaternion extension.
-		typedef detail::tquat<detail::thalf>	hquat;
-
-		//! Quaternion of single-precision floating-point numbers. 
-		//! From GLM_GTC_quaternion extension.
-		typedef detail::tquat<float>	fquat;
-
-		//! Quaternion of double-precision floating-point numbers. 
-		//! From GLM_GTC_quaternion extension.
-		typedef detail::tquat<double>	dquat;
-
-		///@}
-
-    }//namespace quaternion
-    }//namespace gtc
+	//! Returns the q conjugate. 
+	//! From GLM_GTC_quaternion extension.
+    template <typename T> 
+	detail::tquat<T> conjugate(
+		detail::tquat<T> const & q);
+
+	//! Returns the q inverse. 
+	//! From GLM_GTC_quaternion extension.
+    template <typename T> 
+	detail::tquat<T> inverse(
+		detail::tquat<T> const & q);
+
+	//! Rotates a quaternion from an vector of 3 components axis and an angle expressed in degrees.
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tquat<T> rotate(
+		detail::tquat<T> const & q, 
+		typename detail::tquat<T>::value_type const & angle, 
+		detail::tvec3<T> const & v);
+
+	//! Converts a quaternion to a 3 * 3 matrix. 
+	//! From GLM_GTC_quaternion extension.
+    template <typename T> 
+	detail::tmat3x3<T> mat3_cast(
+		detail::tquat<T> const & x);
+
+	//! Converts a quaternion to a 4 * 4 matrix. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tmat4x4<T> mat4_cast(
+		detail::tquat<T> const & x);
+
+	//! Converts a 3 * 3 matrix to a quaternion. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tquat<T> quat_cast(
+		detail::tmat3x3<T> const & x);
+
+	//! Converts a 4 * 4 matrix to a quaternion. 
+	//! From GLM_GTC_quaternion extension.
+	template <typename T> 
+	detail::tquat<T> quat_cast(
+		detail::tmat4x4<T> const & x);
+
+	//! Quaternion of floating-point numbers. 
+	//! From GLM_GTC_quaternion extension.
+    typedef detail::tquat<float> quat;
+
+	//! Quaternion of half-precision floating-point numbers.
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<detail::thalf>	hquat;
+
+	//! Quaternion of single-precision floating-point numbers. 
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<float>	fquat;
+
+	//! Quaternion of double-precision floating-point numbers. 
+	//! From GLM_GTC_quaternion extension.
+	typedef detail::tquat<double>	dquat;
+
+	///@}
+
+} //namespace quaternion
+} //namespace gtc
 } //namespace glm
 
 #include "quaternion.inl"

+ 299 - 301
glm/gtc/swizzle.hpp

@@ -21,329 +21,327 @@
 #	pragma message("GLM: GLM_GTC_swizzle extension included")
 #endif
 
-namespace glm
+namespace glm{
+namespace gtc{
+namespace swizzle ///< GLM_GTC_swizzle extension
 {
-	namespace gtc{
-	//! GLM_GTC_swizzle extension
-	namespace swizzle
-	{
-		using namespace gtc::half_float;
-
-		template <typename T, template <typename> class vecType>
-		T const & swizzle(	
-			vecType<T> const & v,
-			comp x);
-
-		template <typename T, template <typename> class vecType>
-		detail::tvec2<T> const & swizzle(
-			vecType<T> const & v,
-			comp x, comp y);
-
-		template <typename T, template <typename> class vecType>
-		detail::tvec3<T> const & swizzle(
-			vecType<T> const & v,
-			comp x, comp y, comp z);
-
-		template <typename T, template <typename> class vecType>
-		detail::tvec4<T> const & swizzle(
-			vecType<T> const & v,
-			comp x, comp y, comp z, comp w);
-
-		template <typename T, template <typename> class vecType>
-		T & swizzle(
-			vecType<T> & v,
-			comp x);
-
-		template <typename T, template <typename> class vecType>
-		detail::tref2<T> swizzle(
-			vecType<T> & v,
-			comp x, comp y);
-
-		template <typename T, template <typename> class vecType>
-		detail::tref3<T> swizzle(
-			vecType<T> & v,
-			comp x, comp y, comp z);
-
-		template <typename T, template <typename> class vecType>
-		detail::tref4<T> swizzle(
-			vecType<T> & v,
-			comp x, comp y, comp z, comp w);
+	using namespace gtc::half_float;
+
+	template <typename T, template <typename> class vecType>
+	T const & swizzle(	
+		vecType<T> const & v,
+		comp x);
+
+	template <typename T, template <typename> class vecType>
+	detail::tvec2<T> const & swizzle(
+		vecType<T> const & v,
+		comp x, comp y);
+
+	template <typename T, template <typename> class vecType>
+	detail::tvec3<T> const & swizzle(
+		vecType<T> const & v,
+		comp x, comp y, comp z);
+
+	template <typename T, template <typename> class vecType>
+	detail::tvec4<T> const & swizzle(
+		vecType<T> const & v,
+		comp x, comp y, comp z, comp w);
+
+	template <typename T, template <typename> class vecType>
+	T & swizzle(
+		vecType<T> & v,
+		comp x);
+
+	template <typename T, template <typename> class vecType>
+	detail::tref2<T> swizzle(
+		vecType<T> & v,
+		comp x, comp y);
+
+	template <typename T, template <typename> class vecType>
+	detail::tref3<T> swizzle(
+		vecType<T> & v,
+		comp x, comp y, comp z);
+
+	template <typename T, template <typename> class vecType>
+	detail::tref4<T> swizzle(
+		vecType<T> & v,
+		comp x, comp y, comp z, comp w);
 
 #		define static_swizzle1(TYPE, SIZE)							\
-			template <comp x>										\
-			GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v)	\
-			{return v[x];}											\
-																	\
-			template <comp x>										\
-			GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v)		\
-			{return v[x];}
-
-		static_swizzle1(detail::float16, 2)
-		static_swizzle1(detail::float16, 3)
-		static_swizzle1(detail::float16, 4)
-		static_swizzle1(detail::float32, 2)
-		static_swizzle1(detail::float32, 3)
-		static_swizzle1(detail::float32, 4)
-		static_swizzle1(detail::float64, 2)
-		static_swizzle1(detail::float64, 3)
-		static_swizzle1(detail::float64, 4)
-
-		static_swizzle1(detail::int8,  2)
-		static_swizzle1(detail::int8,  3)
-		static_swizzle1(detail::int8,  4)
-		static_swizzle1(detail::int16, 2)
-		static_swizzle1(detail::int16, 3)
-		static_swizzle1(detail::int16, 4)
-		static_swizzle1(detail::int32, 2)
-		static_swizzle1(detail::int32, 3)
-		static_swizzle1(detail::int32, 4)
-		static_swizzle1(detail::int64, 2)
-		static_swizzle1(detail::int64, 3)
-		static_swizzle1(detail::int64, 4)
-
-		static_swizzle1(detail::uint8,  2)
-		static_swizzle1(detail::uint8,  3)
-		static_swizzle1(detail::uint8,  4)
-		static_swizzle1(detail::uint16, 2)
-		static_swizzle1(detail::uint16, 3)
-		static_swizzle1(detail::uint16, 4)
-		static_swizzle1(detail::uint32, 2)
-		static_swizzle1(detail::uint32, 3)
-		static_swizzle1(detail::uint32, 4)
-		static_swizzle1(detail::uint64, 2)
-		static_swizzle1(detail::uint64, 3)
-		static_swizzle1(detail::uint64, 4)
+		template <comp x>										\
+		GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v)	\
+		{return v[x];}											\
+																\
+		template <comp x>										\
+		GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v)		\
+		{return v[x];}
+
+	static_swizzle1(detail::float16, 2)
+	static_swizzle1(detail::float16, 3)
+	static_swizzle1(detail::float16, 4)
+	static_swizzle1(detail::float32, 2)
+	static_swizzle1(detail::float32, 3)
+	static_swizzle1(detail::float32, 4)
+	static_swizzle1(detail::float64, 2)
+	static_swizzle1(detail::float64, 3)
+	static_swizzle1(detail::float64, 4)
+
+	static_swizzle1(detail::int8,  2)
+	static_swizzle1(detail::int8,  3)
+	static_swizzle1(detail::int8,  4)
+	static_swizzle1(detail::int16, 2)
+	static_swizzle1(detail::int16, 3)
+	static_swizzle1(detail::int16, 4)
+	static_swizzle1(detail::int32, 2)
+	static_swizzle1(detail::int32, 3)
+	static_swizzle1(detail::int32, 4)
+	static_swizzle1(detail::int64, 2)
+	static_swizzle1(detail::int64, 3)
+	static_swizzle1(detail::int64, 4)
+
+	static_swizzle1(detail::uint8,  2)
+	static_swizzle1(detail::uint8,  3)
+	static_swizzle1(detail::uint8,  4)
+	static_swizzle1(detail::uint16, 2)
+	static_swizzle1(detail::uint16, 3)
+	static_swizzle1(detail::uint16, 4)
+	static_swizzle1(detail::uint32, 2)
+	static_swizzle1(detail::uint32, 3)
+	static_swizzle1(detail::uint32, 4)
+	static_swizzle1(detail::uint64, 2)
+	static_swizzle1(detail::uint64, 3)
+	static_swizzle1(detail::uint64, 4)
 
 #		define static_swizzle2_const(TYPE) \
-			template <comp x, comp y> \
-			GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
-			{return TYPE(v[x], v[y]);}
+		template <comp x, comp y> \
+		GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+		{return TYPE(v[x], v[y]);}
 
 #		define static_swizzle3_const(TYPE) \
-			template <comp x, comp y, comp z> \
-			GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
-			{return TYPE(v[x], v[y], v[z]);}
+		template <comp x, comp y, comp z> \
+		GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+		{return TYPE(v[x], v[y], v[z]);}
 
 #		define static_swizzle4_const(TYPE) \
-			template <comp x, comp y, comp z, comp w> \
-			GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
-			{return TYPE(v[x], v[y], v[z], v[w]);}
+		template <comp x, comp y, comp z, comp w> \
+		GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
+		{return TYPE(v[x], v[y], v[z], v[w]);}
 /*
 #		define static_swizzle2_const(TYPE, SIZE)									\
-			template <comp x, comp y>												\
-			GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
-			{return detail::tvec2<TYPE>(v[x], v[y]);}
+		template <comp x, comp y>												\
+		GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
+		{return detail::tvec2<TYPE>(v[x], v[y]);}
 
 #		define static_swizzle3_const(TYPE, SIZE)									\
-			template <comp x, comp y, comp z>										\
-			GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
-			{return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
+		template <comp x, comp y, comp z>										\
+		GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
+		{return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
 
 #		define static_swizzle4_const(TYPE, SIZE)									\
-			template <comp x, comp y, comp z, comp w>								\
-			GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
-			{return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
+		template <comp x, comp y, comp z, comp w>								\
+		GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)	\
+		{return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
 */
-		static_swizzle2_const(glm::f16vec2)
-		static_swizzle2_const(glm::f16vec3)
-		static_swizzle2_const(glm::f16vec4)
-		static_swizzle2_const(glm::f32vec2)
-		static_swizzle2_const(glm::f32vec3)
-		static_swizzle2_const(glm::f32vec4)
-		static_swizzle2_const(glm::f64vec2)
-		static_swizzle2_const(glm::f64vec3)
-		static_swizzle2_const(glm::f64vec4)
-
-		static_swizzle2_const(glm::i8vec2)
-		static_swizzle2_const(glm::i8vec3)
-		static_swizzle2_const(glm::i8vec4)
-		static_swizzle2_const(glm::i16vec2)
-		static_swizzle2_const(glm::i16vec3)
-		static_swizzle2_const(glm::i16vec4)
-		static_swizzle2_const(glm::i32vec2)
-		static_swizzle2_const(glm::i32vec3)
-		static_swizzle2_const(glm::i32vec4)
-		static_swizzle2_const(glm::i64vec2)
-		static_swizzle2_const(glm::i64vec3)
-		static_swizzle2_const(glm::i64vec4)
-
-		static_swizzle2_const(glm::u8vec2)
-		static_swizzle2_const(glm::u8vec3)
-		static_swizzle2_const(glm::u8vec4)
-		static_swizzle2_const(glm::u16vec2)
-		static_swizzle2_const(glm::u16vec3)
-		static_swizzle2_const(glm::u16vec4)
-		static_swizzle2_const(glm::u32vec2)
-		static_swizzle2_const(glm::u32vec3)
-		static_swizzle2_const(glm::u32vec4)
-		static_swizzle2_const(glm::u64vec2)
-		static_swizzle2_const(glm::u64vec3)
-		static_swizzle2_const(glm::u64vec4)
-
-		static_swizzle3_const(glm::f16vec2)
-		static_swizzle3_const(glm::f16vec3)
-		static_swizzle3_const(glm::f16vec4)
-		static_swizzle3_const(glm::f32vec2)
-		static_swizzle3_const(glm::f32vec3)
-		static_swizzle3_const(glm::f32vec4)
-		static_swizzle3_const(glm::f64vec2)
-		static_swizzle3_const(glm::f64vec3)
-		static_swizzle3_const(glm::f64vec4)
-
-		static_swizzle3_const(glm::i8vec2)
-		static_swizzle3_const(glm::i8vec3)
-		static_swizzle3_const(glm::i8vec4)
-		static_swizzle3_const(glm::i16vec2)
-		static_swizzle3_const(glm::i16vec3)
-		static_swizzle3_const(glm::i16vec4)
-		static_swizzle3_const(glm::i32vec2)
-		static_swizzle3_const(glm::i32vec3)
-		static_swizzle3_const(glm::i32vec4)
-		static_swizzle3_const(glm::i64vec2)
-		static_swizzle3_const(glm::i64vec3)
-		static_swizzle3_const(glm::i64vec4)
-
-		static_swizzle3_const(glm::u8vec2)
-		static_swizzle3_const(glm::u8vec3)
-		static_swizzle3_const(glm::u8vec4)
-		static_swizzle3_const(glm::u16vec2)
-		static_swizzle3_const(glm::u16vec3)
-		static_swizzle3_const(glm::u16vec4)
-		static_swizzle3_const(glm::u32vec2)
-		static_swizzle3_const(glm::u32vec3)
-		static_swizzle3_const(glm::u32vec4)
-		static_swizzle3_const(glm::u64vec2)
-		static_swizzle3_const(glm::u64vec3)
-		static_swizzle3_const(glm::u64vec4)
-
-		static_swizzle4_const(glm::f16vec2)
-		static_swizzle4_const(glm::f16vec3)
-		static_swizzle4_const(glm::f16vec4)
-		static_swizzle4_const(glm::f32vec2)
-		static_swizzle4_const(glm::f32vec3)
-		static_swizzle4_const(glm::f32vec4)
-		static_swizzle4_const(glm::f64vec2)
-		static_swizzle4_const(glm::f64vec3)
-		static_swizzle4_const(glm::f64vec4)
-
-		static_swizzle4_const(glm::i8vec2)
-		static_swizzle4_const(glm::i8vec3)
-		static_swizzle4_const(glm::i8vec4)
-		static_swizzle4_const(glm::i16vec2)
-		static_swizzle4_const(glm::i16vec3)
-		static_swizzle4_const(glm::i16vec4)
-		static_swizzle4_const(glm::i32vec2)
-		static_swizzle4_const(glm::i32vec3)
-		static_swizzle4_const(glm::i32vec4)
-		static_swizzle4_const(glm::i64vec2)
-		static_swizzle4_const(glm::i64vec3)
-		static_swizzle4_const(glm::i64vec4)
-
-		static_swizzle4_const(glm::u8vec2)
-		static_swizzle4_const(glm::u8vec3)
-		static_swizzle4_const(glm::u8vec4)
-		static_swizzle4_const(glm::u16vec2)
-		static_swizzle4_const(glm::u16vec3)
-		static_swizzle4_const(glm::u16vec4)
-		static_swizzle4_const(glm::u32vec2)
-		static_swizzle4_const(glm::u32vec3)
-		static_swizzle4_const(glm::u32vec4)
-		static_swizzle4_const(glm::u64vec2)
-		static_swizzle4_const(glm::u64vec3)
-		static_swizzle4_const(glm::u64vec4)
+	static_swizzle2_const(glm::f16vec2)
+	static_swizzle2_const(glm::f16vec3)
+	static_swizzle2_const(glm::f16vec4)
+	static_swizzle2_const(glm::f32vec2)
+	static_swizzle2_const(glm::f32vec3)
+	static_swizzle2_const(glm::f32vec4)
+	static_swizzle2_const(glm::f64vec2)
+	static_swizzle2_const(glm::f64vec3)
+	static_swizzle2_const(glm::f64vec4)
+
+	static_swizzle2_const(glm::i8vec2)
+	static_swizzle2_const(glm::i8vec3)
+	static_swizzle2_const(glm::i8vec4)
+	static_swizzle2_const(glm::i16vec2)
+	static_swizzle2_const(glm::i16vec3)
+	static_swizzle2_const(glm::i16vec4)
+	static_swizzle2_const(glm::i32vec2)
+	static_swizzle2_const(glm::i32vec3)
+	static_swizzle2_const(glm::i32vec4)
+	static_swizzle2_const(glm::i64vec2)
+	static_swizzle2_const(glm::i64vec3)
+	static_swizzle2_const(glm::i64vec4)
+
+	static_swizzle2_const(glm::u8vec2)
+	static_swizzle2_const(glm::u8vec3)
+	static_swizzle2_const(glm::u8vec4)
+	static_swizzle2_const(glm::u16vec2)
+	static_swizzle2_const(glm::u16vec3)
+	static_swizzle2_const(glm::u16vec4)
+	static_swizzle2_const(glm::u32vec2)
+	static_swizzle2_const(glm::u32vec3)
+	static_swizzle2_const(glm::u32vec4)
+	static_swizzle2_const(glm::u64vec2)
+	static_swizzle2_const(glm::u64vec3)
+	static_swizzle2_const(glm::u64vec4)
+
+	static_swizzle3_const(glm::f16vec2)
+	static_swizzle3_const(glm::f16vec3)
+	static_swizzle3_const(glm::f16vec4)
+	static_swizzle3_const(glm::f32vec2)
+	static_swizzle3_const(glm::f32vec3)
+	static_swizzle3_const(glm::f32vec4)
+	static_swizzle3_const(glm::f64vec2)
+	static_swizzle3_const(glm::f64vec3)
+	static_swizzle3_const(glm::f64vec4)
+
+	static_swizzle3_const(glm::i8vec2)
+	static_swizzle3_const(glm::i8vec3)
+	static_swizzle3_const(glm::i8vec4)
+	static_swizzle3_const(glm::i16vec2)
+	static_swizzle3_const(glm::i16vec3)
+	static_swizzle3_const(glm::i16vec4)
+	static_swizzle3_const(glm::i32vec2)
+	static_swizzle3_const(glm::i32vec3)
+	static_swizzle3_const(glm::i32vec4)
+	static_swizzle3_const(glm::i64vec2)
+	static_swizzle3_const(glm::i64vec3)
+	static_swizzle3_const(glm::i64vec4)
+
+	static_swizzle3_const(glm::u8vec2)
+	static_swizzle3_const(glm::u8vec3)
+	static_swizzle3_const(glm::u8vec4)
+	static_swizzle3_const(glm::u16vec2)
+	static_swizzle3_const(glm::u16vec3)
+	static_swizzle3_const(glm::u16vec4)
+	static_swizzle3_const(glm::u32vec2)
+	static_swizzle3_const(glm::u32vec3)
+	static_swizzle3_const(glm::u32vec4)
+	static_swizzle3_const(glm::u64vec2)
+	static_swizzle3_const(glm::u64vec3)
+	static_swizzle3_const(glm::u64vec4)
+
+	static_swizzle4_const(glm::f16vec2)
+	static_swizzle4_const(glm::f16vec3)
+	static_swizzle4_const(glm::f16vec4)
+	static_swizzle4_const(glm::f32vec2)
+	static_swizzle4_const(glm::f32vec3)
+	static_swizzle4_const(glm::f32vec4)
+	static_swizzle4_const(glm::f64vec2)
+	static_swizzle4_const(glm::f64vec3)
+	static_swizzle4_const(glm::f64vec4)
+
+	static_swizzle4_const(glm::i8vec2)
+	static_swizzle4_const(glm::i8vec3)
+	static_swizzle4_const(glm::i8vec4)
+	static_swizzle4_const(glm::i16vec2)
+	static_swizzle4_const(glm::i16vec3)
+	static_swizzle4_const(glm::i16vec4)
+	static_swizzle4_const(glm::i32vec2)
+	static_swizzle4_const(glm::i32vec3)
+	static_swizzle4_const(glm::i32vec4)
+	static_swizzle4_const(glm::i64vec2)
+	static_swizzle4_const(glm::i64vec3)
+	static_swizzle4_const(glm::i64vec4)
+
+	static_swizzle4_const(glm::u8vec2)
+	static_swizzle4_const(glm::u8vec3)
+	static_swizzle4_const(glm::u8vec4)
+	static_swizzle4_const(glm::u16vec2)
+	static_swizzle4_const(glm::u16vec3)
+	static_swizzle4_const(glm::u16vec4)
+	static_swizzle4_const(glm::u32vec2)
+	static_swizzle4_const(glm::u32vec3)
+	static_swizzle4_const(glm::u32vec4)
+	static_swizzle4_const(glm::u64vec2)
+	static_swizzle4_const(glm::u64vec3)
+	static_swizzle4_const(glm::u64vec4)
 
 #		define static_swizzle2_ref(TYPE) \
-			template <glm::comp x, glm::comp y> \
-			GLM_FUNC_QUALIFIER glm::detail::tref2<typename TYPE::value_type> swizzle(TYPE & v) \
-			{return glm::detail::tref2<typename TYPE::value_type>(v[x], v[y]);}	
+		template <glm::comp x, glm::comp y> \
+		GLM_FUNC_QUALIFIER glm::detail::tref2<typename TYPE::value_type> swizzle(TYPE & v) \
+		{return glm::detail::tref2<typename TYPE::value_type>(v[x], v[y]);}	
 
 #		define static_swizzle3_ref(TYPE) \
-			template <glm::comp x, glm::comp y, glm::comp z> \
-			GLM_FUNC_QUALIFIER glm::detail::tref3<typename TYPE::value_type> swizzle(TYPE & v) \
-			{return glm::detail::tref3<typename TYPE::value_type>(v[x], v[y], v[z]);}	
+		template <glm::comp x, glm::comp y, glm::comp z> \
+		GLM_FUNC_QUALIFIER glm::detail::tref3<typename TYPE::value_type> swizzle(TYPE & v) \
+		{return glm::detail::tref3<typename TYPE::value_type>(v[x], v[y], v[z]);}	
 
 #		define static_swizzle4_ref(TYPE) \
-			template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
-			GLM_FUNC_QUALIFIER glm::detail::tref4<typename TYPE::value_type> swizzle(TYPE & v) \
-			{return glm::detail::tref4<typename TYPE::value_type>(v[x], v[y], v[z], v[w]);}	
-
-		static_swizzle2_ref(glm::f16vec2)
-		static_swizzle2_ref(glm::f16vec3)
-		static_swizzle2_ref(glm::f16vec4)
-		static_swizzle2_ref(glm::f32vec2)
-		static_swizzle2_ref(glm::f32vec3)
-		static_swizzle2_ref(glm::f32vec4)
-		static_swizzle2_ref(glm::f64vec2)
-		static_swizzle2_ref(glm::f64vec3)
-		static_swizzle2_ref(glm::f64vec4)
-
-		static_swizzle2_ref(glm::i8vec2)
-		static_swizzle2_ref(glm::i8vec3)
-		static_swizzle2_ref(glm::i8vec4)
-		static_swizzle2_ref(glm::i16vec2)
-		static_swizzle2_ref(glm::i16vec3)
-		static_swizzle2_ref(glm::i16vec4)
-		static_swizzle2_ref(glm::i32vec2)
-		static_swizzle2_ref(glm::i32vec3)
-		static_swizzle2_ref(glm::i32vec4)
-		static_swizzle2_ref(glm::i64vec2)
-		static_swizzle2_ref(glm::i64vec3)
-		static_swizzle2_ref(glm::i64vec4)
-
-		static_swizzle2_ref(glm::u8vec2)
-		static_swizzle2_ref(glm::u8vec3)
-		static_swizzle2_ref(glm::u8vec4)
-		static_swizzle2_ref(glm::u16vec2)
-		static_swizzle2_ref(glm::u16vec3)
-		static_swizzle2_ref(glm::u16vec4)
-		static_swizzle2_ref(glm::u32vec2)
-		static_swizzle2_ref(glm::u32vec3)
-		static_swizzle2_ref(glm::u32vec4)
-		static_swizzle2_ref(glm::u64vec2)
-		static_swizzle2_ref(glm::u64vec3)
-		static_swizzle2_ref(glm::u64vec4)
-
-		static_swizzle3_ref(glm::f16vec3)
-		static_swizzle3_ref(glm::f16vec4)
-		static_swizzle3_ref(glm::f32vec3)
-		static_swizzle3_ref(glm::f32vec4)
-		static_swizzle3_ref(glm::f64vec3)
-		static_swizzle3_ref(glm::f64vec4)
-
-		static_swizzle3_ref(glm::i8vec3)
-		static_swizzle3_ref(glm::i8vec4)
-		static_swizzle3_ref(glm::i16vec3)
-		static_swizzle3_ref(glm::i16vec4)
-		static_swizzle3_ref(glm::i32vec3)
-		static_swizzle3_ref(glm::i32vec4)
-		static_swizzle3_ref(glm::i64vec3)
-		static_swizzle3_ref(glm::i64vec4)
-
-		static_swizzle3_ref(glm::u8vec3)
-		static_swizzle3_ref(glm::u8vec4)
-		static_swizzle3_ref(glm::u16vec3)
-		static_swizzle3_ref(glm::u16vec4)
-		static_swizzle3_ref(glm::u32vec3)
-		static_swizzle3_ref(glm::u32vec4)
-		static_swizzle3_ref(glm::u64vec3)
-		static_swizzle3_ref(glm::u64vec4)
-
-		static_swizzle4_ref(glm::f16vec4)
-		static_swizzle4_ref(glm::f32vec4)
-		static_swizzle4_ref(glm::f64vec4)
-
-		static_swizzle4_ref(glm::i8vec4)
-		static_swizzle4_ref(glm::i16vec4)
-		static_swizzle4_ref(glm::i32vec4)
-		static_swizzle4_ref(glm::i64vec4)
-
-		static_swizzle4_ref(glm::u8vec4)
-		static_swizzle4_ref(glm::u16vec4)
-		static_swizzle4_ref(glm::u32vec4)
-		static_swizzle4_ref(glm::u64vec4)
-
-	}//namespace swizzle
-	}//namespace gtc
+		template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
+		GLM_FUNC_QUALIFIER glm::detail::tref4<typename TYPE::value_type> swizzle(TYPE & v) \
+		{return glm::detail::tref4<typename TYPE::value_type>(v[x], v[y], v[z], v[w]);}	
+
+	static_swizzle2_ref(glm::f16vec2)
+	static_swizzle2_ref(glm::f16vec3)
+	static_swizzle2_ref(glm::f16vec4)
+	static_swizzle2_ref(glm::f32vec2)
+	static_swizzle2_ref(glm::f32vec3)
+	static_swizzle2_ref(glm::f32vec4)
+	static_swizzle2_ref(glm::f64vec2)
+	static_swizzle2_ref(glm::f64vec3)
+	static_swizzle2_ref(glm::f64vec4)
+
+	static_swizzle2_ref(glm::i8vec2)
+	static_swizzle2_ref(glm::i8vec3)
+	static_swizzle2_ref(glm::i8vec4)
+	static_swizzle2_ref(glm::i16vec2)
+	static_swizzle2_ref(glm::i16vec3)
+	static_swizzle2_ref(glm::i16vec4)
+	static_swizzle2_ref(glm::i32vec2)
+	static_swizzle2_ref(glm::i32vec3)
+	static_swizzle2_ref(glm::i32vec4)
+	static_swizzle2_ref(glm::i64vec2)
+	static_swizzle2_ref(glm::i64vec3)
+	static_swizzle2_ref(glm::i64vec4)
+
+	static_swizzle2_ref(glm::u8vec2)
+	static_swizzle2_ref(glm::u8vec3)
+	static_swizzle2_ref(glm::u8vec4)
+	static_swizzle2_ref(glm::u16vec2)
+	static_swizzle2_ref(glm::u16vec3)
+	static_swizzle2_ref(glm::u16vec4)
+	static_swizzle2_ref(glm::u32vec2)
+	static_swizzle2_ref(glm::u32vec3)
+	static_swizzle2_ref(glm::u32vec4)
+	static_swizzle2_ref(glm::u64vec2)
+	static_swizzle2_ref(glm::u64vec3)
+	static_swizzle2_ref(glm::u64vec4)
+
+	static_swizzle3_ref(glm::f16vec3)
+	static_swizzle3_ref(glm::f16vec4)
+	static_swizzle3_ref(glm::f32vec3)
+	static_swizzle3_ref(glm::f32vec4)
+	static_swizzle3_ref(glm::f64vec3)
+	static_swizzle3_ref(glm::f64vec4)
+
+	static_swizzle3_ref(glm::i8vec3)
+	static_swizzle3_ref(glm::i8vec4)
+	static_swizzle3_ref(glm::i16vec3)
+	static_swizzle3_ref(glm::i16vec4)
+	static_swizzle3_ref(glm::i32vec3)
+	static_swizzle3_ref(glm::i32vec4)
+	static_swizzle3_ref(glm::i64vec3)
+	static_swizzle3_ref(glm::i64vec4)
+
+	static_swizzle3_ref(glm::u8vec3)
+	static_swizzle3_ref(glm::u8vec4)
+	static_swizzle3_ref(glm::u16vec3)
+	static_swizzle3_ref(glm::u16vec4)
+	static_swizzle3_ref(glm::u32vec3)
+	static_swizzle3_ref(glm::u32vec4)
+	static_swizzle3_ref(glm::u64vec3)
+	static_swizzle3_ref(glm::u64vec4)
+
+	static_swizzle4_ref(glm::f16vec4)
+	static_swizzle4_ref(glm::f32vec4)
+	static_swizzle4_ref(glm::f64vec4)
+
+	static_swizzle4_ref(glm::i8vec4)
+	static_swizzle4_ref(glm::i16vec4)
+	static_swizzle4_ref(glm::i32vec4)
+	static_swizzle4_ref(glm::i64vec4)
+
+	static_swizzle4_ref(glm::u8vec4)
+	static_swizzle4_ref(glm::u16vec4)
+	static_swizzle4_ref(glm::u32vec4)
+	static_swizzle4_ref(glm::u64vec4)
+
+}//namespace swizzle
+}//namespace gtc
 }//namespace glm
 
 #include "swizzle.inl"

+ 186 - 188
glm/gtc/type_precision.hpp

@@ -24,195 +24,193 @@
 #	pragma message("GLM: GLM_GTC_type_precision extension included")
 #endif
 
-namespace glm
+namespace glm{
+namespace gtc{
+namespace type_precision ///< GLM_GTC_type_precision extension: Defined types with specific size.
 {
-	namespace gtc{
-	//! GLM_GTC_type_precision extension: Defined types with specific size.
-	namespace type_precision
-	{
-		///////////////////////////
-		// Dependences
-
-		using namespace gtc::half_float;
-		using namespace gtc::quaternion;
-
-		///////////////////////////
-		// Signed int vector types 
-
-		/// \addtogroup gtc_type_precision
-		///@{
-
-		typedef detail::int8						int8;         //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef detail::int16						int16;        //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef detail::int32						int32;        //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef detail::int64						int64;        //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
-
-		typedef int8								i8;         //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef int16								i16;        //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef int32								i32;        //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
-		typedef int64								i64;        //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
-
-		//typedef i8									i8vec1;		//!< \brief 8bit signed integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<i8>					i8vec2;     //!< \brief 8bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<i8>					i8vec3;     //!< \brief 8bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<i8>					i8vec4;     //!< \brief 8bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef i16									i16vec1;	//!< \brief 16bit signed integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<i16>					i16vec2;    //!< \brief 16bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<i16>					i16vec3;    //!< \brief 16bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<i16>					i16vec4;    //!< \brief 16bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef i32									i32vec1;	//!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<i32>					i32vec2;    //!< \brief 32bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<i32>					i32vec3;    //!< \brief 32bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<i32>					i32vec4;    //!< \brief 32bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef i64									i64vec1;	//!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<i64>					i64vec2;    //!< \brief 64bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<i64>					i64vec3;    //!< \brief 64bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<i64>					i64vec4;    //!< \brief 64bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		/////////////////////////////
-		// Unsigned int vector types 
-
-		typedef detail::uint8						uint8;         //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef detail::uint16						uint16;        //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef detail::uint32						uint32;        //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef detail::uint64						uint64;        //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
-
-		typedef uint8								u8;         //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef uint16								u16;        //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef uint32								u32;        //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
-		typedef uint64								u64;        //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
-
-		//typedef u8									u8vec1;		//!< \brief 8bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<u8>					u8vec2;     //!< \brief 8bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<u8>					u8vec3;     //!< \brief 8bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<u8>					u8vec4;     //!< \brief 8bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef u16									u16vec1;    //!< \brief 16bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<u16>					u16vec2;    //!< \brief 16bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<u16>					u16vec3;    //!< \brief 16bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<u16>					u16vec4;    //!< \brief 16bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef u32									u32vec1;    //!< \brief 32bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<u32>					u32vec2;    //!< \brief 32bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<u32>					u32vec3;    //!< \brief 32bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<u32>					u32vec4;    //!< \brief 32bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef u64									u64vec1;    //!< \brief 64bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<u64>					u64vec2;    //!< \brief 64bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<u64>					u64vec3;    //!< \brief 64bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<u64>					u64vec4;    //!< \brief 64bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//////////////////////
-		// Float vector types 
-
-		typedef detail::float16						float16;	//!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::float32						float32;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::float64						float64;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-
-		typedef float16								f16;        //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef float32								f32;        //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef float64								f64;        //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-
-		typedef detail::tvec2<float>				fvec2;		//!<  Vector of 2 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<float>				fvec3;		//!<  Vector of 3 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<float>				fvec4;		//!<  Vector of 4 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
-
-		//typedef f16									f16vec1;    //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<f16>					f16vec2;    //!< \brief Half-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<f16>					f16vec3;    //!< \brief Half-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<f16>					f16vec4;    //!< \brief Half-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef f32									f32vec1;    //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<f32>					f32vec2;    //!< \brief Single-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<f32>					f32vec3;    //!< \brief Single-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<f32>					f32vec4;    //!< \brief Single-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//typedef f64									f64vec1;    //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec2<f64>					f64vec2;    //!< \brief Double-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec3<f64>					f64vec3;    //!< \brief Double-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
-		typedef detail::tvec4<f64>					f64vec4;    //!< \brief Double-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
-
-		//////////////////////
-		// Float matrix types 
-
-		//typedef f32									fmat1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f32>				fmat2;	//!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f32>				fmat3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f32>				fmat4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f32									fmat1x1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f32>				fmat2x2;  //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x3<f32>				fmat2x3;	//!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x4<f32>				fmat2x4;	//!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x2<f32>				fmat3x2;	//!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f32>				fmat3x3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x4<f32>				fmat3x4;	//!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x2<f32>				fmat4x2;	//!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x3<f32>				fmat4x3;	//!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f32>				fmat4x4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f16									f16mat1;    //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f16>				f16mat2;	//!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f16>				f16mat3;	//!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f16>				f16mat4;	//!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f16									f16mat1x1;	//!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f16>				f16mat2x2;	//!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x3<f16>				f16mat2x3;	//!< \brief Half-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x4<f16>				f16mat2x4;	//!< \brief Half-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x2<f16>				f16mat3x2;	//!< \brief Half-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f16>				f16mat3x3;	//!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x4<f16>				f16mat3x4;	//!< \brief Half-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x2<f16>				f16mat4x2;	//!< \brief Half-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x3<f16>				f16mat4x3;	//!< \brief Half-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f16>				f16mat4x4;	//!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f32									f32mat1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f32>				f32mat2;	//!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f32>				f32mat3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f32>				f32mat4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f32									f32mat1x1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f32>				f32mat2x2;  //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x3<f32>				f32mat2x3;	//!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x4<f32>				f32mat2x4;	//!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x2<f32>				f32mat3x2;	//!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f32>				f32mat3x3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x4<f32>				f32mat3x4;	//!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x2<f32>				f32mat4x2;	//!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x3<f32>				f32mat4x3;	//!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f32>				f32mat4x4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f64									f64mat1;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f64>				f64mat2;	//!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f64>				f64mat3;	//!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f64>				f64mat4;	//!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//typedef f64									f64mat1x1;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x2<f64>				f64mat2x2;	//!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x3<f64>				f64mat2x3;	//!< \brief Double-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat2x4<f64>				f64mat2x4;	//!< \brief Double-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x2<f64>				f64mat3x2;	//!< \brief Double-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x3<f64>				f64mat3x3;	//!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat3x4<f64>				f64mat3x4;	//!< \brief Double-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x2<f64>				f64mat4x2;	//!< \brief Double-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x3<f64>				f64mat4x3;	//!< \brief Double-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
-		typedef detail::tmat4x4<f64>				f64mat4x4;	//!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
-
-		//////////////////////////
-		// Float quaternion types 
-
-		typedef detail::tquat<f16>					f16quat;    //!< \brief Half-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
-		typedef detail::tquat<f32>					f32quat;    //!< \brief Single-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
-		typedef detail::tquat<f64>					f64quat;    //!< \brief Double-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
-
-		///@}
-
-	}//namespace type_precision
-	}//namespace gtc
+	///////////////////////////
+	// Dependences
+
+	using namespace gtc::half_float;
+	using namespace gtc::quaternion;
+
+	///////////////////////////
+	// Signed int vector types 
+
+	/// \addtogroup gtc_type_precision
+	///@{
+
+	typedef detail::int8						int8;         //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef detail::int16						int16;        //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef detail::int32						int32;        //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef detail::int64						int64;        //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
+
+	typedef int8								i8;         //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef int16								i16;        //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef int32								i32;        //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension)
+	typedef int64								i64;        //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension)
+
+	//typedef i8									i8vec1;		//!< \brief 8bit signed integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<i8>					i8vec2;     //!< \brief 8bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<i8>					i8vec3;     //!< \brief 8bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<i8>					i8vec4;     //!< \brief 8bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef i16									i16vec1;	//!< \brief 16bit signed integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<i16>					i16vec2;    //!< \brief 16bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<i16>					i16vec3;    //!< \brief 16bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<i16>					i16vec4;    //!< \brief 16bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef i32									i32vec1;	//!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<i32>					i32vec2;    //!< \brief 32bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<i32>					i32vec3;    //!< \brief 32bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<i32>					i32vec4;    //!< \brief 32bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef i64									i64vec1;	//!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<i64>					i64vec2;    //!< \brief 64bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<i64>					i64vec3;    //!< \brief 64bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<i64>					i64vec4;    //!< \brief 64bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	/////////////////////////////
+	// Unsigned int vector types 
+
+	typedef detail::uint8						uint8;         //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef detail::uint16						uint16;        //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef detail::uint32						uint32;        //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef detail::uint64						uint64;        //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
+
+	typedef uint8								u8;         //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef uint16								u16;        //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef uint32								u32;        //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension)
+	typedef uint64								u64;        //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension)
+
+	//typedef u8									u8vec1;		//!< \brief 8bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<u8>					u8vec2;     //!< \brief 8bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<u8>					u8vec3;     //!< \brief 8bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<u8>					u8vec4;     //!< \brief 8bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef u16									u16vec1;    //!< \brief 16bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<u16>					u16vec2;    //!< \brief 16bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<u16>					u16vec3;    //!< \brief 16bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<u16>					u16vec4;    //!< \brief 16bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef u32									u32vec1;    //!< \brief 32bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<u32>					u32vec2;    //!< \brief 32bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<u32>					u32vec3;    //!< \brief 32bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<u32>					u32vec4;    //!< \brief 32bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef u64									u64vec1;    //!< \brief 64bit unsigned integer scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<u64>					u64vec2;    //!< \brief 64bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<u64>					u64vec3;    //!< \brief 64bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<u64>					u64vec4;    //!< \brief 64bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//////////////////////
+	// Float vector types 
+
+	typedef detail::float16						float16;	//!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::float32						float32;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::float64						float64;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+
+	typedef float16								f16;        //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef float32								f32;        //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef float64								f64;        //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+
+	typedef detail::tvec2<float>				fvec2;		//!<  Vector of 2 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<float>				fvec3;		//!<  Vector of 3 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<float>				fvec4;		//!<  Vector of 4 single-precision floating-point numbers. (from GLM_GTC_type_precision extension)
+
+	//typedef f16									f16vec1;    //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<f16>					f16vec2;    //!< \brief Half-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<f16>					f16vec3;    //!< \brief Half-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<f16>					f16vec4;    //!< \brief Half-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef f32									f32vec1;    //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<f32>					f32vec2;    //!< \brief Single-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<f32>					f32vec3;    //!< \brief Single-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<f32>					f32vec4;    //!< \brief Single-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//typedef f64									f64vec1;    //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec2<f64>					f64vec2;    //!< \brief Double-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec3<f64>					f64vec3;    //!< \brief Double-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension)
+	typedef detail::tvec4<f64>					f64vec4;    //!< \brief Double-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension)
+
+	//////////////////////
+	// Float matrix types 
+
+	//typedef f32									fmat1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f32>				fmat2;	//!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f32>				fmat3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f32>				fmat4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f32									fmat1x1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f32>				fmat2x2;  //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x3<f32>				fmat2x3;	//!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x4<f32>				fmat2x4;	//!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x2<f32>				fmat3x2;	//!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f32>				fmat3x3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x4<f32>				fmat3x4;	//!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x2<f32>				fmat4x2;	//!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x3<f32>				fmat4x3;	//!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f32>				fmat4x4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f16									f16mat1;    //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f16>				f16mat2;	//!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f16>				f16mat3;	//!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f16>				f16mat4;	//!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f16									f16mat1x1;	//!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f16>				f16mat2x2;	//!< \brief Half-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x3<f16>				f16mat2x3;	//!< \brief Half-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x4<f16>				f16mat2x4;	//!< \brief Half-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x2<f16>				f16mat3x2;	//!< \brief Half-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f16>				f16mat3x3;	//!< \brief Half-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x4<f16>				f16mat3x4;	//!< \brief Half-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x2<f16>				f16mat4x2;	//!< \brief Half-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x3<f16>				f16mat4x3;	//!< \brief Half-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f16>				f16mat4x4;	//!< \brief Half-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f32									f32mat1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f32>				f32mat2;	//!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f32>				f32mat3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f32>				f32mat4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f32									f32mat1x1;	//!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f32>				f32mat2x2;  //!< \brief Single-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x3<f32>				f32mat2x3;	//!< \brief Single-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x4<f32>				f32mat2x4;	//!< \brief Single-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x2<f32>				f32mat3x2;	//!< \brief Single-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f32>				f32mat3x3;	//!< \brief Single-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x4<f32>				f32mat3x4;	//!< \brief Single-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x2<f32>				f32mat4x2;	//!< \brief Single-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x3<f32>				f32mat4x3;	//!< \brief Single-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f32>				f32mat4x4;	//!< \brief Single-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f64									f64mat1;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f64>				f64mat2;	//!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f64>				f64mat3;	//!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f64>				f64mat4;	//!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//typedef f64									f64mat1x1;	//!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x2<f64>				f64mat2x2;	//!< \brief Double-precision floating-point 2x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x3<f64>				f64mat2x3;	//!< \brief Double-precision floating-point 2x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat2x4<f64>				f64mat2x4;	//!< \brief Double-precision floating-point 2x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x2<f64>				f64mat3x2;	//!< \brief Double-precision floating-point 3x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x3<f64>				f64mat3x3;	//!< \brief Double-precision floating-point 3x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat3x4<f64>				f64mat3x4;	//!< \brief Double-precision floating-point 3x4 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x2<f64>				f64mat4x2;	//!< \brief Double-precision floating-point 4x2 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x3<f64>				f64mat4x3;	//!< \brief Double-precision floating-point 4x3 matrix. (from GLM_GTC_type_precision extension)
+	typedef detail::tmat4x4<f64>				f64mat4x4;	//!< \brief Double-precision floating-point 4x4 matrix. (from GLM_GTC_type_precision extension)
+
+	//////////////////////////
+	// Float quaternion types 
+
+	typedef detail::tquat<f16>					f16quat;    //!< \brief Half-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
+	typedef detail::tquat<f32>					f32quat;    //!< \brief Single-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
+	typedef detail::tquat<f64>					f64quat;    //!< \brief Double-precision floating-point quaternion. (from GLM_GTC_type_precision extension)
+
+	///@}
+
+}//namespace type_precision
+}//namespace gtc
 }//namespace glm
 
 #include "type_precision.inl"

+ 397 - 398
glm/gtc/type_ptr.hpp

@@ -21,425 +21,424 @@
 #	pragma message("GLM: GLM_GTC_type_ptr extension included")
 #endif
 
-namespace glm
-{
-	namespace gtc{
-	//! GLM_GTC_type_ptr extension: Get access to vectors & matrices value type address.
-	namespace type_ptr{
-
-		/// \addtogroup gtc_type_ptr
-		///@{
-
-		//! Get the const address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tvec2<T> const & vec
-		)
-		{
-			return &(vec.x);
-		}
-
-		//! Get the address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tvec2<T> & vec
-		)
-		{
-			return &(vec.x);
-		}
-
-		//! Get the const address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tvec3<T> const & vec
-		)
-		{
-			return &(vec.x);
-		}
-
-		//! Get the address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tvec3<T> & vec
-		)
-		{
-			return &(vec.x);
-		}
+namespace glm{
+namespace gtc{
+namespace type_ptr ///< GLM_GTC_type_ptr extension: Get access to vectors & matrices value type address.
+{ 
+
+	/// \addtogroup gtc_type_ptr
+	///@{
+
+	//! Get the const address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tvec2<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Get the address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tvec2<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Get the const address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tvec3<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Get the address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tvec3<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
 		
-		//! Get the const address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(	
-			detail::tvec4<T> const & vec
-		)
-		{
-			return &(vec.x);
-		}
-
-		//! Get the address of the vector content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(	
-			detail::tvec4<T> & vec
-		)
-		{
-			return &(vec.x);
-		}
-
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat2x2<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat2x2<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(	
+		detail::tvec4<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Get the address of the vector content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(	
+		detail::tvec4<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat3x3<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat3x3<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x3<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat4x4<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat4x4<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat2x3<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat2x3<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat4x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x3<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat3x2<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat3x2<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat2x4<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat2x4<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat4x2<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(	
-			detail::tmat4x2<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(	
+		detail::tmat4x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat3x4<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr
-		(
-			detail::tmat3x4<T> & mat
-		)
-		{
-			return &(mat[0].x);
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
 		
-		//! Get the const address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T const * value_ptr
-		(
-			detail::tmat4x3<T> const & mat
-		)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Get the address of the matrix content.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
-		{
-			return &(mat[0].x);
-		}
-
-		//! Build a vector from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
-		{
-			detail::tvec2<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
-			return Result;
-		}
-
-		//! Build a vector from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
-		{
-			detail::tvec3<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
-			return Result;
-		}
-
-		//! Build a vector from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
-		{
-			detail::tvec4<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
-			return Result;
-		}
-
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
-		{
-			detail::tmat2x2<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
-			return Result;
-		}
+	//! Get the const address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Get the address of the matrix content.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Build a vector from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
+	{
+		detail::tvec2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
+		return Result;
+	}
+
+	//! Build a vector from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
+	{
+		detail::tvec3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
+		return Result;
+	}
+
+	//! Build a vector from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
+	{
+		detail::tvec4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
+		return Result;
+	}
+
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
+	{
+		detail::tmat2x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
-		{
-			detail::tmat2x3<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
+	{
+		detail::tmat2x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
-		{
-			detail::tmat2x4<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
+	{
+		detail::tmat2x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
-		{
-			detail::tmat3x2<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
+	{
+		detail::tmat3x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
-		{
-			detail::tmat3x3<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
-			return Result;
-		}
-
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
-		{
-			detail::tmat3x4<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
+	{
+		detail::tmat3x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
+		return Result;
+	}
+
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
+	{
+		detail::tmat3x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
+		return Result;
+	}
 
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
-		{
-			detail::tmat4x2<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
+	{
+		detail::tmat4x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
-		{
-			detail::tmat4x3<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
+	{
+		detail::tmat4x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
-		{
-			detail::tmat4x4<T> Result;
-			memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
-			return Result;
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
+	{
+		detail::tmat4x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
+		return Result;
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
-		{
-			return make_mat2x2(ptr);
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
+	{
+		return make_mat2x2(ptr);
+	}
         
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
-		{
-			return make_mat3x3(ptr);
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
+	{
+		return make_mat3x3(ptr);
+	}
 		
-		//! Build a matrix from a pointer.
-		//! From GLM_GTC_type_ptr extension.
-		template<typename T>
-		GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
-		{
-			return make_mat4x4(ptr);
-		}
+	//! Build a matrix from a pointer.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
+	{
+		return make_mat4x4(ptr);
+	}
         
-		///@}
+	///@}
 
-	}//namespace type_ptr
-	}//namespace gtc
+}//namespace type_ptr
+}//namespace gtc
 }//namespace glm
 
 #include "type_ptr.inl"