Browse Source

Fixed missing types in fwd.hpp #804

Christophe Riccio 7 years ago
parent
commit
329f0e46f1

+ 2 - 10
glm/ext/matrix_double2x2.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<2, 2, double, lowp>			dmat2x2;
-	typedef mat<2, 2, double, lowp>			dmat2;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<2, 2, double, mediump>		dmat2x2;
-	typedef mat<2, 2, double, mediump>		dmat2;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 2 columns of 2 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 2, double, highp>		dmat2x2;
+	typedef mat<2, 2, double, defaultp>		dmat2x2;
 
 	/// 2 columns of 2 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 2, double, highp>		dmat2;
-#endif
+	typedef mat<2, 2, double, defaultp>		dmat2;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double2x3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<2, 3, double, lowp>			dmat2x3;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<2, 3, double, mediump>		dmat2x3;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 2 columns of 3 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 3, double, highp>		dmat2x3;
-#endif
+	typedef mat<2, 3, double, defaultp>		dmat2x3;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double2x4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<2, 4, double, lowp>			dmat2x4;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<2, 4, double, mediump>		dmat2x4;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 2 columns of 4 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 4, double, highp>		dmat2x4;
-#endif
+	typedef mat<2, 4, double, defaultp>		dmat2x4;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double3x2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<3, 2, double, lowp>			dmat3x2;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<3, 2, double, mediump>		dmat3x2;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 3 columns of 2 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 2, double, highp>		dmat3x2;
-#endif
+	typedef mat<3, 2, double, defaultp>		dmat3x2;
 
 	/// @}
 }//namespace glm

+ 2 - 10
glm/ext/matrix_double3x3.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<3, 3, double, lowp>			dmat3x3;
-	typedef mat<3, 3, double, lowp>			dmat3;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<3, 3, double, mediump>		dmat3x3;
-	typedef mat<3, 3, double, mediump>		dmat3;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 3 columns of 3 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 3, double, highp>		dmat3x3;
+	typedef mat<3, 3, double, defaultp>		dmat3x3;
 
 	/// 3 columns of 3 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 3, double, highp>		dmat3;
-#endif
+	typedef mat<3, 3, double, defaultp>		dmat3;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double3x4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<3, 4, double, lowp>			dmat3x4;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<3, 4, double, mediump>		dmat3x4;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 3 columns of 4 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 4, double, highp>		dmat3x4;
-#endif
+	typedef mat<3, 4, double, defaultp>		dmat3x4;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double4x2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<4, 2, double, lowp>			dmat4x2;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<4, 2, double, mediump>		dmat4x2;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 4 columns of 2 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 2, double, highp>		dmat4x2;
-#endif
+	typedef mat<4, 2, double, defaultp>		dmat4x2;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_double4x3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<4, 3, double, lowp>			dmat4x3;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<4, 3, double, mediump>		dmat4x3;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 4 columns of 3 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 3, double, highp>		dmat4x3;
-#endif
+	typedef mat<4, 3, double, defaultp>		dmat4x3;
 
 	/// @}
 }//namespace glm

+ 2 - 10
glm/ext/matrix_double4x4.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<4, 4, double, lowp>			dmat4x4;
-	typedef mat<4, 4, double, lowp>			dmat4;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<4, 4, double, mediump>		dmat4x4;
-	typedef mat<4, 4, double, mediump>		dmat4;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 4 columns of 4 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 4, double, highp>		dmat4x4;
+	typedef mat<4, 4, double, defaultp>		dmat4x4;
 
 	/// 4 columns of 4 components matrix of double-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 4, double, highp>		dmat4;
-#endif
+	typedef mat<4, 4, double, defaultp>		dmat4;
 
 	/// @}
 }//namespace glm

+ 2 - 10
glm/ext/matrix_float2x2.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<2, 2, float, lowp>		mat2x2;
-	typedef mat<2, 2, float, lowp>		mat2;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<2, 2, float, mediump>	mat2x2;
-	typedef mat<2, 2, float, mediump>	mat2;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 2 columns of 2 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 2, float, highp>		mat2x2;
+	typedef mat<2, 2, float, defaultp>		mat2x2;
 
 	/// 2 columns of 2 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 2, float, highp>		mat2;
-#endif
+	typedef mat<2, 2, float, defaultp>		mat2;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float2x3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<2, 3, float, lowp>			mat2x3;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<2, 3, float, mediump>		mat2x3;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 2 columns of 3 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 3, float, highp>		mat2x3;
-#endif
+	typedef mat<2, 3, float, defaultp>		mat2x3;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float2x4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<2, 4, float, lowp>			mat2x4;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<2, 4, float, mediump>		mat2x4;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 2 columns of 4 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<2, 4, float, highp>		mat2x4;
-#endif
+	typedef mat<2, 4, float, defaultp>		mat2x4;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float3x2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<3, 2, float, lowp>			mat3x2;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<3, 2, float, mediump>		mat3x2;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 3 columns of 2 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 2, float, highp>			mat3x2;
-#endif
+	typedef mat<3, 2, float, defaultp>			mat3x2;
 
 	/// @}
 }//namespace glm

+ 2 - 10
glm/ext/matrix_float3x3.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mat<3, 3, float, lowp>			mat3x3;
-	typedef mat<3, 3, float, lowp>			mat3;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mat<3, 3, float, mediump>		mat3x3;
-	typedef mat<3, 3, float, mediump>		mat3;
-#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
 	/// 3 columns of 3 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 3, float, highp>			mat3x3;
+	typedef mat<3, 3, float, defaultp>			mat3x3;
 
 	/// 3 columns of 3 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 3, float, highp>			mat3;
-#endif
+	typedef mat<3, 3, float, defaultp>			mat3;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float3x4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<3, 4, float, lowp>			mat3x4;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<3, 4, float, mediump>		mat3x4;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 3 columns of 4 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<3, 4, float, highp>			mat3x4;
-#endif
+	typedef mat<3, 4, float, defaultp>			mat3x4;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float4x2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<4, 2, float, lowp>			mat4x2;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<4, 2, float, mediump>		mat4x2;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 4 columns of 2 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 2, float, highp>			mat4x2;
-#endif
+	typedef mat<4, 2, float, defaultp>			mat4x2;
 
 	/// @}
 }//namespace glm

+ 1 - 7
glm/ext/matrix_float4x3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<4, 3, float, lowp>			mat4x3;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<4, 3, float, mediump>		mat4x3;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 4 columns of 3 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 3, float, highp>			mat4x3;
-#endif
+	typedef mat<4, 3, float, defaultp>			mat4x3;
 
 	/// @}
 }//namespace glm

+ 2 - 10
glm/ext/matrix_float4x4.hpp

@@ -9,23 +9,15 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mat<4, 4, float, lowp>			mat4x4;
-	typedef mat<4, 4, float, lowp>			mat4;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mat<4, 4, float, mediump>		mat4x4;
-	typedef mat<4, 4, float, mediump>		mat4;
-#else //defined(GLM_PRECISION_HIGHP_FLOAT)
 	/// 4 columns of 4 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 4, float, highp>			mat4x4;
+	typedef mat<4, 4, float, defaultp>			mat4x4;
 
 	/// 4 columns of 4 components matrix of single-precision floating-point numbers.
 	///
 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
-	typedef mat<4, 4, float, highp>			mat4;
-#endif
+	typedef mat<4, 4, float, defaultp>			mat4;
 
 	/// @}
 }//namespace glm

+ 4 - 7
glm/ext/quaternion_double.hpp

@@ -24,13 +24,10 @@ namespace glm
 	/// @addtogroup ext_quaternion_double
 	/// @{
 
-#if GLM_CONFIG_PRECISION_FLOAT == GLM_HIGHP
-	typedef qua<double, highp>		dquat;
-#elif GLM_CONFIG_PRECISION_FLOAT == GLM_MEDIUMP
-	typedef qua<double, mediump>	dquat;
-#else
-	typedef qua<double, lowp>		dquat;
-#endif
+	/// Quaternion of double-precision floating-point numbers.
+	///
+	/// @see ext_quaternion_double
+	typedef qua<double, defaultp>		dquat;
 
 	/// @}
 } //namespace glm

+ 4 - 7
glm/ext/quaternion_float.hpp

@@ -24,13 +24,10 @@ namespace glm
 	/// @addtogroup ext_quaternion_float
 	/// @{
 
-#if GLM_CONFIG_PRECISION_FLOAT == GLM_HIGHP
-	typedef qua<float, highp>		quat;
-#elif GLM_CONFIG_PRECISION_FLOAT == GLM_MEDIUMP
-	typedef qua<float, mediump>		quat;
-#else
-	typedef qua<float, lowp>		quat;
-#endif
+	/// Quaternion of single-precision floating-point numbers.
+	///
+	/// @see ext_quaternion_float
+	typedef qua<float, defaultp>		quat;
 
 	/// @}
 } //namespace glm

+ 4 - 10
glm/ext/vector_bool1.hpp

@@ -23,16 +23,10 @@ namespace glm
 	/// @addtogroup ext_bvec1
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_BOOL == GLM_LOWP
-		typedef vec<1, bool, lowp>		bvec1;
-#	elif GLM_CONFIG_PRECISION_BOOL == GLM_MEDIUMP
-		typedef vec<1, bool, mediump>	bvec1;
-#	else
-		/// 1 components vector of boolean.
-		///
-		/// @see ext_vector_bvec1 extension.
-		typedef vec<1, bool, highp>		bvec1;
-#	endif
+	/// 1 components vector of boolean.
+	///
+	/// @see ext_vector_bvec1 extension.
+	typedef vec<1, bool, defaultp>		bvec1;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_bool2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_BOOL))
-		typedef vec<2, bool, lowp>		bvec2;
-#	elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
-		typedef vec<2, bool, mediump>	bvec2;
-#	else //defined(GLM_PRECISION_HIGHP_BOOL)
-		/// 2 components vector of boolean.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<2, bool, highp>		bvec2;
-#	endif//GLM_PRECISION
+	/// 2 components vector of boolean.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<2, bool, defaultp>		bvec2;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_bool3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_BOOL))
-		typedef vec<3, bool, lowp>		bvec3;
-#	elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
-		typedef vec<3, bool, mediump>	bvec3;
-#	else //defined(GLM_PRECISION_HIGHP_BOOL)
-		/// 3 components vector of boolean.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<3, bool, highp>		bvec3;
-#	endif//GLM_PRECISION
+	/// 3 components vector of boolean.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<3, bool, defaultp>		bvec3;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_bool4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_BOOL))
-		typedef vec<4, bool, lowp>		bvec4;
-#	elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
-		typedef vec<4, bool, mediump>	bvec4;
-#	else //defined(GLM_PRECISION_HIGHP_BOOL)
-		/// 4 components vector of boolean.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<4, bool, highp>		bvec4;
-#	endif//GLM_PRECISION
+	/// 4 components vector of boolean.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<4, bool, defaultp>		bvec4;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_double1.hpp

@@ -23,16 +23,10 @@ namespace glm
 	/// @addtogroup ext_vector_dvec1
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_DOUBLE == GLM_LOWP
-		typedef vec<1, double, lowp>		dvec1;
-#	elif GLM_CONFIG_PRECISION_DOUBLE == GLM_MEDIUMP
-		typedef vec<1, double, mediump>		dvec1;
-#	else
-		/// 1 components vector of double-precision floating-point numbers.
-		///
-		/// @see ext_vector_dvec1 extension.
-		typedef vec<1, double, highp>		dvec1;
-#	endif
+	/// 1 components vector of double-precision floating-point numbers.
+	///
+	/// @see ext_vector_dvec1 extension.
+	typedef vec<1, double, defaultp>		dvec1;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_double2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_DOUBLE))
-		typedef vec<2, double, lowp>		dvec2;
-#	elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-		typedef vec<2, double, mediump>		dvec2;
-#	else //defined(GLM_PRECISION_HIGHP_DOUBLE)
-		/// 2 components vector of double-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<2, double, highp>		dvec2;
-#	endif//GLM_PRECISION
+	/// 2 components vector of double-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<2, double, defaultp>		dvec2;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_double3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_DOUBLE))
-		typedef vec<3, double, lowp>		dvec3;
-#	elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-		typedef vec<3, double, mediump>		dvec3;
-#	else //defined(GLM_PRECISION_HIGHP_DOUBLE)
-		/// 3 components vector of double-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<3, double, highp>		dvec3;
-#	endif//GLM_PRECISION
+	/// 3 components vector of double-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<3, double, defaultp>		dvec3;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_double4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_DOUBLE))
-		typedef vec<4, double, lowp>		dvec4;
-#	elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-		typedef vec<4, double, mediump>		dvec4;
-#	else //defined(GLM_PRECISION_HIGHP_DOUBLE)
-		/// 4 components vector of double-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<4, double, highp>		dvec4;
-#	endif//GLM_PRECISION
+	/// 4 components vector of double-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<4, double, defaultp>		dvec4;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_float1.hpp

