#ifndef MATRIX_HPP
#define MATRIX_HPP

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <Extern/GLMConfig.hpp>


namespace Math
{
	using namespace glm;

	// Generic matrix output
	template<class T, int nColumns, int nLines>
	std::string MatrixToString(const T& _value);

	// Float matrix output
	inline std::string ToString(const mat2& _value);
	inline std::string ToString(const mat3& _value);
	inline std::string ToString(const mat4& _value);

	// Compute viewport transformation : from normalized projective space to 
	// raster space
	//
	// Requierments :
	//  - (x,y) < (width,Height)
	//  - near < far
	inline mat4 viewport(float _x, float _y,float _width, float _height, float _near, float _far);
}

//-----------------------------------------------------------------------------
// Include inline definitions
//-----------------------------------------------------------------------------
#include <Math/Matrix.inl>

#endif /*MATRIX_HPP*/
