///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2008 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2005-12-21
// Updated : 2008-10-05
// Licence : This source is under MIT License
// File    : glm/gtx/double_float.h
///////////////////////////////////////////////////////////////////////////////////////////////////
// Dependency:
// - GLM core
// - GLM_GTX_quaternion
///////////////////////////////////////////////////////////////////////////////////////////////////
// Note:
// - This implementation doesn't need to redefine all build-in functions to
// support double based type.
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef glm_gtx_double_float
#define glm_gtx_double_float

// Dependency:
#include "../../glm.h"
#include "../gtx/quaternion.h"

namespace glm
{
	namespace test{
		void main_ext_gtx_double_float();
	}//namespace test

	namespace gtx{
	//! GLM_GTX_double_float extension: Add support for double precision flotting-point types
	namespace double_float
	{
		//! Vector of 2 single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tvec2<float>	fvec2;

		//! Vector of 3 single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tvec3<float>	fvec3;
		
		//! Vector of 4 single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tvec4<float>	fvec4;

		//! 2 * 2 matrix of single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tmat2x2<float>	fmat2;

		//! 3 * 3 matrix of single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tmat3x3<float>	fmat3;

		//! 4 * 4 matrix of single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tmat4x4<float>	fmat4;

		//! Quaternion of single-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tquat<float>	fquat;

		//! Vector of 2 double-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tvec2<double>	dvec2;

		//! Vector of 3 double-precision floating-point numbers.
		//! From GLM_GTX_double extension.
		typedef detail::tvec3<double>	dvec3;

		//! Vector of 4 double-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tvec4<double>	dvec4;

		//! 2 * 2 matrix of double-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tmat2x2<double>	dmat2;

		//! 3 * 3 matrix of double-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tmat3x3<double>	dmat3;

		//! 4 * 4 matrix of double-precision floating-point numbers.
		//! From GLM_GTX_double extension.
		typedef detail::tmat4x4<double>	dmat4;

		//! Quaternion of double-precision floating-point numbers. 
		//! From GLM_GTX_double extension.
		typedef detail::tquat<double>	dquat;

	}//namespace double_float
	}//namespace gtx
}//namespace glm

#define GLM_GTX_double_float namespace gtx::double_float

#include "double_float.inl"

#endif//glm_gtx_double_float