@@ -23,16 +23,10 @@ namespace glm
 	/// @addtogroup ext_vector_float1
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_FLOAT == GLM_LOWP
-		typedef vec<1, float, lowp>			vec1;
-#	elif GLM_CONFIG_PRECISION_FLOAT == GLM_MEDIUMP
-		typedef vec<1, float, mediump>		vec1;
-#	else
-		/// 1 components vector of single-precision floating-point numbers.
-		///
-		/// @see ext_vector_float1 extension.
-		typedef vec<1, float, highp>		vec1;
-#	endif
+	/// 1 components vector of single-precision floating-point numbers.
+	///
+	/// @see ext_vector_float1 extension.
+	typedef vec<1, float, defaultp>		vec1;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_float2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_FLOAT))
-		typedef vec<2, float, lowp>		vec2;
-#	elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-		typedef vec<2, float, mediump>	vec2;
-#	else //defined(GLM_PRECISION_HIGHP_FLOAT)
-		/// 2 components vector of single-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<2, float, highp>	vec2;
-#	endif//GLM_PRECISION
+	/// 2 components vector of single-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<2, float, defaultp>	vec2;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_float3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_FLOAT))
-		typedef vec<3, float, lowp>		vec3;
-#	elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-		typedef vec<3, float, mediump>	vec3;
-#	else //defined(GLM_PRECISION_HIGHP_FLOAT)
-		/// 3 components vector of single-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<3, float, highp>	vec3;
-#	endif//GLM_PRECISION
+	/// 3 components vector of single-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<3, float, defaultp>		vec3;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_float4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_FLOAT))
-		typedef vec<4, float, lowp>		vec4;
-#	elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-		typedef vec<4, float, mediump>	vec4;
-#	else //defined(GLM_PRECISION_HIGHP_FLOAT)
-		/// 4 components vector of single-precision floating-point numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<4, float, highp>	vec4;
-#	endif//GLM_PRECISION
+	/// 4 components vector of single-precision floating-point numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<4, float, defaultp>		vec4;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_int1.hpp

@@ -23,16 +23,10 @@ namespace glm
 	/// @addtogroup ext_vector_int1
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_INT == GLM_LOWP
-		typedef vec<1, int, lowp>			ivec1;
-#	elif GLM_CONFIG_PRECISION_INT == GLM_MEDIUMP
-		typedef vec<1, int, mediump>		ivec1;
-#	else
-		/// 1 component vector of signed integer numbers.
-		///
-		/// @see ext_vector_int1 extension.
-		typedef vec<1, int, highp>			ivec1;
-#	endif
+	/// 1 component vector of signed integer numbers.
+	///
+	/// @see ext_vector_int1 extension.
+	typedef vec<1, int, defaultp>			ivec1;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_int2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_INT))
-		typedef vec<2, int, lowp>		ivec2;
-#	elif(defined(GLM_PRECISION_MEDIUMP_INT))
-		typedef vec<2, int, mediump>	ivec2;
-#	else //defined(GLM_PRECISION_HIGHP_INT)
-		/// 2 components vector of signed integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<2, int, highp>		ivec2;
-#	endif//GLM_PRECISION
+	/// 2 components vector of signed integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<2, int, defaultp>		ivec2;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_int3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_INT))
-		typedef vec<3, int, lowp>		ivec3;
-#	elif(defined(GLM_PRECISION_MEDIUMP_INT))
-		typedef vec<3, int, mediump>	ivec3;
-#	else //defined(GLM_PRECISION_HIGHP_INT)
-		/// 3 components vector of signed integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<3, int, highp>		ivec3;
-#	endif//GLM_PRECISION
+	/// 3 components vector of signed integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<3, int, defaultp>		ivec3;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_int4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_INT))
-		typedef vec<4, int, lowp>		ivec4;
-#	elif(defined(GLM_PRECISION_MEDIUMP_INT))
-		typedef vec<4, int, mediump>	ivec4;
-#	else //defined(GLM_PRECISION_HIGHP_INT)
-		/// 4 components vector of signed integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<4, int, highp>		ivec4;
-#	endif//GLM_PRECISION
+	/// 4 components vector of signed integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<4, int, defaultp>		ivec4;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_uint1.hpp

@@ -23,16 +23,10 @@ namespace glm
 	/// @addtogroup ext_vector_uint1
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_UINT == GLM_LOWP
-		typedef vec<1, unsigned int, lowp>			uvec1;
-#	elif GLM_CONFIG_PRECISION_UINT == GLM_MEDIUMP
-		typedef vec<1, unsigned int, mediump>		uvec1;
-#	elif GLM_CONFIG_PRECISION_UINT == GLM_HIGHP
-		/// 1 component vector of unsigned integer numbers.
-		///
-		/// @see ext_vector_uint1 extension.
-		typedef vec<1, unsigned int, highp>			uvec1;
-#	endif
+	/// 1 component vector of unsigned integer numbers.
+	///
+	/// @see ext_vector_uint1 extension.
+	typedef vec<1, unsigned int, defaultp>			uvec1;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_uint2.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if GLM_CONFIG_PRECISION_UINT == GLM_LOWP
-		typedef vec<2, unsigned int, lowp>		uvec2;
-#	elif GLM_CONFIG_PRECISION_UINT == GLM_MEDIUMP
-		typedef vec<2, unsigned int, mediump>	uvec2;
-#	elif GLM_CONFIG_PRECISION_UINT == GLM_HIGHP
-		/// 2 components vector of unsigned integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<2, unsigned int, highp>		uvec2;
-#	endif//GLM_PRECISION
+	/// 2 components vector of unsigned integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<2, unsigned int, defaultp>		uvec2;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_uint3.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_UINT))
-		typedef vec<3, unsigned int, lowp>		uvec3;
-#	elif(defined(GLM_PRECISION_MEDIUMP_UINT))
-		typedef vec<3, unsigned int, mediump>	uvec3;
-#	else //defined(GLM_PRECISION_HIGHP_UINT)
-		/// 3 components vector of unsigned integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<3, unsigned int, highp>		uvec3;
-#	endif//GLM_PRECISION
+	/// 3 components vector of unsigned integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<3, unsigned int, defaultp>		uvec3;
 
 	/// @}
 }//namespace glm

+ 4 - 10
glm/ext/vector_uint4.hpp

@@ -9,16 +9,10 @@ namespace glm
 	/// @addtogroup core
 	/// @{
 
-#	if(defined(GLM_PRECISION_LOWP_UINT))
-		typedef vec<4, unsigned int, lowp>		uvec4;
-#	elif(defined(GLM_PRECISION_MEDIUMP_UINT))
-		typedef vec<4, unsigned int, mediump>	uvec4;
-#	else //defined(GLM_PRECISION_HIGHP_UINT)
-		/// 4 components vector of unsigned integer numbers.
-		///
-		/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
-		typedef vec<4, unsigned int, highp>		uvec4;
-#	endif//GLM_PRECISION
+	/// 4 components vector of unsigned integer numbers.
+	///
+	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+	typedef vec<4, unsigned int, defaultp>		uvec4;
 
 	/// @}
 }//namespace glm

+ 735 - 2489
glm/fwd.hpp

@@ -1,2572 +1,818 @@
-/// @ref core
-/// @file glm/fwd.hpp
-
 #pragma once
