/// Include <glm/gtx/compatibility.hpp> to use the features of this extension.
///
/// Provide functions to increase the compatibility with Cg and HLSL languages
#pragma once
// Dependency:
#include"../glm.hpp"
#include"../gtc/quaternion.hpp"
#ifndef GLM_ENABLE_EXPERIMENTAL
# error "GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
template<typenameT>GLM_FUNC_QUALIFIERTlerp(Tx,Ty,Ta){returnmix(x,y,a);}//!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<2,T,Q>lerp(constvec<2,T,Q>&x,constvec<2,T,Q>&y,Ta){returnmix(x,y,a);}//!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<3,T,Q>lerp(constvec<3,T,Q>&x,constvec<3,T,Q>&y,Ta){returnmix(x,y,a);}//!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<4,T,Q>lerp(constvec<4,T,Q>&x,constvec<4,T,Q>&y,Ta){returnmix(x,y,a);}//!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<2,T,Q>lerp(constvec<2,T,Q>&x,constvec<2,T,Q>&y,constvec<2,T,Q>&a){returnmix(x,y,a);}//!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<3,T,Q>lerp(constvec<3,T,Q>&x,constvec<3,T,Q>&y,constvec<3,T,Q>&a){returnmix(x,y,a);}//!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<4,T,Q>lerp(constvec<4,T,Q>&x,constvec<4,T,Q>&y,constvec<4,T,Q>&a){returnmix(x,y,a);}//!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERTsaturate(Tx){returnclamp(x,T(0),T(1));}//!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<2,T,Q>saturate(constvec<2,T,Q>&x){returnclamp(x,T(0),T(1));}//!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<3,T,Q>saturate(constvec<3,T,Q>&x){returnclamp(x,T(0),T(1));}//!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<4,T,Q>saturate(constvec<4,T,Q>&x){returnclamp(x,T(0),T(1));}//!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERTatan2(Tx,Ty){returnatan(x,y);}//!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<2,T,Q>atan2(constvec<2,T,Q>&x,constvec<2,T,Q>&y){returnatan(x,y);}//!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<3,T,Q>atan2(constvec<3,T,Q>&x,constvec<3,T,Q>&y){returnatan(x,y);}//!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_QUALIFIERvec<4,T,Q>atan2(constvec<4,T,Q>&x,constvec<4,T,Q>&y){returnatan(x,y);}//!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
template<typenamegenType>GLM_FUNC_DECLboolisfinite(genTypeconst&x);//!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_DECLvec<1,bool,Q>isfinite(constvec<1,T,Q>&x);//!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_DECLvec<2,bool,Q>isfinite(constvec<2,T,Q>&x);//!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_DECLvec<3,bool,Q>isfinite(constvec<3,T,Q>&x);//!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
template<typenameT,qualifierQ>GLM_FUNC_DECLvec<4,bool,Q>isfinite(constvec<4,T,Q>&x);//!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
typedefboolbool1;//!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension)
typedefvec<2,bool,highp>bool2;//!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension)
typedefvec<3,bool,highp>bool3;//!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension)
typedefvec<4,bool,highp>bool4;//!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension)
typedefboolbool1x1;//!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
typedefmat<2,2,bool,highp>bool2x2;//!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<2,3,bool,highp>bool2x3;//!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<2,4,bool,highp>bool2x4;//!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
typedefmat<3,2,bool,highp>bool3x2;//!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<3,3,bool,highp>bool3x3;//!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<3,4,bool,highp>bool3x4;//!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
typedefmat<4,2,bool,highp>bool4x2;//!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<4,3,bool,highp>bool4x3;//!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<4,4,bool,highp>bool4x4;//!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
typedefintint1;//!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension)
typedefvec<2,int,highp>int2;//!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension)
typedefvec<3,int,highp>int3;//!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension)
typedefvec<4,int,highp>int4;//!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension)
typedefintint1x1;//!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension)
typedefmat<2,2,int,highp>int2x2;//!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<2,3,int,highp>int2x3;//!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<2,4,int,highp>int2x4;//!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
typedefmat<3,2,int,highp>int3x2;//!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<3,3,int,highp>int3x3;//!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<3,4,int,highp>int3x4;//!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
typedefmat<4,2,int,highp>int4x2;//!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
typedefmat<4,3,int,highp>int4x3;//!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
typedefmat<4,4,int,highp>int4x4;//!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)