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

#ifndef __glm_gtx_perpendicular__
#define __glm_gtx_perpendicular__

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

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

    namespace gtx
    {
		//! GLM_GTX_perpendicular extension: Perpendicular of a vector from other one
        namespace perpendicular
        {
            template <typename T> inline detail::tvec2<T> perp(const detail::tvec2<T>& x, const detail::tvec2<T>& Normal){return perpGTX(x, Normal);} //!< \brief Projects x a perpendicular axis of Normal (from GLM_GTX_perpendicular extension)
            template <typename T> inline detail::tvec3<T> perp(const detail::tvec3<T>& x, const detail::tvec3<T>& Normal){return perpGTX(x, Normal);} //!< \brief Projects x a perpendicular axis of Normal (from GLM_GTX_perpendicular extension)
            template <typename T> inline detail::tvec4<T> perp(const detail::tvec4<T>& x, const detail::tvec4<T>& Normal){return perpGTX(x, Normal);} //!< \brief Projects x a perpendicular axis of Normal (from GLM_GTX_perpendicular extension)
        }
    }
}

#define GLM_GTX_perpendicular namespace gtx::perpendicular

#include "perpendicular.inl"

#endif//__glm_gtx_perpendicular__