-#include "glm.hpp"
-
-/*
-#include "detail/type_int.hpp"
-#include "detail/type_float.hpp"
-
-//////////////////////
-// GLM_GTC_quaternion
-namespace glm
-{
-	template<typename T, qualifier Q> struct tquat;
-
-	/// Quaternion of low single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<float, lowp>		lowp_quat;
-
-	/// Quaternion of medium single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<float, mediump>	mediump_quat;
-
-	/// Quaternion of high single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<float, highp>		highp_quat;
-
-#if(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef highp_quat			quat;
-#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef mediump_quat		quat;
-#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef lowp_quat			quat;
-#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
-	/// Quaternion of default single-qualifier floating-point numbers.
-	typedef highp_quat			quat;
-#endif
-
-	/// Quaternion of low single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef lowp_quat			lowp_fquat;
-
-	/// Quaternion of medium single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef mediump_quat		mediump_fquat;
-
-	/// Quaternion of high single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef highp_quat			highp_fquat;
-
-	/// Quaternion of default single-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef quat				fquat;
-
-
-	/// Quaternion of low double-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<double, lowp>		lowp_dquat;
-
-	/// Quaternion of medium double-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<double, mediump>	mediump_dquat;
-
-	/// Quaternion of high double-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef tquat<double, highp>	highp_dquat;
-
-#if(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef highp_dquat			dquat;
-#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef mediump_dquat		dquat;
-#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef lowp_dquat			dquat;
-#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
-	/// Quaternion of default double-qualifier floating-point numbers.
-	///
-	/// @see gtc_quaternion
-	typedef highp_dquat			dquat;
-#endif
 
-}//namespace glm
+#include "detail/qualifier.hpp"
 
-//////////////////////
-// GLM_GTC_precision
 namespace glm
 {
-	/// Low qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 lowp_int8;
-
-	/// Low qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 lowp_int16;
-
-	/// Low qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 lowp_int32;
-
-	/// Low qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 lowp_int64;
-
-	/// Low qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 lowp_int8_t;
-
-	/// Low qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 lowp_int16_t;
-
-	/// Low qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 lowp_int32_t;
-
-	/// Low qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 lowp_int64_t;
-
-	/// Low qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 lowp_i8;
-
-	/// Low qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 lowp_i16;
-
-	/// Low qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 lowp_i32;
-
-	/// Low qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 lowp_i64;
-
-	/// Medium qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 mediump_int8;
-
-	/// Medium qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 mediump_int16;
-
-	/// Medium qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 mediump_int32;
-
-	/// Medium qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 mediump_int64;
-
-	/// Medium qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 mediump_int8_t;
-
-	/// Medium qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 mediump_int16_t;
-
-	/// Medium qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 mediump_int32_t;
-
-	/// Medium qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 mediump_int64_t;
-
-	/// Medium qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 mediump_i8;
-
-	/// Medium qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 mediump_i16;
-
-	/// Medium qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 mediump_i32;
-
-	/// Medium qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 mediump_i64;
-
-	/// High qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 highp_int8;
-
-	/// High qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 highp_int16;
-
-	/// High qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 highp_int32;
-
-	/// High qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 highp_int64;
-
-	/// High qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 highp_int8_t;
-
-	/// High qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 highp_int16_t;
-
-	/// 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 highp_int32_t;
-
-	/// High qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 highp_int64_t;
-
-	/// High qualifier 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 highp_i8;
-
-	/// High qualifier 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 highp_i16;
-
-	/// High qualifier 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 highp_i32;
-
-	/// High qualifier 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 highp_i64;
-
-
-	/// 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 int8;
-
-	/// 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 int16;
-
-	/// 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 int32;
-
-	/// 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 int64;
-
-
 #if GLM_HAS_EXTENDED_INTEGER_TYPE
-	using std::int8_t;
-	using std::int16_t;
-	using std::int32_t;
-	using std::int64_t;
-#else
-	/// 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 int8_t;
-
-	/// 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 int16_t;
-
-	/// 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 int32_t;
-
-	/// 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 int64_t;
-#endif
-
-	/// 8 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int8 i8;
-
-	/// 16 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int16 i16;
-
-	/// 32 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int32 i32;
-
-	/// 64 bit signed integer type.
-	/// @see gtc_type_precision
-	typedef detail::int64 i64;
-
-
-
-	/// Low qualifier 8 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i8, lowp> lowp_i8vec1;
-
-	/// Low qualifier 8 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i8, lowp> lowp_i8vec2;
-
-	/// Low qualifier 8 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i8, lowp> lowp_i8vec3;
-
-	/// Low qualifier 8 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i8, lowp> lowp_i8vec4;
-
-
-	/// Medium qualifier 8 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i8, mediump> mediump_i8vec1;
-
-	/// Medium qualifier 8 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i8, mediump> mediump_i8vec2;
-
-	/// Medium qualifier 8 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i8, mediump> mediump_i8vec3;
-
-	/// Medium qualifier 8 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i8, mediump> mediump_i8vec4;
-
-
-	/// High qualifier 8 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i8, highp> highp_i8vec1;
-
-	/// High qualifier 8 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i8, highp> highp_i8vec2;
-
-	/// High qualifier 8 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i8, highp> highp_i8vec3;
-
-	/// High qualifier 8 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i8, highp> highp_i8vec4;
-
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_i8vec1				i8vec1;
-	typedef lowp_i8vec2				i8vec2;
-	typedef lowp_i8vec3				i8vec3;
-	typedef lowp_i8vec4				i8vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_i8vec1			i8vec1;
-	typedef mediump_i8vec2			i8vec2;
-	typedef mediump_i8vec3			i8vec3;
-	typedef mediump_i8vec4			i8vec4;
+	typedef std::int8_t				int8;
+	typedef std::int16_t			int16;
+	typedef std::int32_t			int32;
+	typedef std::int64_t			int64;
+
+	typedef std::uint8_t			uint8;
+	typedef std::uint16_t			uint16;
+	typedef std::uint32_t			uint32;
+	typedef std::uint64_t			uint64;
 #else
-	/// Default qualifier 8 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_i8vec1			i8vec1;
-
-	/// Default qualifier 8 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_i8vec2			i8vec2;
-
-	/// Default qualifier 8 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_i8vec3			i8vec3;
-
-	/// Default qualifier 8 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_i8vec4			i8vec4;
+	typedef char					int8;
+	typedef short					int16;
+	typedef int						int32;
+	typedef detail::int64			int64;
+
+	typedef unsigned char			uint8;
+	typedef unsigned short			uint16;
+	typedef unsigned int			uint32;
+	typedef detail::uint64			uint64;
 #endif
 
+	// Scalar int
+
+	typedef int8					lowp_i8;
+	typedef int8					mediump_i8;
+	typedef int8					highp_i8;
+	typedef int8					i8;
+
+	typedef int8					lowp_int8;
+	typedef int8					mediump_int8;
+	typedef int8					highp_int8;
+
+	typedef int8					lowp_int8_t;
+	typedef int8					mediump_int8_t;
+	typedef int8					highp_int8_t;
+	typedef int8					int8_t;
+
+	typedef int16					lowp_i16;
+	typedef int16					mediump_i16;
+	typedef int16					highp_i16;
+	typedef int16					i16;
+
+	typedef int16					lowp_int16;
+	typedef int16					mediump_int16;
+	typedef int16					highp_int16;
+
+	typedef int16					lowp_int16_t;
+	typedef int16					mediump_int16_t;
+	typedef int16					highp_int16_t;
+	typedef int16					int16_t;
+
+	typedef int32					lowp_i32;
+	typedef int32					mediump_i32;
+	typedef int32					highp_i32;
+	typedef int32					i32;
+
+	typedef int32					lowp_int32;
+	typedef int32					mediump_int32;
+	typedef int32					highp_int32;
+
+	typedef int32					lowp_int32_t;
+	typedef int32					mediump_int32_t;
+	typedef int32					highp_int32_t;
+	typedef int32					int32_t;
+
+	typedef int64					lowp_i64;
+	typedef int64					mediump_i64;
+	typedef int64					highp_i64;
+	typedef int64					i64;
+
+	typedef int64					lowp_int64;
+	typedef int64					mediump_int64;
+	typedef int64					highp_int64;
+
+	typedef int64					lowp_int64_t;
+	typedef int64					mediump_int64_t;
+	typedef int64					highp_int64_t;
+	typedef int64					int64_t;
+
+	// Scalar uint
+
+	typedef uint8					lowp_u8;
+	typedef uint8					mediump_u8;
+	typedef uint8					highp_u8;
+	typedef uint8					u8;
+
+	typedef uint8					lowp_uint8;
+	typedef uint8					mediump_uint8;
+	typedef uint8					highp_uint8;
+
+	typedef uint8					lowp_uint8_t;
+	typedef uint8					mediump_uint8_t;
+	typedef uint8					highp_uint8_t;
+	typedef uint8					uint8_t;
+
+	typedef uint16					lowp_u16;
+	typedef uint16					mediump_u16;
+	typedef uint16					highp_u16;
+	typedef uint16					u16;
+
+	typedef uint16					lowp_uint16;
+	typedef uint16					mediump_uint16;
+	typedef uint16					highp_uint16;
+
+	typedef uint16					lowp_uint16_t;
+	typedef uint16					mediump_uint16_t;
+	typedef uint16					highp_uint16_t;
+	typedef uint16					uint16_t;
+
+	typedef uint32					lowp_u32;
+	typedef uint32					mediump_u32;
+	typedef uint32					highp_u32;
+	typedef uint32					u32;
+
+	typedef uint32					lowp_uint32;
+	typedef uint32					mediump_uint32;
+	typedef uint32					highp_uint32;
+
+	typedef uint32					lowp_uint32_t;
+	typedef uint32					mediump_uint32_t;
+	typedef uint32					highp_uint32_t;
+	typedef uint32					uint32_t;
+
+	typedef uint64					lowp_u64;
+	typedef uint64					mediump_u64;
+	typedef uint64					highp_u64;
+	typedef uint64					u64;
+
+	typedef uint64					lowp_uint64;
+	typedef uint64					mediump_uint64;
+	typedef uint64					highp_uint64;
+
+	typedef uint64					lowp_uint64_t;
+	typedef uint64					mediump_uint64_t;
+	typedef uint64					highp_uint64_t;
+	typedef uint64					uint64_t;
+
+	// Scalar float
+
+	typedef float					lowp_f32;
+	typedef float					mediump_f32;
+	typedef float					highp_f32;
+	typedef float					f32;
+
+	typedef float					lowp_float32;
+	typedef float					mediump_float32;
+	typedef float					highp_float32;
+	typedef float					float32;
+
+	typedef float					lowp_float32_t;
+	typedef float					mediump_float32_t;
+	typedef float					highp_float32_t;
+	typedef float					float32_t;
+
+
+	typedef double					lowp_f64;
+	typedef double					mediump_f64;
+	typedef double					highp_f64;
+	typedef double					f64;
+
+	typedef double					lowp_float64;
+	typedef double					mediump_float64;
+	typedef double					highp_float64;
+	typedef double					float64;
+
+	typedef double					lowp_float64_t;
+	typedef double					mediump_float64_t;
+	typedef double					highp_float64_t;
+	typedef double					float64_t;
+
+	// Vector bool
+
+	typedef vec<1, bool, lowp>		lowp_bvec1;
+	typedef vec<2, bool, lowp>		lowp_bvec2;
+	typedef vec<3, bool, lowp>		lowp_bvec3;
+	typedef vec<4, bool, lowp>		lowp_bvec4;
+
+	typedef vec<1, bool, mediump>	mediump_bvec1;
+	typedef vec<2, bool, mediump>	mediump_bvec2;
+	typedef vec<3, bool, mediump>	mediump_bvec3;
+	typedef vec<4, bool, mediump>	mediump_bvec4;
+
+	typedef vec<1, bool, highp>		highp_bvec1;
+	typedef vec<2, bool, highp>		highp_bvec2;
+	typedef vec<3, bool, highp>		highp_bvec3;
+	typedef vec<4, bool, highp>		highp_bvec4;
+
+	typedef vec<1, bool, defaultp>	bvec1;
+	typedef vec<2, bool, defaultp>	bvec2;
+	typedef vec<3, bool, defaultp>	bvec3;
+	typedef vec<4, bool, defaultp>	bvec4;
+
+	// Vector int
+
+	typedef vec<1, i32, lowp>		lowp_ivec1;
+	typedef vec<2, i32, lowp>		lowp_ivec2;
+	typedef vec<3, i32, lowp>		lowp_ivec3;
+	typedef vec<4, i32, lowp>		lowp_ivec4;
+
+	typedef vec<1, i32, mediump>	mediump_ivec1;
+	typedef vec<2, i32, mediump>	mediump_ivec2;
+	typedef vec<3, i32, mediump>	mediump_ivec3;
+	typedef vec<4, i32, mediump>	mediump_ivec4;
+
+	typedef vec<1, i32, highp>		highp_ivec1;
+	typedef vec<2, i32, highp>		highp_ivec2;
+	typedef vec<3, i32, highp>		highp_ivec3;
+	typedef vec<4, i32, highp>		highp_ivec4;
+
+	typedef vec<1, i32, defaultp>	ivec1;
+	typedef vec<2, i32, defaultp>	ivec2;
+	typedef vec<3, i32, defaultp>	ivec3;
+	typedef vec<4, i32, defaultp>	ivec4;
+
+	typedef vec<1, i8, lowp>		lowp_i8vec1;
+	typedef vec<2, i8, lowp>		lowp_i8vec2;
+	typedef vec<3, i8, lowp>		lowp_i8vec3;
+	typedef vec<4, i8, lowp>		lowp_i8vec4;
+
+	typedef vec<1, i8, mediump>		mediump_i8vec1;
+	typedef vec<2, i8, mediump>		mediump_i8vec2;
+	typedef vec<3, i8, mediump>		mediump_i8vec3;
+	typedef vec<4, i8, mediump>		mediump_i8vec4;
+
+	typedef vec<1, i8, highp>		highp_i8vec1;
+	typedef vec<2, i8, highp>		highp_i8vec2;
+	typedef vec<3, i8, highp>		highp_i8vec3;
+	typedef vec<4, i8, highp>		highp_i8vec4;
+
+	typedef vec<1, i8, defaultp>	i8vec1;
+	typedef vec<2, i8, defaultp>	i8vec2;
+	typedef vec<3, i8, defaultp>	i8vec3;
+	typedef vec<4, i8, defaultp>	i8vec4;
 
-	/// Low qualifier 16 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i16, lowp>		lowp_i16vec1;
-
-	/// Low qualifier 16 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i16, lowp>		lowp_i16vec2;
-
-	/// Low qualifier 16 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i16, lowp>		lowp_i16vec3;
-
-	/// Low qualifier 16 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i16, lowp>		lowp_i16vec4;
 
+	typedef vec<1, i16, mediump>	mediump_i16vec1;
+	typedef vec<2, i16, mediump>	mediump_i16vec2;
+	typedef vec<3, i16, mediump>	mediump_i16vec3;
+	typedef vec<4, i16, mediump>	mediump_i16vec4;
 
-	/// Medium qualifier 16 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i16, mediump>		mediump_i16vec1;
-
-	/// Medium qualifier 16 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i16, mediump>		mediump_i16vec2;
-
-	/// Medium qualifier 16 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i16, mediump>		mediump_i16vec3;
-
-	/// Medium qualifier 16 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i16, mediump>		mediump_i16vec4;
-
-
-	/// High qualifier 16 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i16, highp>		highp_i16vec1;
-
-	/// High qualifier 16 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i16, highp>		highp_i16vec2;
-
-	/// High qualifier 16 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i16, highp>		highp_i16vec3;
-
-	/// High qualifier 16 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i16, highp>		highp_i16vec4;
 
+	typedef vec<1, i16, defaultp>	i16vec1;
+	typedef vec<2, i16, defaultp>	i16vec2;
+	typedef vec<3, i16, defaultp>	i16vec3;
+	typedef vec<4, i16, defaultp>	i16vec4;
 
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_i16vec1			i16vec1;
-	typedef lowp_i16vec2			i16vec2;
-	typedef lowp_i16vec3			i16vec3;
-	typedef lowp_i16vec4			i16vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_i16vec1			i16vec1;
-	typedef mediump_i16vec2			i16vec2;
-	typedef mediump_i16vec3			i16vec3;
-	typedef mediump_i16vec4			i16vec4;
-#else
-	/// Default qualifier 16 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_i16vec1			i16vec1;
-
-	/// Default qualifier 16 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_i16vec2			i16vec2;
-
-	/// Default qualifier 16 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_i16vec3			i16vec3;
-
-	/// Default qualifier 16 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_i16vec4			i16vec4;
-#endif
-
-
-	/// Low qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i32, lowp>		lowp_i32vec1;
-
-	/// Low qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i32, lowp>		lowp_i32vec2;
-
-	/// Low qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i32, lowp>		lowp_i32vec3;
-
-	/// Low qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i32, lowp>		lowp_i32vec4;
-
-
-	/// Medium qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i32, mediump>		mediump_i32vec1;
-
-	/// Medium qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i32, mediump>		mediump_i32vec2;
-
-	/// Medium qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i32, mediump>		mediump_i32vec3;
-
-	/// Medium qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i32, mediump>		mediump_i32vec4;
-
-
-	/// High qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i32, highp>		highp_i32vec1;
-
-	/// High qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i32, highp>		highp_i32vec2;
-
-	/// High qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i32, highp>		highp_i32vec3;
-
-	/// High qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i32, highp>		highp_i32vec4;
-
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_i32vec1			i32vec1;
-	typedef lowp_i32vec2			i32vec2;
-	typedef lowp_i32vec3			i32vec3;
-	typedef lowp_i32vec4			i32vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_i32vec1			i32vec1;
-	typedef mediump_i32vec2			i32vec2;
-	typedef mediump_i32vec3			i32vec3;
-	typedef mediump_i32vec4			i32vec4;
-#else
-	/// Default qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec1			i32vec1;
-
-	/// Default qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec2			i32vec2;
-
-	/// Default qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec3			i32vec3;
-
-	/// Default qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec4			i32vec4;
-#endif
-
-
-	/// Low qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i32, lowp>		lowp_i32vec1;
-
-	/// Low qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i32, lowp>		lowp_i32vec2;
-
-	/// Low qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i32, lowp>		lowp_i32vec3;
-
-	/// Low qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i32, lowp>		lowp_i32vec4;
 
+	typedef vec<1, i32, mediump>	mediump_i32vec1;
+	typedef vec<2, i32, mediump>	mediump_i32vec2;
+	typedef vec<3, i32, mediump>	mediump_i32vec3;
+	typedef vec<4, i32, mediump>	mediump_i32vec4;
 
-	/// Medium qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i32, mediump>		mediump_i32vec1;
-
-	/// Medium qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i32, mediump>		mediump_i32vec2;
-
-	/// Medium qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i32, mediump>		mediump_i32vec3;
-
-	/// Medium qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i32, mediump>		mediump_i32vec4;
-
-
-	/// High qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i32, highp>		highp_i32vec1;
-
-	/// High qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i32, highp>		highp_i32vec2;
-
-	/// High qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i32, highp>		highp_i32vec3;
-
-	/// High qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i32, highp>		highp_i32vec4;
 
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_i32vec1			i32vec1;
-	typedef lowp_i32vec2			i32vec2;
-	typedef lowp_i32vec3			i32vec3;
-	typedef lowp_i32vec4			i32vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_i32vec1			i32vec1;
-	typedef mediump_i32vec2			i32vec2;
-	typedef mediump_i32vec3			i32vec3;
-	typedef mediump_i32vec4			i32vec4;
-#else
-	/// Default qualifier 32 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec1			i32vec1;
-
-	/// Default qualifier 32 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec2			i32vec2;
-
-	/// Default qualifier 32 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec3			i32vec3;
-
-	/// Default qualifier 32 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_i32vec4			i32vec4;
-#endif
-
+	typedef vec<1, i32, defaultp>	i32vec1;
+	typedef vec<2, i32, defaultp>	i32vec2;
+	typedef vec<3, i32, defaultp>	i32vec3;
+	typedef vec<4, i32, defaultp>	i32vec4;
 
-
-	/// Low qualifier 64 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i64, lowp>		lowp_i64vec1;
-
-	/// Low qualifier 64 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i64, lowp>		lowp_i64vec2;
-
-	/// Low qualifier 64 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i64, lowp>		lowp_i64vec3;
-
-	/// Low qualifier 64 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i64, lowp>		lowp_i64vec4;
 
+	typedef vec<1, i64, mediump>	mediump_i64vec1;
+	typedef vec<2, i64, mediump>	mediump_i64vec2;
+	typedef vec<3, i64, mediump>	mediump_i64vec3;
+	typedef vec<4, i64, mediump>	mediump_i64vec4;
 
-	/// Medium qualifier 64 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, i64, mediump>		mediump_i64vec1;
-
-	/// Medium qualifier 64 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, i64, mediump>		mediump_i64vec2;
-
-	/// Medium qualifier 64 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, i64, mediump>		mediump_i64vec3;
-
-	/// Medium qualifier 64 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, i64, mediump>		mediump_i64vec4;
-
-
-	/// High qualifier 64 bit signed integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, i64, highp>		highp_i64vec1;
-
-	/// High qualifier 64 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, i64, highp>		highp_i64vec2;
-
-	/// High qualifier 64 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, i64, highp>		highp_i64vec3;
-
-	/// High qualifier 64 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, i64, highp>		highp_i64vec4;
 
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_i64vec1			i64vec1;
-	typedef lowp_i64vec2			i64vec2;
-	typedef lowp_i64vec3			i64vec3;
-	typedef lowp_i64vec4			i64vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_i64vec1			i64vec1;
-	typedef mediump_i64vec2			i64vec2;
-	typedef mediump_i64vec3			i64vec3;
-	typedef mediump_i64vec4			i64vec4;
-#else
-	/// Default qualifier 64 bit signed integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_i64vec1			i64vec1;
-
-	/// Default qualifier 64 bit signed integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_i64vec2			i64vec2;
-
-	/// Default qualifier 64 bit signed integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_i64vec3			i64vec3;
-
-	/// Default qualifier 64 bit signed integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_i64vec4			i64vec4;
-#endif
-
-
-	/////////////////////////////
-	// Unsigned int vector types
-
-	/// Low qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 lowp_uint8;
-
-	/// Low qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 lowp_uint16;
-
-	/// Low qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 lowp_uint32;
-
-	/// Low qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 lowp_uint64;
-
-
-	/// Low qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 lowp_uint8_t;
-
-	/// Low qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 lowp_uint16_t;
-
-	/// Low qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 lowp_uint32_t;
-
-	/// Low qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 lowp_uint64_t;
-
-
-	/// Low qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 lowp_u8;
-
-	/// Low qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 lowp_u16;
-
-	/// Low qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 lowp_u32;
-
-	/// Low qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 lowp_u64;
-
-
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 mediump_uint8;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 mediump_uint16;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 mediump_uint32;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 mediump_uint64;
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 mediump_uint8_t;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 mediump_uint16_t;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 mediump_uint32_t;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 mediump_uint64_t;
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 mediump_u8;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 mediump_u16;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 mediump_u32;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 mediump_u64;
-
+	typedef vec<1, i64, defaultp>	i64vec1;
+	typedef vec<2, i64, defaultp>	i64vec2;
+	typedef vec<3, i64, defaultp>	i64vec3;
+	typedef vec<4, i64, defaultp>	i64vec4;
+
+	// Vector uint
+
+	typedef vec<1, u32, lowp>		lowp_uvec1;
+	typedef vec<2, u32, lowp>		lowp_uvec2;
+	typedef vec<3, u32, lowp>		lowp_uvec3;
+	typedef vec<4, u32, lowp>		lowp_uvec4;
+
+	typedef vec<1, u32, mediump>	mediump_uvec1;
+	typedef vec<2, u32, mediump>	mediump_uvec2;
+	typedef vec<3, u32, mediump>	mediump_uvec3;
+	typedef vec<4, u32, mediump>	mediump_uvec4;
+
+	typedef vec<1, u32, highp>		highp_uvec1;
+	typedef vec<2, u32, highp>		highp_uvec2;
+	typedef vec<3, u32, highp>		highp_uvec3;
+	typedef vec<4, u32, highp>		highp_uvec4;
+
+	typedef vec<1, u32, defaultp>	uvec1;
+	typedef vec<2, u32, defaultp>	uvec2;
+	typedef vec<3, u32, defaultp>	uvec3;
+	typedef vec<4, u32, defaultp>	uvec4;
+
+	typedef vec<1, u8, lowp>		lowp_u8vec1;
+	typedef vec<2, u8, lowp>		lowp_u8vec2;
+	typedef vec<3, u8, lowp>		lowp_u8vec3;
+	typedef vec<4, u8, lowp>		lowp_u8vec4;
+
+	typedef vec<1, u8, mediump>		mediump_u8vec1;
+	typedef vec<2, u8, mediump>		mediump_u8vec2;
+	typedef vec<3, u8, mediump>		mediump_u8vec3;
+	typedef vec<4, u8, mediump>		mediump_u8vec4;
+
+	typedef vec<1, u8, highp>		highp_u8vec1;
+	typedef vec<2, u8, highp>		highp_u8vec2;
+	typedef vec<3, u8, highp>		highp_u8vec3;
+	typedef vec<4, u8, highp>		highp_u8vec4;
+
+	typedef vec<1, u8, defaultp>	u8vec1;
+	typedef vec<2, u8, defaultp>	u8vec2;
+	typedef vec<3, u8, defaultp>	u8vec3;
+	typedef vec<4, u8, defaultp>	u8vec4;
 
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 highp_uint8;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 highp_uint16;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 highp_uint32;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 highp_uint64;
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 highp_uint8_t;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 highp_uint16_t;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 highp_uint32_t;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 highp_uint64_t;
-
-	/// Medium qualifier 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 highp_u8;
-
-	/// Medium qualifier 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 highp_u16;
-
-	/// Medium qualifier 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 highp_u32;
-
-	/// Medium qualifier 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 highp_u64;
-
-
-
-	/// 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 uint8;
-
-	/// 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 uint16;
-
-	/// 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 uint32;
-
-	/// 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 uint64;
-
-#if GLM_HAS_EXTENDED_INTEGER_TYPE
-	using std::uint8_t;
-	using std::uint16_t;
-	using std::uint32_t;
-	using std::uint64_t;
-#else
-	/// 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 uint8_t;
-
-	/// 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 uint16_t;
-
-	/// 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 uint32_t;
-
-	/// 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 uint64_t;
-#endif
-
-	/// 8 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint8 u8;
-
-	/// 16 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint16 u16;
-
-	/// 32 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint32 u32;
-
-	/// 64 bit unsigned integer type.
-	/// @see gtc_type_precision
-	typedef detail::uint64 u64;
-
-
-
-	/// Low qualifier 8 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u8, lowp> lowp_u8vec1;
-
-	/// Low qualifier 8 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u8, lowp> lowp_u8vec2;
-
-	/// Low qualifier 8 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u8, lowp> lowp_u8vec3;
-
-	/// Low qualifier 8 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u8, lowp> lowp_u8vec4;
-
-
-	/// Medium qualifier 8 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u8, mediump> mediump_u8vec1;
-
-	/// Medium qualifier 8 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u8, mediump> mediump_u8vec2;
-
-	/// Medium qualifier 8 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u8, mediump> mediump_u8vec3;
-
-	/// Medium qualifier 8 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u8, mediump> mediump_u8vec4;
-
-
-	/// High qualifier 8 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u8, highp> highp_u8vec1;
-
-	/// High qualifier 8 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u8, highp> highp_u8vec2;
-
-	/// High qualifier 8 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u8, highp> highp_u8vec3;
-
-	/// High qualifier 8 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u8, highp> highp_u8vec4;
-
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_u8vec1				u8vec1;
-	typedef lowp_u8vec2				u8vec2;
-	typedef lowp_u8vec3				u8vec3;
-	typedef lowp_u8vec4				u8vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_u8vec1			u8vec1;
-	typedef mediump_u8vec2			u8vec2;
-	typedef mediump_u8vec3			u8vec3;
-	typedef mediump_u8vec4			u8vec4;
-#else
-	/// Default qualifier 8 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_u8vec1			u8vec1;
-
-	/// Default qualifier 8 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_u8vec2			u8vec2;
-
-	/// Default qualifier 8 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_u8vec3			u8vec3;
-
-	/// Default qualifier 8 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_u8vec4			u8vec4;
-#endif
-
-
-	/// Low qualifier 16 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u16, lowp>		lowp_u16vec1;
-
-	/// Low qualifier 16 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u16, lowp>		lowp_u16vec2;
-
-	/// Low qualifier 16 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u16, lowp>		lowp_u16vec3;
-
-	/// Low qualifier 16 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u16, lowp>		lowp_u16vec4;
 
+	typedef vec<1, u16, mediump>	mediump_u16vec1;
+	typedef vec<2, u16, mediump>	mediump_u16vec2;
+	typedef vec<3, u16, mediump>	mediump_u16vec3;
+	typedef vec<4, u16, mediump>	mediump_u16vec4;
 
-	/// Medium qualifier 16 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u16, mediump>		mediump_u16vec1;
-
-	/// Medium qualifier 16 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u16, mediump>		mediump_u16vec2;
-
-	/// Medium qualifier 16 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u16, mediump>		mediump_u16vec3;
-
-	/// Medium qualifier 16 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u16, mediump>		mediump_u16vec4;
-
-
-	/// High qualifier 16 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u16, highp>		highp_u16vec1;
-
-	/// High qualifier 16 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u16, highp>		highp_u16vec2;
-
-	/// High qualifier 16 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u16, highp>		highp_u16vec3;
-
-	/// High qualifier 16 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u16, highp>		highp_u16vec4;
 
+	typedef vec<1, u16, defaultp>	u16vec1;
+	typedef vec<2, u16, defaultp>	u16vec2;
+	typedef vec<3, u16, defaultp>	u16vec3;
+	typedef vec<4, u16, defaultp>	u16vec4;
 
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_u16vec1			u16vec1;
-	typedef lowp_u16vec2			u16vec2;
-	typedef lowp_u16vec3			u16vec3;
-	typedef lowp_u16vec4			u16vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_u16vec1			u16vec1;
-	typedef mediump_u16vec2			u16vec2;
-	typedef mediump_u16vec3			u16vec3;
-	typedef mediump_u16vec4			u16vec4;
-#else
-	/// Default qualifier 16 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_u16vec1			u16vec1;
-
-	/// Default qualifier 16 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_u16vec2			u16vec2;
-
-	/// Default qualifier 16 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_u16vec3			u16vec3;
-
-	/// Default qualifier 16 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_u16vec4			u16vec4;
-#endif
-
-
-	/// Low qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u32, lowp>		lowp_u32vec1;
-
-	/// Low qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u32, lowp>		lowp_u32vec2;
-
-	/// Low qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u32, lowp>		lowp_u32vec3;
-
-	/// Low qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u32, lowp>		lowp_u32vec4;
 
+	typedef vec<1, u32, mediump>	mediump_u32vec1;
+	typedef vec<2, u32, mediump>	mediump_u32vec2;
+	typedef vec<3, u32, mediump>	mediump_u32vec3;
+	typedef vec<4, u32, mediump>	mediump_u32vec4;
 
-	/// Medium qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u32, mediump>		mediump_u32vec1;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u32, mediump>		mediump_u32vec2;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u32, mediump>		mediump_u32vec3;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u32, mediump>		mediump_u32vec4;
-
-
-	/// High qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u32, highp>		highp_u32vec1;
-
-	/// High qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u32, highp>		highp_u32vec2;
-
-	/// High qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u32, highp>		highp_u32vec3;
-
-	/// High qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u32, highp>		highp_u32vec4;
 
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_u32vec1			u32vec1;
-	typedef lowp_u32vec2			u32vec2;
-	typedef lowp_u32vec3			u32vec3;
-	typedef lowp_u32vec4			u32vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_u32vec1			u32vec1;
-	typedef mediump_u32vec2			u32vec2;
-	typedef mediump_u32vec3			u32vec3;
-	typedef mediump_u32vec4			u32vec4;
-#else
-	/// Default qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec1			u32vec1;
-
-	/// Default qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec2			u32vec2;
-
-	/// Default qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec3			u32vec3;
-
-	/// Default qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec4			u32vec4;
-#endif
-
-
-	/// Low qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u32, lowp>		lowp_u32vec1;
-
-	/// Low qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u32, lowp>		lowp_u32vec2;
-
-	/// Low qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u32, lowp>		lowp_u32vec3;
-
-	/// Low qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u32, lowp>		lowp_u32vec4;
-
-
-	/// Medium qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u32, mediump>		mediump_u32vec1;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u32, mediump>		mediump_u32vec2;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u32, mediump>		mediump_u32vec3;
-
-	/// Medium qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u32, mediump>		mediump_u32vec4;
-
-
-	/// High qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u32, highp>		highp_u32vec1;
-
-	/// High qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u32, highp>		highp_u32vec2;
+	typedef vec<1, u32, defaultp>	u32vec1;
+	typedef vec<2, u32, defaultp>	u32vec2;
+	typedef vec<3, u32, defaultp>	u32vec3;
+	typedef vec<4, u32, defaultp>	u32vec4;
 
-	/// High qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u32, highp>		highp_u32vec3;
-
-	/// High qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u32, highp>		highp_u32vec4;
-
-#if(defined(GLM_PRECISION_LOWP_INT))
-	typedef lowp_u32vec1			u32vec1;
-	typedef lowp_u32vec2			u32vec2;
-	typedef lowp_u32vec3			u32vec3;
-	typedef lowp_u32vec4			u32vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_INT))
-	typedef mediump_u32vec1			u32vec1;
-	typedef mediump_u32vec2			u32vec2;
-	typedef mediump_u32vec3			u32vec3;
-	typedef mediump_u32vec4			u32vec4;
-#else
-	/// Default qualifier 32 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec1			u32vec1;
-
-	/// Default qualifier 32 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec2			u32vec2;
-
-	/// Default qualifier 32 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec3			u32vec3;
-
-	/// Default qualifier 32 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_u32vec4			u32vec4;
-#endif
-
-
-
-	/// Low qualifier 64 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u64, lowp>		lowp_u64vec1;
-
-	/// Low qualifier 64 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u64, lowp>		lowp_u64vec2;
-
-	/// Low qualifier 64 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u64, lowp>		lowp_u64vec3;
-
-	/// Low qualifier 64 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u64, lowp>		lowp_u64vec4;
 
+	typedef vec<1, u64, mediump>	mediump_u64vec1;
+	typedef vec<2, u64, mediump>	mediump_u64vec2;
+	typedef vec<3, u64, mediump>	mediump_u64vec3;
+	typedef vec<4, u64, mediump>	mediump_u64vec4;
 
-	/// Medium qualifier 64 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef vec<1, u64, mediump>		mediump_u64vec1;
-
-	/// Medium qualifier 64 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef vec<2, u64, mediump>		mediump_u64vec2;
-
-	/// Medium qualifier 64 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef vec<3, u64, mediump>		mediump_u64vec3;
-
-	/// Medium qualifier 64 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef vec<4, u64, mediump>		mediump_u64vec4;
-
-
-	/// High qualifier 64 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
 	typedef vec<1, u64, highp>		highp_u64vec1;
-
-	/// High qualifier 64 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
 	typedef vec<2, u64, highp>		highp_u64vec2;
-
-	/// High qualifier 64 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
 	typedef vec<3, u64, highp>		highp_u64vec3;
-
-	/// High qualifier 64 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
 	typedef vec<4, u64, highp>		highp_u64vec4;
 
-#if(defined(GLM_PRECISION_LOWP_UINT))
-	typedef lowp_u64vec1			u64vec1;
-	typedef lowp_u64vec2			u64vec2;
-	typedef lowp_u64vec3			u64vec3;
-	typedef lowp_u64vec4			u64vec4;
-#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
-	typedef mediump_u64vec1			u64vec1;
-	typedef mediump_u64vec2			u64vec2;
-	typedef mediump_u64vec3			u64vec3;
-	typedef mediump_u64vec4			u64vec4;
-#else
-	/// Default qualifier 64 bit unsigned integer scalar type.
-	/// @see gtc_type_precision
-	typedef highp_u64vec1			u64vec1;
-
-	/// Default qualifier 64 bit unsigned integer vector of 2 components type.
-	/// @see gtc_type_precision
-	typedef highp_u64vec2			u64vec2;
-
-	/// Default qualifier 64 bit unsigned integer vector of 3 components type.
-	/// @see gtc_type_precision
-	typedef highp_u64vec3			u64vec3;
-
-	/// Default qualifier 64 bit unsigned integer vector of 4 components type.
-	/// @see gtc_type_precision
-	typedef highp_u64vec4			u64vec4;
-#endif
-
-
-	//////////////////////
-	// Float vector types
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32_t;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64_t;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float32 lowp_f32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float64 lowp_f64;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32_t;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64_t;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float32 lowp_f32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float64 lowp_f64;
-
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 lowp_float32_t;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 lowp_float64_t;
-
-	/// Low 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float32 lowp_f32;
-
-	/// Low 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float64 lowp_f64;
-
-
-	/// Medium 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 mediump_float32;
-
-	/// Medium 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 mediump_float64;
-
-	/// Medium 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 mediump_float32_t;
-
-	/// Medium 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 mediump_float64_t;
-
-	/// Medium 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float32 mediump_f32;
-
-	/// Medium 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float64 mediump_f64;
-
-
-	/// High 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 highp_float32;
-
-	/// High 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 highp_float64;
-
-	/// High 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float32 highp_float32_t;
-
-	/// High 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef detail::float64 highp_float64_t;
-
-	/// High 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float32 highp_f32;
-
-	/// High 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef float64 highp_f64;
-
-
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_float32 float32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_float64 float64;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_float32_t float32_t;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_float64_t float64_t;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_f32 f32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef lowp_f64 f64;
-
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float32 float32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float64 float64;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float32 float32_t;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float64 float64_t;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float32 f32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef mediump_float64 f64;
-
-#else//(defined(GLM_PRECISION_HIGHP_FLOAT))
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float32 float32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float64 float64;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float32_t float32_t;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float64_t float64_t;
-
-	/// Default 32 bit single-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float32_t f32;
-
-	/// Default 64 bit double-qualifier floating-point scalar.
-	/// @see gtc_type_precision
-	typedef highp_float64_t f64;
-#endif
-
-
-	/// Low single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, lowp> lowp_vec1;
-
-	/// Low single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, float, lowp> lowp_vec2;
-
-	/// Low single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, float, lowp> lowp_vec3;
-
-	/// Low single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, float, lowp> lowp_vec4;
-
-	/// Low single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, lowp> lowp_fvec1;
-
-	/// Low single-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, float, lowp> lowp_fvec2;
-
-	/// Low single-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, float, lowp> lowp_fvec3;
-
-	/// Low single-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, float, lowp> lowp_fvec4;
-
-
-	/// Medium single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, mediump> mediump_vec1;
-
-	/// Medium Single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, float, mediump> mediump_vec2;
-
-	/// Medium Single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, float, mediump> mediump_vec3;
-
-	/// Medium Single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, float, mediump> mediump_vec4;
-
-	/// Medium single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, mediump> mediump_fvec1;
-
-	/// Medium Single-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, float, mediump> mediump_fvec2;
-
-	/// Medium Single-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, float, mediump> mediump_fvec3;
-
-	/// Medium Single-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, float, mediump> mediump_fvec4;
-
-
-	/// High single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, highp> highp_vec1;
-
-	/// High Single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, float, highp> highp_vec2;
-
-	/// High Single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, float, highp> highp_vec3;
-
-	/// High Single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, float, highp> highp_vec4;
-
-	/// High single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, float, highp> highp_fvec1;
-
-	/// High Single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, float, highp> highp_fvec2;
-
-	/// High Single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, float, highp> highp_fvec3;
-
-	/// High Single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, float, highp> highp_fvec4;
-
-
-	/// Low single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f32, lowp> lowp_f32vec1;
-
-	/// Low single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, f32, lowp> lowp_f32vec2;
-
-	/// Low single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, f32, lowp> lowp_f32vec3;
-
-	/// Low single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, f32, lowp> lowp_f32vec4;
-
-	/// Medium single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f32, mediump> mediump_f32vec1;
-
-	/// Medium single-qualifier floating-point vector of 2 components.
-	/// @see core_precision
-	typedef vec<2, f32, mediump> mediump_f32vec2;
-
-	/// Medium single-qualifier floating-point vector of 3 components.
-	/// @see core_precision
-	typedef vec<3, f32, mediump> mediump_f32vec3;
-
-	/// Medium single-qualifier floating-point vector of 4 components.
-	/// @see core_precision
-	typedef vec<4, f32, mediump> mediump_f32vec4;
-
-	/// High single-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f32, highp> highp_f32vec1;
-
-	/// High single-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, f32, highp> highp_f32vec2;
-
-	/// High single-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, f32, highp> highp_f32vec3;
-
-	/// High single-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, f32, highp> highp_f32vec4;
-
-
-	/// Low double-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f64, lowp> lowp_f64vec1;
-
-	/// Low double-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, f64, lowp> lowp_f64vec2;
-
-	/// Low double-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, f64, lowp> lowp_f64vec3;
-
-	/// Low double-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, f64, lowp> lowp_f64vec4;
-
-	/// Medium double-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f64, mediump> mediump_f64vec1;
-
-	/// Medium double-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, f64, mediump> mediump_f64vec2;
-
-	/// Medium double-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, f64, mediump> mediump_f64vec3;
-
-	/// Medium double-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, f64, mediump> mediump_f64vec4;
-
-	/// High double-qualifier floating-point vector of 1 component.
-	/// @see gtc_type_precision
-	typedef vec<1, f64, highp> highp_f64vec1;
-
-	/// High double-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef vec<2, f64, highp> highp_f64vec2;
-
-	/// High double-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef vec<3, f64, highp> highp_f64vec3;
-
-	/// High double-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef vec<4, f64, highp> highp_f64vec4;
-
-
-	//////////////////////
-	// Float matrix types
-
-	/// Low single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef lowp_f32 lowp_fmat1x1;
-
-	/// Low single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, lowp> lowp_fmat2x2;
-
-	/// Low single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, lowp> lowp_fmat2x3;
-
-	/// Low single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, lowp> lowp_fmat2x4;
-
-	/// Low single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, lowp> lowp_fmat3x2;
-
-	/// Low single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, lowp> lowp_fmat3x3;
-
-	/// Low single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, lowp> lowp_fmat3x4;
-
-	/// Low single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, lowp> lowp_fmat4x2;
-
-	/// Low single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, lowp> lowp_fmat4x3;
-
-	/// Low single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, lowp> lowp_fmat4x4;
-
-	/// Low single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef lowp_fmat1x1 lowp_fmat1;
-
-	/// Low single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_fmat2x2 lowp_fmat2;
-
-	/// Low single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_fmat3x3 lowp_fmat3;
-
-	/// Low single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_fmat4x4 lowp_fmat4;
-
-
-	/// Medium single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef mediump_f32 mediump_fmat1x1;
-
-	/// Medium single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, mediump> mediump_fmat2x2;
-
-	/// Medium single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, mediump> mediump_fmat2x3;
-
-	/// Medium single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, mediump> mediump_fmat2x4;
-
-	/// Medium single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, mediump> mediump_fmat3x2;
-
-	/// Medium single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, mediump> mediump_fmat3x3;
-
-	/// Medium single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, mediump> mediump_fmat3x4;
-
-	/// Medium single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, mediump> mediump_fmat4x2;
-
-	/// Medium single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, mediump> mediump_fmat4x3;
-
-	/// Medium single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, mediump> mediump_fmat4x4;
-
-	/// Medium single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef mediump_fmat1x1 mediump_fmat1;
-
-	/// Medium single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_fmat2x2 mediump_fmat2;
-
-	/// Medium single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_fmat3x3 mediump_fmat3;
-
-	/// Medium single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_fmat4x4 mediump_fmat4;
-
-
-	/// High single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef highp_f32 highp_fmat1x1;
-
-	/// High single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, highp> highp_fmat2x2;
-
-	/// High single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, highp> highp_fmat2x3;
-
-	/// High single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, highp> highp_fmat2x4;
-
-	/// High single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, highp> highp_fmat3x2;
-
-	/// High single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, highp> highp_fmat3x3;
-
-	/// High single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, highp> highp_fmat3x4;
-
-	/// High single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, highp> highp_fmat4x2;
-
-	/// High single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, highp> highp_fmat4x3;
-
-	/// High single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, highp> highp_fmat4x4;
-
-	/// High single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef highp_fmat1x1 highp_fmat1;
-
-	/// High single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_fmat2x2 highp_fmat2;
-
-	/// High single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_fmat3x3 highp_fmat3;
-
-	/// High single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_fmat4x4 highp_fmat4;
-
-
-	/// Low single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f32 lowp_f32mat1x1;
-
-	/// Low single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, lowp> lowp_f32mat2x2;
-
-	/// Low single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, lowp> lowp_f32mat2x3;
-
-	/// Low single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, lowp> lowp_f32mat2x4;
-
-	/// Low single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, lowp> lowp_f32mat3x2;
-
-	/// Low single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, lowp> lowp_f32mat3x3;
-
-	/// Low single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, lowp> lowp_f32mat3x4;
-
-	/// Low single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, lowp> lowp_f32mat4x2;
-
-	/// Low single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, lowp> lowp_f32mat4x3;
-
-	/// Low single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, lowp> lowp_f32mat4x4;
-
-	/// Low single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;
-
-	/// Low single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f32mat2x2 lowp_f32mat2;
-
-	/// Low single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f32mat3x3 lowp_f32mat3;
-
-	/// Low single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f32mat4x4 lowp_f32mat4;
-
-
-	/// High single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f32 mediump_f32mat1x1;
-
-	/// Low single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, mediump> mediump_f32mat2x2;
-
-	/// Medium single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, mediump> mediump_f32mat2x3;
-
-	/// Medium single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, mediump> mediump_f32mat2x4;
-
-	/// Medium single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, mediump> mediump_f32mat3x2;
-
-	/// Medium single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, mediump> mediump_f32mat3x3;
-
-	/// Medium single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, mediump> mediump_f32mat3x4;
-
-	/// Medium single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, mediump> mediump_f32mat4x2;
-
-	/// Medium single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, mediump> mediump_f32mat4x3;
-
-	/// Medium single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, mediump> mediump_f32mat4x4;
-
-	/// Medium single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef detail::tmat1x1<f32, mediump> f32mat1;
-
-	/// Medium single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f32mat2x2 mediump_f32mat2;
-
-	/// Medium single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f32mat3x3 mediump_f32mat3;
-
-	/// Medium single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f32mat4x4 mediump_f32mat4;
-
-
-	/// High single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f32 highp_f32mat1x1;
-
-	/// High single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f32, highp> highp_f32mat2x2;
-
-	/// High single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f32, highp> highp_f32mat2x3;
-
-	/// High single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f32, highp> highp_f32mat2x4;
-
-	/// High single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f32, highp> highp_f32mat3x2;
-
-	/// High single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f32, highp> highp_f32mat3x3;
-
-	/// High single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f32, highp> highp_f32mat3x4;
-
-	/// High single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f32, highp> highp_f32mat4x2;
-
-	/// High single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f32, highp> highp_f32mat4x3;
-
-	/// High single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f32, highp> highp_f32mat4x4;
-
-	/// High single-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef detail::tmat1x1<f32, highp> f32mat1;
-
-	/// High single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x2 highp_f32mat2;
-
-	/// High single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x3 highp_f32mat3;
-
-	/// High single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x4 highp_f32mat4;
-
-
-	/// Low double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f64 lowp_f64mat1x1;
-
-	/// Low double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f64, lowp> lowp_f64mat2x2;
-
-	/// Low double-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f64, lowp> lowp_f64mat2x3;
-
-	/// Low double-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f64, lowp> lowp_f64mat2x4;
-
-	/// Low double-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f64, lowp> lowp_f64mat3x2;
-
-	/// Low double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f64, lowp> lowp_f64mat3x3;
-
-	/// Low double-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f64, lowp> lowp_f64mat3x4;
-
-	/// Low double-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f64, lowp> lowp_f64mat4x2;
-
-	/// Low double-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f64, lowp> lowp_f64mat4x3;
-
-	/// Low double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f64, lowp> lowp_f64mat4x4;
-
-	/// Low double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef lowp_f64mat1x1 lowp_f64mat1;
-
-	/// Low double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f64mat2x2 lowp_f64mat2;
-
-	/// Low double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f64mat3x3 lowp_f64mat3;
-
-	/// Low double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef lowp_f64mat4x4 lowp_f64mat4;
-
-
-	/// Medium double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f64 Highp_f64mat1x1;
-
-	/// Medium double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f64, mediump> mediump_f64mat2x2;
-
-	/// Medium double-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f64, mediump> mediump_f64mat2x3;
-
-	/// Medium double-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f64, mediump> mediump_f64mat2x4;
-
-	/// Medium double-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f64, mediump> mediump_f64mat3x2;
-
-	/// Medium double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f64, mediump> mediump_f64mat3x3;
-
-	/// Medium double-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f64, mediump> mediump_f64mat3x4;
-
-	/// Medium double-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f64, mediump> mediump_f64mat4x2;
-
-	/// Medium double-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f64, mediump> mediump_f64mat4x3;
-
-	/// Medium double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f64, mediump> mediump_f64mat4x4;
-
-	/// Medium double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef mediump_f64mat1x1 mediump_f64mat1;
-
-	/// Medium double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f64mat2x2 mediump_f64mat2;
-
-	/// Medium double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f64mat3x3 mediump_f64mat3;
-
-	/// Medium double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mediump_f64mat4x4 mediump_f64mat4;
-
-	/// High double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef f64 highp_f64mat1x1;
-
-	/// High double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 2, f64, highp> highp_f64mat2x2;
-
-	/// High double-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 3, f64, highp> highp_f64mat2x3;
-
-	/// High double-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<2, 4, f64, highp> highp_f64mat2x4;
-
-	/// High double-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 2, f64, highp> highp_f64mat3x2;
-
-	/// High double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 3, f64, highp> highp_f64mat3x3;
-
-	/// High double-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<3, 4, f64, highp> highp_f64mat3x4;
-
-	/// High double-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 2, f64, highp> highp_f64mat4x2;
-
-	/// High double-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 3, f64, highp> highp_f64mat4x3;
-
-	/// High double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef mat<4, 4, f64, highp> highp_f64mat4x4;
-
-	/// High double-qualifier floating-point 1x1 matrix.
-	/// @see gtc_type_precision
-	//typedef highp_f64mat1x1 highp_f64mat1;
-
-	/// High double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat2x2 highp_f64mat2;
-
-	/// High double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat3x3 highp_f64mat3;
-
-	/// High double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat4x4 highp_f64mat4;
-
-	//////////////////////////
-	// Quaternion types
-
-	/// Low single-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f32, lowp> lowp_f32quat;
-
-	/// Low double-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f64, lowp> lowp_f64quat;
-
-	/// Medium single-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f32, mediump> mediump_f32quat;
-
-	/// Medium double-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f64, mediump> mediump_f64quat;
-
-	/// High single-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f32, highp> highp_f32quat;
-
-	/// High double-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef tquat<f64, highp> highp_f64quat;
-
-
-#if(defined(GLM_PRECISION_LOWP_FLOAT))
-	typedef lowp_f32vec1			fvec1;
-	typedef lowp_f32vec2			fvec2;
-	typedef lowp_f32vec3			fvec3;
-	typedef lowp_f32vec4			fvec4;
-	typedef lowp_f32mat2			fmat2;
-	typedef lowp_f32mat3			fmat3;
-	typedef lowp_f32mat4			fmat4;
-	typedef lowp_f32mat2x2			fmat2x2;
-	typedef lowp_f32mat3x2			fmat3x2;
-	typedef lowp_f32mat4x2			fmat4x2;
-	typedef lowp_f32mat2x3			fmat2x3;
-	typedef lowp_f32mat3x3			fmat3x3;
-	typedef lowp_f32mat4x3			fmat4x3;
-	typedef lowp_f32mat2x4			fmat2x4;
-	typedef lowp_f32mat3x4			fmat3x4;
-	typedef lowp_f32mat4x4			fmat4x4;
-	typedef lowp_f32quat			fquat;
-
-	typedef lowp_f32vec1			f32vec1;
-	typedef lowp_f32vec2			f32vec2;
-	typedef lowp_f32vec3			f32vec3;
-	typedef lowp_f32vec4			f32vec4;
-	typedef lowp_f32mat2			f32mat2;
-	typedef lowp_f32mat3			f32mat3;
-	typedef lowp_f32mat4			f32mat4;
-	typedef lowp_f32mat2x2			f32mat2x2;
-	typedef lowp_f32mat3x2			f32mat3x2;
-	typedef lowp_f32mat4x2			f32mat4x2;
-	typedef lowp_f32mat2x3			f32mat2x3;
-	typedef lowp_f32mat3x3			f32mat3x3;
-	typedef lowp_f32mat4x3			f32mat4x3;
-	typedef lowp_f32mat2x4			f32mat2x4;
-	typedef lowp_f32mat3x4			f32mat3x4;
-	typedef lowp_f32mat4x4			f32mat4x4;
-	typedef lowp_f32quat			f32quat;
-#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
-	typedef mediump_f32vec1			fvec1;
-	typedef mediump_f32vec2			fvec2;
-	typedef mediump_f32vec3			fvec3;
-	typedef mediump_f32vec4			fvec4;
-	typedef mediump_f32mat2			fmat2;
-	typedef mediump_f32mat3			fmat3;
-	typedef mediump_f32mat4			fmat4;
-	typedef mediump_f32mat2x2		fmat2x2;
-	typedef mediump_f32mat3x2		fmat3x2;
-	typedef mediump_f32mat4x2		fmat4x2;
-	typedef mediump_f32mat2x3		fmat2x3;
-	typedef mediump_f32mat3x3		fmat3x3;
-	typedef mediump_f32mat4x3		fmat4x3;
-	typedef mediump_f32mat2x4		fmat2x4;
-	typedef mediump_f32mat3x4		fmat3x4;
-	typedef mediump_f32mat4x4		fmat4x4;
-	typedef mediump_f32quat			fquat;
-
-	typedef mediump_f32vec1			f32vec1;
-	typedef mediump_f32vec2			f32vec2;
-	typedef mediump_f32vec3			f32vec3;
-	typedef mediump_f32vec4			f32vec4;
-	typedef mediump_f32mat2			f32mat2;
-	typedef mediump_f32mat3			f32mat3;
-	typedef mediump_f32mat4			f32mat4;
-	typedef mediump_f32mat2x2		f32mat2x2;
-	typedef mediump_f32mat3x2		f32mat3x2;
-	typedef mediump_f32mat4x2		f32mat4x2;
-	typedef mediump_f32mat2x3		f32mat2x3;
-	typedef mediump_f32mat3x3		f32mat3x3;
-	typedef mediump_f32mat4x3		f32mat4x3;
-	typedef mediump_f32mat2x4		f32mat2x4;
-	typedef mediump_f32mat3x4		f32mat3x4;
-	typedef mediump_f32mat4x4		f32mat4x4;
-	typedef mediump_f32quat			f32quat;
-#else//if(defined(GLM_PRECISION_HIGHP_FLOAT))
-	/// Default single-qualifier floating-point vector of 1 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec1			fvec1;
-
-	/// Default single-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec2			fvec2;
-
-	/// Default single-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec3			fvec3;
-
-	/// Default single-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec4			fvec4;
-
-	/// Default single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x2			fmat2x2;
-
-	/// Default single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x3			fmat2x3;
-
-	/// Default single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x4			fmat2x4;
-
-	/// Default single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x2			fmat3x2;
-
-	/// Default single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x3			fmat3x3;
-
-	/// Default single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x4			fmat3x4;
-
-	/// Default single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x2			fmat4x2;
-
-	/// Default single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x3			fmat4x3;
-
-	/// Default single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x4			fmat4x4;
-
-	/// Default single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef fmat2x2					fmat2;
-
-	/// Default single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef fmat3x3					fmat3;
-
-	/// Default single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef fmat4x4					fmat4;
-
-	/// Default single-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef highp_fquat				fquat;
-
-
-
-	/// Default single-qualifier floating-point vector of 1 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec1			f32vec1;
-
-	/// Default single-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec2			f32vec2;
-
-	/// Default single-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec3			f32vec3;
-
-	/// Default single-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef highp_f32vec4			f32vec4;
-
-	/// Default single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x2			f32mat2x2;
-
-	/// Default single-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x3			f32mat2x3;
-
-	/// Default single-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat2x4			f32mat2x4;
-
-	/// Default single-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x2			f32mat3x2;
-
-	/// Default single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x3			f32mat3x3;
-
-	/// Default single-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat3x4			f32mat3x4;
-
-	/// Default single-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x2			f32mat4x2;
-
-	/// Default single-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x3			f32mat4x3;
-
-	/// Default single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f32mat4x4			f32mat4x4;
-
-	/// Default single-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef f32mat2x2				f32mat2;
-
-	/// Default single-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef f32mat3x3				f32mat3;
-
-	/// Default single-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef f32mat4x4				f32mat4;
-
-	/// Default single-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef highp_f32quat			f32quat;
-#endif
-
-#if(defined(GLM_PRECISION_LOWP_DOUBLE))
-	typedef lowp_f64vec1			f64vec1;
-	typedef lowp_f64vec2			f64vec2;
-	typedef lowp_f64vec3			f64vec3;
-	typedef lowp_f64vec4			f64vec4;
-	typedef lowp_f64mat2			f64mat2;
-	typedef lowp_f64mat3			f64mat3;
-	typedef lowp_f64mat4			f64mat4;
-	typedef lowp_f64mat2x2			f64mat2x2;
-	typedef lowp_f64mat3x2			f64mat3x2;
-	typedef lowp_f64mat4x2			f64mat4x2;
-	typedef lowp_f64mat2x3			f64mat2x3;
-	typedef lowp_f64mat3x3			f64mat3x3;
-	typedef lowp_f64mat4x3			f64mat4x3;
-	typedef lowp_f64mat2x4			f64mat2x4;
-	typedef lowp_f64mat3x4			f64mat3x4;
-	typedef lowp_f64mat4x4			f64mat4x4;
-	typedef lowp_f64quat			f64quat;
-#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
-	typedef mediump_f64vec1			f64vec1;
-	typedef mediump_f64vec2			f64vec2;
-	typedef mediump_f64vec3			f64vec3;
-	typedef mediump_f64vec4			f64vec4;
-	typedef mediump_f64mat2			f64mat2;
-	typedef mediump_f64mat3			f64mat3;
-	typedef mediump_f64mat4			f64mat4;
-	typedef mediump_f64mat2x2		f64mat2x2;
-	typedef mediump_f64mat3x2		f64mat3x2;
-	typedef mediump_f64mat4x2		f64mat4x2;
-	typedef mediump_f64mat2x3		f64mat2x3;
-	typedef mediump_f64mat3x3		f64mat3x3;
-	typedef mediump_f64mat4x3		f64mat4x3;
-	typedef mediump_f64mat2x4		f64mat2x4;
-	typedef mediump_f64mat3x4		f64mat3x4;
-	typedef mediump_f64mat4x4		f64mat4x4;
-	typedef mediump_f64quat			f64quat;
-#else
-	/// Default double-qualifier floating-point vector of 1 components.
-	/// @see gtc_type_precision
-	typedef highp_f64vec1			f64vec1;
-
-	/// Default double-qualifier floating-point vector of 2 components.
-	/// @see gtc_type_precision
-	typedef highp_f64vec2			f64vec2;
-
-	/// Default double-qualifier floating-point vector of 3 components.
-	/// @see gtc_type_precision
-	typedef highp_f64vec3			f64vec3;
-
-	/// Default double-qualifier floating-point vector of 4 components.
-	/// @see gtc_type_precision
-	typedef highp_f64vec4			f64vec4;
-
-	/// Default double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat2x2			f64mat2x2;
-
-	/// Default double-qualifier floating-point 2x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat2x3			f64mat2x3;
-
-	/// Default double-qualifier floating-point 2x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat2x4			f64mat2x4;
-
-	/// Default double-qualifier floating-point 3x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat3x2			f64mat3x2;
-
-	/// Default double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat3x3			f64mat3x3;
-
-	/// Default double-qualifier floating-point 3x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat3x4			f64mat3x4;
-
-	/// Default double-qualifier floating-point 4x2 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat4x2			f64mat4x2;
-
-	/// Default double-qualifier floating-point 4x3 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat4x3			f64mat4x3;
-
-	/// Default double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef highp_f64mat4x4			f64mat4x4;
-
-	/// Default double-qualifier floating-point 2x2 matrix.
-	/// @see gtc_type_precision
-	typedef f64mat2x2				f64mat2;
-
-	/// Default double-qualifier floating-point 3x3 matrix.
-	/// @see gtc_type_precision
-	typedef f64mat3x3				f64mat3;
-
-	/// Default double-qualifier floating-point 4x4 matrix.
-	/// @see gtc_type_precision
-	typedef f64mat4x4				f64mat4;
-
-	/// Default double-qualifier floating-point quaternion.
-	/// @see gtc_type_precision
-	typedef highp_f64quat			f64quat;
-#endif
-
+	typedef vec<1, u64, defaultp>	u64vec1;
+	typedef vec<2, u64, defaultp>	u64vec2;
+	typedef vec<3, u64, defaultp>	u64vec3;
+	typedef vec<4, u64, defaultp>	u64vec4;
+
+	// Vector float
+
+	typedef vec<1, float, lowp>			lowp_vec1;
+	typedef vec<2, float, lowp>			lowp_vec2;
+	typedef vec<3, float, lowp>			lowp_vec3;
+	typedef vec<4, float, lowp>			lowp_vec4;
+
+	typedef vec<1, float, mediump>		mediump_vec1;
+	typedef vec<2, float, mediump>		mediump_vec2;
+	typedef vec<3, float, mediump>		mediump_vec3;
+	typedef vec<4, float, mediump>		mediump_vec4;
+
+	typedef vec<1, float, highp>		highp_vec1;
+	typedef vec<2, float, highp>		highp_vec2;
+	typedef vec<3, float, highp>		highp_vec3;
+	typedef vec<4, float, highp>		highp_vec4;
+
+	typedef vec<1, float, defaultp>		vec1;
+	typedef vec<2, float, defaultp>		vec2;
+	typedef vec<3, float, defaultp>		vec3;
+	typedef vec<4, float, defaultp>		vec4;
+
+	typedef vec<1, float, lowp>			lowp_fvec1;
+	typedef vec<2, float, lowp>			lowp_fvec2;
+	typedef vec<3, float, lowp>			lowp_fvec3;
+	typedef vec<4, float, lowp>			lowp_fvec4;
+
+	typedef vec<1, float, mediump>		mediump_fvec1;
+	typedef vec<2, float, mediump>		mediump_fvec2;
+	typedef vec<3, float, mediump>		mediump_fvec3;
+	typedef vec<4, float, mediump>		mediump_fvec4;
+
+	typedef vec<1, float, highp>		highp_fvec1;
+	typedef vec<2, float, highp>		highp_fvec2;
+	typedef vec<3, float, highp>		highp_fvec3;
+	typedef vec<4, float, highp>		highp_fvec4;
+
+	typedef vec<1, f32, defaultp>		fvec1;
+	typedef vec<2, f32, defaultp>		fvec2;
+	typedef vec<3, f32, defaultp>		fvec3;
+	typedef vec<4, f32, defaultp>		fvec4;
+
+	typedef vec<1, f32, lowp>			lowp_f32vec1;
+	typedef vec<2, f32, lowp>			lowp_f32vec2;
+	typedef vec<3, f32, lowp>			lowp_f32vec3;
+	typedef vec<4, f32, lowp>			lowp_f32vec4;
+
+	typedef vec<1, f32, mediump>		mediump_f32vec1;
+	typedef vec<2, f32, mediump>		mediump_f32vec2;
+	typedef vec<3, f32, mediump>		mediump_f32vec3;
+	typedef vec<4, f32, mediump>		mediump_f32vec4;
+
+	typedef vec<1, f32, highp>			highp_f32vec1;
+	typedef vec<2, f32, highp>			highp_f32vec2;
+	typedef vec<3, f32, highp>			highp_f32vec3;
+	typedef vec<4, f32, highp>			highp_f32vec4;
+
+	typedef vec<1, f32, defaultp>		f32vec1;
+	typedef vec<2, f32, defaultp>		f32vec2;
+	typedef vec<3, f32, defaultp>		f32vec3;
+	typedef vec<4, f32, defaultp>		f32vec4;
+
+	typedef vec<1, f64, lowp>			lowp_dvec1;
+	typedef vec<2, f64, lowp>			lowp_dvec2;
+	typedef vec<3, f64, lowp>			lowp_dvec3;
+	typedef vec<4, f64, lowp>			lowp_dvec4;
+
+	typedef vec<1, f64, mediump>		mediump_dvec1;
+	typedef vec<2, f64, mediump>		mediump_dvec2;
+	typedef vec<3, f64, mediump>		mediump_dvec3;
+	typedef vec<4, f64, mediump>		mediump_dvec4;
+
+	typedef vec<1, f64, highp>			highp_dvec1;
+	typedef vec<2, f64, highp>			highp_dvec2;
+	typedef vec<3, f64, highp>			highp_dvec3;
+	typedef vec<4, f64, highp>			highp_dvec4;
+
+	typedef vec<1, f64, defaultp>		dvec1;
+	typedef vec<2, f64, defaultp>		dvec2;
+	typedef vec<3, f64, defaultp>		dvec3;
+	typedef vec<4, f64, defaultp>		dvec4;
+
+	typedef vec<1, f64, lowp>			lowp_f64vec1;
+	typedef vec<2, f64, lowp>			lowp_f64vec2;
+	typedef vec<3, f64, lowp>			lowp_f64vec3;
+	typedef vec<4, f64, lowp>			lowp_f64vec4;
+
+	typedef vec<1, f64, mediump>		mediump_f64vec1;
+	typedef vec<2, f64, mediump>		mediump_f64vec2;
+	typedef vec<3, f64, mediump>		mediump_f64vec3;
+	typedef vec<4, f64, mediump>		mediump_f64vec4;
+
+	typedef vec<1, f64, highp>			highp_f64vec1;
+	typedef vec<2, f64, highp>			highp_f64vec2;
+	typedef vec<3, f64, highp>			highp_f64vec3;
+	typedef vec<4, f64, highp>			highp_f64vec4;
+
+	typedef vec<1, f64, defaultp>		f64vec1;
+	typedef vec<2, f64, defaultp>		f64vec2;
+	typedef vec<3, f64, defaultp>		f64vec3;
+	typedef vec<4, f64, defaultp>		f64vec4;
+
+	// Matrix NxN
+
+	typedef mat<2, 2, f32, lowp>		lowp_mat2;
+	typedef mat<3, 3, f32, lowp>		lowp_mat3;
+	typedef mat<4, 4, f32, lowp>		lowp_mat4;
+
+	typedef mat<2, 2, f32, mediump>		mediump_mat2;
+	typedef mat<3, 3, f32, mediump>		mediump_mat3;
+	typedef mat<4, 4, f32, mediump>		mediump_mat4;
+
+	typedef mat<2, 2, f32, highp>		highp_mat2;
+	typedef mat<3, 3, f32, highp>		highp_mat3;
+	typedef mat<4, 4, f32, highp>		highp_mat4;
+
+	typedef mat<2, 2, f32, defaultp>	mat2;
+	typedef mat<3, 3, f32, defaultp>	mat3;
+	typedef mat<4, 4, f32, defaultp>	mat4;
+
+	typedef mat<2, 2, f32, lowp>		lowp_fmat2;
+	typedef mat<3, 3, f32, lowp>		lowp_fmat3;
+	typedef mat<4, 4, f32, lowp>		lowp_fmat4;
+
+	typedef mat<2, 2, f32, mediump>		mediump_fmat2;
+	typedef mat<3, 3, f32, mediump>		mediump_fmat3;
+	typedef mat<4, 4, f32, mediump>		mediump_fmat4;
+
+	typedef mat<2, 2, f32, highp>		highp_fmat2;
+	typedef mat<3, 3, f32, highp>		highp_fmat3;
+	typedef mat<4, 4, f32, highp>		highp_fmat4;
+
+	typedef mat<2, 2, f32, defaultp>	fmat2;
+	typedef mat<3, 3, f32, defaultp>	fmat3;
+	typedef mat<4, 4, f32, defaultp>	fmat4;
+
+	typedef mat<2, 2, f32, lowp>		lowp_f32mat2;
+	typedef mat<3, 3, f32, lowp>		lowp_f32mat3;
+	typedef mat<4, 4, f32, lowp>		lowp_f32mat4;
+
+	typedef mat<2, 2, f32, mediump>		mediump_f32mat2;
+	typedef mat<3, 3, f32, mediump>		mediump_f32mat3;
+	typedef mat<4, 4, f32, mediump>		mediump_f32mat4;
+
+	typedef mat<2, 2, f32, highp>		highp_f32mat2;
+	typedef mat<3, 3, f32, highp>		highp_f32mat3;
+	typedef mat<4, 4, f32, highp>		highp_f32mat4;
+
+	typedef mat<2, 2, f32, defaultp>	f32mat2;
+	typedef mat<3, 3, f32, defaultp>	f32mat3;
+	typedef mat<4, 4, f32, defaultp>	f32mat4;
+
+	typedef mat<2, 2, f64, lowp>		lowp_dmat2;
+	typedef mat<3, 3, f64, lowp>		lowp_dmat3;
+	typedef mat<4, 4, f64, lowp>		lowp_dmat4;
+
+	typedef mat<2, 2, f64, mediump>		mediump_dmat2;
+	typedef mat<3, 3, f64, mediump>		mediump_dmat3;
+	typedef mat<4, 4, f64, mediump>		mediump_dmat4;
+
+	typedef mat<2, 2, f64, highp>		highp_dmat2;
+	typedef mat<3, 3, f64, highp>		highp_dmat3;
+	typedef mat<4, 4, f64, highp>		highp_dmat4;
+
+	typedef mat<2, 2, f64, defaultp>	dmat2;
+	typedef mat<3, 3, f64, defaultp>	dmat3;
+	typedef mat<4, 4, f64, defaultp>	dmat4;
+
+	typedef mat<2, 2, f64, lowp>		lowp_f64mat2;
+	typedef mat<3, 3, f64, lowp>		lowp_f64mat3;
+	typedef mat<4, 4, f64, lowp>		lowp_f64mat4;
+
+	typedef mat<2, 2, f64, mediump>		mediump_f64mat2;
+	typedef mat<3, 3, f64, mediump>		mediump_f64mat3;
+	typedef mat<4, 4, f64, mediump>		mediump_f64mat4;
+
+	typedef mat<2, 2, f64, highp>		highp_f64mat2;
+	typedef mat<3, 3, f64, highp>		highp_f64mat3;
+	typedef mat<4, 4, f64, highp>		highp_f64mat4;
+
+	typedef mat<2, 2, f64, defaultp>	f64mat2;
+	typedef mat<3, 3, f64, defaultp>	f64mat3;
+	typedef mat<4, 4, f64, defaultp>	f64mat4;
+
+	// Matrix MxN
+
+	typedef mat<2, 2, f32, lowp>		lowp_mat2x2;
+	typedef mat<2, 3, f32, lowp>		lowp_mat2x3;
+	typedef mat<2, 4, f32, lowp>		lowp_mat2x4;
+	typedef mat<3, 2, f32, lowp>		lowp_mat3x2;
+	typedef mat<3, 3, f32, lowp>		lowp_mat3x3;
+	typedef mat<3, 4, f32, lowp>		lowp_mat3x4;
+	typedef mat<4, 2, f32, lowp>		lowp_mat4x2;
+	typedef mat<4, 3, f32, lowp>		lowp_mat4x3;
+	typedef mat<4, 4, f32, lowp>		lowp_mat4x4;
+
+	typedef mat<2, 2, f32, mediump>		mediump_mat2x2;
+	typedef mat<2, 3, f32, mediump>		mediump_mat2x3;
+	typedef mat<2, 4, f32, mediump>		mediump_mat2x4;
+	typedef mat<3, 2, f32, mediump>		mediump_mat3x2;
+	typedef mat<3, 3, f32, mediump>		mediump_mat3x3;
+	typedef mat<3, 4, f32, mediump>		mediump_mat3x4;
+	typedef mat<4, 2, f32, mediump>		mediump_mat4x2;
+	typedef mat<4, 3, f32, mediump>		mediump_mat4x3;
+	typedef mat<4, 4, f32, mediump>		mediump_mat4x4;
+
+	typedef mat<2, 2, f32, highp>		highp_mat2x2;
+	typedef mat<2, 3, f32, highp>		highp_mat2x3;
+	typedef mat<2, 4, f32, highp>		highp_mat2x4;
+	typedef mat<3, 2, f32, highp>		highp_mat3x2;
+	typedef mat<3, 3, f32, highp>		highp_mat3x3;
+	typedef mat<3, 4, f32, highp>		highp_mat3x4;
+	typedef mat<4, 2, f32, highp>		highp_mat4x2;
+	typedef mat<4, 3, f32, highp>		highp_mat4x3;
+	typedef mat<4, 4, f32, highp>		highp_mat4x4;
+
+	typedef mat<2, 2, f32, defaultp>	mat2x2;
+	typedef mat<3, 2, f32, defaultp>	mat3x2;
+	typedef mat<4, 2, f32, defaultp>	mat4x2;
+	typedef mat<2, 3, f32, defaultp>	mat2x3;
+	typedef mat<3, 3, f32, defaultp>	mat3x3;
+	typedef mat<4, 3, f32, defaultp>	mat4x3;
+	typedef mat<2, 4, f32, defaultp>	mat2x4;
+	typedef mat<3, 4, f32, defaultp>	mat3x4;
+	typedef mat<4, 4, f32, defaultp>	mat4x4;
+
+	typedef mat<2, 2, f32, lowp>		lowp_fmat2x2;
+	typedef mat<2, 3, f32, lowp>		lowp_fmat2x3;
+	typedef mat<2, 4, f32, lowp>		lowp_fmat2x4;
+	typedef mat<3, 2, f32, lowp>		lowp_fmat3x2;
+	typedef mat<3, 3, f32, lowp>		lowp_fmat3x3;
+	typedef mat<3, 4, f32, lowp>		lowp_fmat3x4;
+	typedef mat<4, 2, f32, lowp>		lowp_fmat4x2;
+	typedef mat<4, 3, f32, lowp>		lowp_fmat4x3;
+	typedef mat<4, 4, f32, lowp>		lowp_fmat4x4;
+
+	typedef mat<2, 2, f32, mediump>		mediump_fmat2x2;
+	typedef mat<2, 3, f32, mediump>		mediump_fmat2x3;
+	typedef mat<2, 4, f32, mediump>		mediump_fmat2x4;
+	typedef mat<3, 2, f32, mediump>		mediump_fmat3x2;
+	typedef mat<3, 3, f32, mediump>		mediump_fmat3x3;
+	typedef mat<3, 4, f32, mediump>		mediump_fmat3x4;
+	typedef mat<4, 2, f32, mediump>		mediump_fmat4x2;
+	typedef mat<4, 3, f32, mediump>		mediump_fmat4x3;
+	typedef mat<4, 4, f32, mediump>		mediump_fmat4x4;
+
+	typedef mat<2, 2, f32, highp>		highp_fmat2x2;
+	typedef mat<2, 3, f32, highp>		highp_fmat2x3;
+	typedef mat<2, 4, f32, highp>		highp_fmat2x4;
+	typedef mat<3, 2, f32, highp>		highp_fmat3x2;
+	typedef mat<3, 3, f32, highp>		highp_fmat3x3;
+	typedef mat<3, 4, f32, highp>		highp_fmat3x4;
+	typedef mat<4, 2, f32, highp>		highp_fmat4x2;
+	typedef mat<4, 3, f32, highp>		highp_fmat4x3;
+	typedef mat<4, 4, f32, highp>		highp_fmat4x4;
+
+	typedef mat<2, 2, f32, defaultp>	fmat2x2;
+	typedef mat<3, 2, f32, defaultp>	fmat3x2;
+	typedef mat<4, 2, f32, defaultp>	fmat4x2;
+	typedef mat<2, 3, f32, defaultp>	fmat2x3;
+	typedef mat<3, 3, f32, defaultp>	fmat3x3;
+	typedef mat<4, 3, f32, defaultp>	fmat4x3;
+	typedef mat<2, 4, f32, defaultp>	fmat2x4;
+	typedef mat<3, 4, f32, defaultp>	fmat3x4;
+	typedef mat<4, 4, f32, defaultp>	fmat4x4;
+
+	typedef mat<2, 2, f32, lowp>		lowp_f32mat2x2;
+	typedef mat<2, 3, f32, lowp>		lowp_f32mat2x3;
+	typedef mat<2, 4, f32, lowp>		lowp_f32mat2x4;
+	typedef mat<3, 2, f32, lowp>		lowp_f32mat3x2;
+	typedef mat<3, 3, f32, lowp>		lowp_f32mat3x3;
+	typedef mat<3, 4, f32, lowp>		lowp_f32mat3x4;
+	typedef mat<4, 2, f32, lowp>		lowp_f32mat4x2;
+	typedef mat<4, 3, f32, lowp>		lowp_f32mat4x3;
+	typedef mat<4, 4, f32, lowp>		lowp_f32mat4x4;
+	
+	typedef mat<2, 2, f32, mediump>		mediump_f32mat2x2;
+	typedef mat<2, 3, f32, mediump>		mediump_f32mat2x3;
+	typedef mat<2, 4, f32, mediump>		mediump_f32mat2x4;
+	typedef mat<3, 2, f32, mediump>		mediump_f32mat3x2;
+	typedef mat<3, 3, f32, mediump>		mediump_f32mat3x3;
+	typedef mat<3, 4, f32, mediump>		mediump_f32mat3x4;
+	typedef mat<4, 2, f32, mediump>		mediump_f32mat4x2;
+	typedef mat<4, 3, f32, mediump>		mediump_f32mat4x3;
+	typedef mat<4, 4, f32, mediump>		mediump_f32mat4x4;
+
+	typedef mat<2, 2, f32, highp>		highp_f32mat2x2;
+	typedef mat<2, 3, f32, highp>		highp_f32mat2x3;
+	typedef mat<2, 4, f32, highp>		highp_f32mat2x4;
+	typedef mat<3, 2, f32, highp>		highp_f32mat3x2;
+	typedef mat<3, 3, f32, highp>		highp_f32mat3x3;
+	typedef mat<3, 4, f32, highp>		highp_f32mat3x4;
+	typedef mat<4, 2, f32, highp>		highp_f32mat4x2;
+	typedef mat<4, 3, f32, highp>		highp_f32mat4x3;
+	typedef mat<4, 4, f32, highp>		highp_f32mat4x4;
+
+	typedef mat<2, 2, f32, defaultp>	f32mat2x2;
+	typedef mat<3, 2, f32, defaultp>	f32mat3x2;
+	typedef mat<4, 2, f32, defaultp>	f32mat4x2;
+	typedef mat<2, 3, f32, defaultp>	f32mat2x3;
+	typedef mat<3, 3, f32, defaultp>	f32mat3x3;
+	typedef mat<4, 3, f32, defaultp>	f32mat4x3;
+	typedef mat<2, 4, f32, defaultp>	f32mat2x4;
+	typedef mat<3, 4, f32, defaultp>	f32mat3x4;
+	typedef mat<4, 4, f32, defaultp>	f32mat4x4;
+
+	typedef mat<2, 2, double, lowp>		lowp_dmat2x2;
+	typedef mat<2, 3, double, lowp>		lowp_dmat2x3;
+	typedef mat<2, 4, double, lowp>		lowp_dmat2x4;
+	typedef mat<3, 2, double, lowp>		lowp_dmat3x2;
+	typedef mat<3, 3, double, lowp>		lowp_dmat3x3;
+	typedef mat<3, 4, double, lowp>		lowp_dmat3x4;
+	typedef mat<4, 2, double, lowp>		lowp_dmat4x2;
+	typedef mat<4, 3, double, lowp>		lowp_dmat4x3;
+	typedef mat<4, 4, double, lowp>		lowp_dmat4x4;
+
+	typedef mat<2, 2, double, mediump>	mediump_dmat2x2;
+	typedef mat<2, 3, double, mediump>	mediump_dmat2x3;
+	typedef mat<2, 4, double, mediump>	mediump_dmat2x4;
+	typedef mat<3, 2, double, mediump>	mediump_dmat3x2;
+	typedef mat<3, 3, double, mediump>	mediump_dmat3x3;
+	typedef mat<3, 4, double, mediump>	mediump_dmat3x4;
+	typedef mat<4, 2, double, mediump>	mediump_dmat4x2;
+	typedef mat<4, 3, double, mediump>	mediump_dmat4x3;
+	typedef mat<4, 4, double, mediump>	mediump_dmat4x4;
+
+	typedef mat<2, 2, double, highp>	highp_dmat2x2;
+	typedef mat<2, 3, double, highp>	highp_dmat2x3;
+	typedef mat<2, 4, double, highp>	highp_dmat2x4;
+	typedef mat<3, 2, double, highp>	highp_dmat3x2;
+	typedef mat<3, 3, double, highp>	highp_dmat3x3;
+	typedef mat<3, 4, double, highp>	highp_dmat3x4;
+	typedef mat<4, 2, double, highp>	highp_dmat4x2;
+	typedef mat<4, 3, double, highp>	highp_dmat4x3;
+	typedef mat<4, 4, double, highp>	highp_dmat4x4;
+
+	typedef mat<2, 2, double, defaultp>	dmat2x2;
+	typedef mat<3, 2, double, defaultp>	dmat3x2;
+	typedef mat<4, 2, double, defaultp>	dmat4x2;
+	typedef mat<2, 3, double, defaultp>	dmat2x3;
+	typedef mat<3, 3, double, defaultp>	dmat3x3;
+	typedef mat<4, 3, double, defaultp>	dmat4x3;
+	typedef mat<2, 4, double, defaultp>	dmat2x4;
+	typedef mat<3, 4, double, defaultp>	dmat3x4;
+	typedef mat<4, 4, double, defaultp>	dmat4x4;
+
+	typedef mat<2, 2, f64, lowp>		lowp_f64mat2x2;
+	typedef mat<2, 3, f64, lowp>		lowp_f64mat2x3;
+	typedef mat<2, 4, f64, lowp>		lowp_f64mat2x4;
+	typedef mat<3, 2, f64, lowp>		lowp_f64mat3x2;
+	typedef mat<3, 3, f64, lowp>		lowp_f64mat3x3;
+	typedef mat<3, 4, f64, lowp>		lowp_f64mat3x4;
+	typedef mat<4, 2, f64, lowp>		lowp_f64mat4x2;
+	typedef mat<4, 3, f64, lowp>		lowp_f64mat4x3;
+	typedef mat<4, 4, f64, lowp>		lowp_f64mat4x4;
+
+	typedef mat<2, 2, f64, mediump>		mediump_f64mat2x2;
+	typedef mat<2, 3, f64, mediump>		mediump_f64mat2x3;
+	typedef mat<2, 4, f64, mediump>		mediump_f64mat2x4;
+	typedef mat<3, 2, f64, mediump>		mediump_f64mat3x2;
+	typedef mat<3, 3, f64, mediump>		mediump_f64mat3x3;
+	typedef mat<3, 4, f64, mediump>		mediump_f64mat3x4;
+	typedef mat<4, 2, f64, mediump>		mediump_f64mat4x2;
+	typedef mat<4, 3, f64, mediump>		mediump_f64mat4x3;
+	typedef mat<4, 4, f64, mediump>		mediump_f64mat4x4;
+
+	typedef mat<2, 2, f64, highp>		highp_f64mat2x2;
+	typedef mat<2, 3, f64, highp>		highp_f64mat2x3;
+	typedef mat<2, 4, f64, highp>		highp_f64mat2x4;
+	typedef mat<3, 2, f64, highp>		highp_f64mat3x2;
+	typedef mat<3, 3, f64, highp>		highp_f64mat3x3;
+	typedef mat<3, 4, f64, highp>		highp_f64mat3x4;
+	typedef mat<4, 2, f64, highp>		highp_f64mat4x2;
+	typedef mat<4, 3, f64, highp>		highp_f64mat4x3;
+	typedef mat<4, 4, f64, highp>		highp_f64mat4x4;
+
+	typedef mat<2, 2, f64, defaultp>	f64mat2x2;
+	typedef mat<3, 2, f64, defaultp>	f64mat3x2;
+	typedef mat<4, 2, f64, defaultp>	f64mat4x2;
+	typedef mat<2, 3, f64, defaultp>	f64mat2x3;
+	typedef mat<3, 3, f64, defaultp>	f64mat3x3;
+	typedef mat<4, 3, f64, defaultp>	f64mat4x3;
+	typedef mat<2, 4, f64, defaultp>	f64mat2x4;
+	typedef mat<3, 4, f64, defaultp>	f64mat3x4;
+	typedef mat<4, 4, f64, defaultp>	f64mat4x4;
+
+	// Quaternion
+
+	typedef qua<float, lowp>			lowp_quat;
+	typedef qua<float, mediump>			mediump_quat;
+	typedef qua<float, highp>			highp_quat;
+	typedef qua<float, defaultp>		quat;
+
+	typedef qua<float, lowp>			lowp_fquat;
+	typedef qua<float, mediump>			mediump_fquat;
+	typedef qua<float, highp>			highp_fquat;
+	typedef qua<float, defaultp>		fquat;
+
+	typedef qua<f32, lowp>				lowp_f32quat;
+	typedef qua<f32, mediump>			mediump_f32quat;
+	typedef qua<f32, highp>				highp_f32quat;
+	typedef qua<f32, defaultp>			f32quat;
+
+	typedef qua<double, lowp>			lowp_dquat;
+	typedef qua<double, mediump>		mediump_dquat;
+	typedef qua<double, highp>			highp_dquat;
+	typedef qua<double, defaultp>		dquat;
+
+	typedef qua<f64, lowp>				lowp_f64quat;
+	typedef qua<f64, mediump>			mediump_f64quat;
+	typedef qua<f64, highp>				highp_f64quat;
+	typedef qua<f64, defaultp>			f64quat;
 }//namespace glm
 
-*/
+