///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2008 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2005-12-21
// Updated : 2006-11-13
// Licence : This source is under MIT License
// File    : glm/gtx/projection.h
///////////////////////////////////////////////////////////////////////////////////////////////////
// Dependency:
// - GLM core
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef glm_gtx_projection
#define glm_gtx_projection

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

namespace glm
{
    template <typename T> detail::tvec2<T> projGTX(const detail::tvec2<T>& x, const detail::tvec2<T>& Normal);
    template <typename T> detail::tvec3<T> projGTX(const detail::tvec3<T>& x, const detail::tvec3<T>& Normal);
    template <typename T> detail::tvec4<T> projGTX(const detail::tvec4<T>& x, const detail::tvec4<T>& Normal);

    namespace gtx
    {
		//! GLM_GTX_projection extension: Projection of a vector to other one
        namespace projection
        {
            template <typename T> inline detail::tvec2<T> proj(const detail::tvec2<T>& x, const detail::tvec2<T>& Normal){return projGTX(x, Normal);} //!< \brief Projects x on Normal (from GLM_GTX_projection extension)
            template <typename T> inline detail::tvec3<T> proj(const detail::tvec3<T>& x, const detail::tvec3<T>& Normal){return projGTX(x, Normal);} //!< \brief Projects x on Normal (from GLM_GTX_projection extension)
            template <typename T> inline detail::tvec4<T> proj(const detail::tvec4<T>& x, const detail::tvec4<T>& Normal){return projGTX(x, Normal);} //!< \brief Projects x on Normal (from GLM_GTX_projection extension)
        }
    }
}

#define GLM_GTX_projection namespace gtx::projection

#include "projection.inl"

#endif//glm_gtx_projection
