Browse Source

Updated documentation and refactoring of GTC_type_ptr code

Christophe Riccio 14 years ago
parent
commit
85a187761d
3 changed files with 489 additions and 399 deletions
  1. 3 3
      glm/gtc/noise.hpp
  2. 53 393
      glm/gtc/type_ptr.hpp
  3. 433 3
      glm/gtc/type_ptr.inl

+ 3 - 3
glm/gtc/noise.hpp

@@ -54,20 +54,20 @@ namespace glm
 	/// @{
 
 	/// Classic perlin noise.
-	/// From GLM_GTC_noise extension.
+    /// @see gtc_noise
 	template <typename T, template<typename> class vecType> 
     T perlin(
 		vecType<T> const & p);
 		
 	/// Periodic perlin noise.
-	/// From GLM_GTC_noise extension.
+	/// @see gtc_noise
 	template <typename T, template<typename> class vecType> 
     T perlin(
 		vecType<T> const & p, 
 		vecType<T> const & rep);
 
 	/// Simplex noise.
-	/// From GLM_GTC_noise extension.
+	/// @see gtc_noise
 	template <typename T, template<typename> class vecType> 
     T simplex(
 		vecType<T> const & p);

+ 53 - 393
glm/gtc/type_ptr.hpp

@@ -73,432 +73,92 @@ namespace glm
 { 
 	/// @addtogroup gtc_type_ptr
 	/// @{
-
-	/// Return the constant address to the data of the input parameter.
-	/// From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tvec2<T> const & vec
-	)
-	{
-		return &(vec.x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tvec2<T> & vec
-	)
-	{
-		return &(vec.x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tvec3<T> const & vec
-	)
-	{
-		return &(vec.x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tvec3<T> & vec
-	)
-	{
-		return &(vec.x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(	
-		detail::tvec4<T> const & vec
-	)
-	{
-		return &(vec.x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(	
-		detail::tvec4<T> & vec
-	)
-	{
-		return &(vec.x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat2x2<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat2x2<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat3x3<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat3x3<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat4x4<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat4x4<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat2x3<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat2x3<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat3x2<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat3x2<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat2x4<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat2x4<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat4x2<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(	
-		detail::tmat4x2<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat3x4<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr
-	(
-		detail::tmat3x4<T> & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-		
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-		detail::tmat4x3<T> const & mat
-	)
-	{
-		return &(mat[0].x);
-	}
-    
-	//! Return the constant address to the data of the input parameter.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T const * value_ptr
-	(
-        detail::tquat<T> const & q
-    )
-	{
-		return &(q[0]);
-	}
     
-	//! Get the address of the matrix content.
-	//! From GLM_GTC_type_ptr extension.
-	template<typename T>
-	GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
-	{
-		return &(mat[0].x);
-	}
+	/// Return the constant address to the data of the input parameter.
+    /// @see gtc_type_ptr
+	template<typename genType>
+    typename genType::value_type const * value_ptr(genType const & vec);
 
-	//! Build a vector from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a vector from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
-	{
-		detail::tvec2<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
-		return Result;
-	}
+    detail::tvec2<T> make_vec2(T const * const ptr);
 
-	//! Build a vector from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a vector from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
-	{
-		detail::tvec3<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
-		return Result;
-	}
+    detail::tvec3<T> make_vec3(T const * const ptr);
 
-	//! Build a vector from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a vector from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
-	{
-		detail::tvec4<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
-		return Result;
-	}
+    detail::tvec4<T> make_vec4(T const * const ptr);
 
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
-	{
-		detail::tmat2x2<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
-		return Result;
-	}
+    detail::tmat2x2<T> make_mat2x2(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
-	{
-		detail::tmat2x3<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
-		return Result;
-	}
+    detail::tmat2x3<T> make_mat2x3(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
-	{
-		detail::tmat2x4<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
-		return Result;
-	}
+    detail::tmat2x4<T> make_mat2x4(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
-	{
-		detail::tmat3x2<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
-		return Result;
-	}
+    detail::tmat3x2<T> make_mat3x2(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
-	{
-		detail::tmat3x3<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
-		return Result;
-	}
+    detail::tmat3x3<T> make_mat3x3(T const * const ptr);
 
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
-	{
-		detail::tmat3x4<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
-		return Result;
-	}
+    detail::tmat3x4<T> make_mat3x4(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
-	{
-		detail::tmat4x2<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
-		return Result;
-	}
+    detail::tmat4x2<T> make_mat4x2(
+        T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
-	{
-		detail::tmat4x3<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
-		return Result;
-	}
+    detail::tmat4x3<T> make_mat4x3(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
-	{
-		detail::tmat4x4<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
-		return Result;
-	}
+    detail::tmat4x4<T> make_mat4x4(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
-	{
-		return make_mat2x2(ptr);
-	}
+    detail::tmat2x2<T> make_mat2(T const * const ptr);
         
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
-	{
-		return make_mat3x3(ptr);
-	}
+    detail::tmat3x3<T> make_mat3(T const * const ptr);
 		
-	//! Build a matrix from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a matrix from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
-	{
-		return make_mat4x4(ptr);
-	}
+    detail::tmat4x4<T> make_mat4(T const * const ptr);
  
-	//! Build a quaternion from a pointer.
-	//! From GLM_GTC_type_ptr extension.
+	/// Build a quaternion from a pointer.
+	/// @see gtc_type_ptr
 	template<typename T>
-	GLM_FUNC_QUALIFIER detail::tquat<T> make_quat(T const * const ptr)
-	{
-		detail::tquat<T> Result;
-		memcpy(value_ptr(Result), ptr, sizeof(detail::tquat<T>));
-		return Result;
-	}
+    detail::tquat<T> make_quat(T const * const ptr);
     
 	/// @}
 }//namespace glm

+ 433 - 3
glm/gtc/type_ptr.inl

@@ -22,11 +22,441 @@
 ///
 /// @ref gtc_type_ptr
 /// @file glm/gtc/type_ptr.inl
-/// @date 2011-06-15 / 2011-06-15
+/// @date 2011-06-15 / 2011-12-07
 /// @author Christophe Riccio
 ///////////////////////////////////////////////////////////////////////////////////
 
 namespace glm
-{
+{ 
+	/// @addtogroup gtc_type_ptr
+	/// @{
+
+	/// Return the constant address to the data of the input parameter.
+    /// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tvec2<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tvec2<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tvec3<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tvec3<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(	
+		detail::tvec4<T> const & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(	
+		detail::tvec4<T> & vec
+	)
+	{
+		return &(vec.x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x3<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	//! From GLM_GTC_type_ptr extension.
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat4x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x3<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat2x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat2x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x2<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(	
+		detail::tmat4x2<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat3x4<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr
+	(
+		detail::tmat3x4<T> & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+		
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+		detail::tmat4x3<T> const & mat
+	)
+	{
+		return &(mat[0].x);
+	}
+    
+	//! Return the constant address to the data of the input parameter.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T const * value_ptr
+	(
+        detail::tquat<T> const & q
+    )
+	{
+		return &(q[0]);
+	}
+    
+	//! Get the address of the matrix content.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
+	{
+		return &(mat[0].x);
+	}
+
+	//! Build a vector from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
+	{
+		detail::tvec2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
+		return Result;
+	}
+
+	//! Build a vector from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
+	{
+		detail::tvec3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
+		return Result;
+	}
+
+	//! Build a vector from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
+	{
+		detail::tvec4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
+		return Result;
+	}
+
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
+	{
+		detail::tmat2x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
+	{
+		detail::tmat2x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
+	{
+		detail::tmat2x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
+	{
+		detail::tmat3x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
+	{
+		detail::tmat3x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
+		return Result;
+	}
+
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
+	{
+		detail::tmat3x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
+	{
+		detail::tmat4x2<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
+	{
+		detail::tmat4x3<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
+	{
+		detail::tmat4x4<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
+		return Result;
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
+	{
+		return make_mat2x2(ptr);
+	}
+        
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
+	{
+		return make_mat3x3(ptr);
+	}
+		
+	//! Build a matrix from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
+	{
+		return make_mat4x4(ptr);
+	}
+ 
+	//! Build a quaternion from a pointer.
+	/// @see gtc_type_ptr
+	template<typename T>
+	GLM_FUNC_QUALIFIER detail::tquat<T> make_quat(T const * const ptr)
+	{
+		detail::tquat<T> Result;
+		memcpy(value_ptr(Result), ptr, sizeof(detail::tquat<T>));
+		return Result;
+	}
+    
+	/// @}
+}//namespace glm
 
-}