00001
00002
00004
00005
00006
00007
00009
00010
00011
00013
00014 #ifndef glm_gtx_compatibility
00015 #define glm_gtx_compatibility
00016
00017
00018 #include "../glm.hpp"
00019 #include "../gtc/half_float.hpp"
00020
00021 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00022 # pragma message("GLM: GLM_GTX_compatibility extension included")
00023 #endif
00024
00025 #if(GLM_COMPILER & GLM_COMPILER_VC)
00026 #include <cfloat>
00027 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
00028 #include <cmath>
00029 #endif//GLM_COMPILER
00030
00031 namespace glm{
00032 namespace gtx{
00033 namespace compatibility
00034 {
00037
00038 template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
00039 template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, T a){return mix(x, y, a);}
00040 template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, T a){return mix(x, y, a);}
00041 template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, T a){return mix(x, y, a);}
00042 template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> lerp(const detail::tvec2<T>& x, const detail::tvec2<T>& y, const detail::tvec2<T>& a){return mix(x, y, a);}
00043 template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> lerp(const detail::tvec3<T>& x, const detail::tvec3<T>& y, const detail::tvec3<T>& a){return mix(x, y, a);}
00044 template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> lerp(const detail::tvec4<T>& x, const detail::tvec4<T>& y, const detail::tvec4<T>& a){return mix(x, y, a);}
00045
00046 template <typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
00047 template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> saturate(const detail::tvec2<T>& x){return clamp(x, T(0), T(1));}
00048 template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> saturate(const detail::tvec3<T>& x){return clamp(x, T(0), T(1));}
00049 template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> saturate(const detail::tvec4<T>& x){return clamp(x, T(0), T(1));}
00050
00051 template <typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
00052 template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> atan2(const detail::tvec2<T>& x, const detail::tvec2<T>& y){return atan(x, y);}
00053 template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> atan2(const detail::tvec3<T>& x, const detail::tvec3<T>& y){return atan(x, y);}
00054 template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> atan2(const detail::tvec4<T>& x, const detail::tvec4<T>& y){return atan(x, y);}
00055
00056 template <typename genType> bool isfinite(genType const & x);
00057 template <typename valType> detail::tvec2<bool> isfinite(const detail::tvec2<valType>& x);
00058 template <typename valType> detail::tvec3<bool> isfinite(const detail::tvec3<valType>& x);
00059 template <typename valType> detail::tvec4<bool> isfinite(const detail::tvec4<valType>& x);
00060
00061 template <typename genType> bool isinf(genType const & x);
00062 template <typename genType> detail::tvec2<bool> isinf(const detail::tvec2<genType>& x);
00063 template <typename genType> detail::tvec3<bool> isinf(const detail::tvec3<genType>& x);
00064 template <typename genType> detail::tvec4<bool> isinf(const detail::tvec4<genType>& x);
00065
00066 template <typename genType> bool isnan(genType const & x);
00067 template <typename genType> detail::tvec2<bool> isnan(const detail::tvec2<genType>& x);
00068 template <typename genType> detail::tvec3<bool> isnan(const detail::tvec3<genType>& x);
00069 template <typename genType> detail::tvec4<bool> isnan(const detail::tvec4<genType>& x);
00070
00071 typedef bool bool1;
00072 typedef detail::tvec2<bool> bool2;
00073 typedef detail::tvec3<bool> bool3;
00074 typedef detail::tvec4<bool> bool4;
00075
00076 typedef bool bool1x1;
00077 typedef detail::tmat2x2<bool> bool2x2;
00078 typedef detail::tmat2x3<bool> bool2x3;
00079 typedef detail::tmat2x4<bool> bool2x4;
00080 typedef detail::tmat3x2<bool> bool3x2;
00081 typedef detail::tmat3x3<bool> bool3x3;
00082 typedef detail::tmat3x4<bool> bool3x4;
00083 typedef detail::tmat4x2<bool> bool4x2;
00084 typedef detail::tmat4x3<bool> bool4x3;
00085 typedef detail::tmat4x4<bool> bool4x4;
00086
00087 typedef int int1;
00088 typedef detail::tvec2<int> int2;
00089 typedef detail::tvec3<int> int3;
00090 typedef detail::tvec4<int> int4;
00091
00092 typedef int int1x1;
00093 typedef detail::tmat2x2<int> int2x2;
00094 typedef detail::tmat2x3<int> int2x3;
00095 typedef detail::tmat2x4<int> int2x4;
00096 typedef detail::tmat3x2<int> int3x2;
00097 typedef detail::tmat3x3<int> int3x3;
00098 typedef detail::tmat3x4<int> int3x4;
00099 typedef detail::tmat4x2<int> int4x2;
00100 typedef detail::tmat4x3<int> int4x3;
00101 typedef detail::tmat4x4<int> int4x4;
00102
00103 typedef gtc::half_float::half half1;
00104 typedef detail::tvec2<gtc::half_float::half> half2;
00105 typedef detail::tvec3<gtc::half_float::half> half3;
00106 typedef detail::tvec4<gtc::half_float::half> half4;
00107
00108 typedef gtc::half_float::half half1x1;
00109 typedef detail::tmat2x2<gtc::half_float::half> half2x2;
00110 typedef detail::tmat2x3<gtc::half_float::half> half2x3;
00111 typedef detail::tmat2x4<gtc::half_float::half> half2x4;
00112 typedef detail::tmat3x2<gtc::half_float::half> half3x2;
00113 typedef detail::tmat3x3<gtc::half_float::half> half3x3;
00114 typedef detail::tmat3x4<gtc::half_float::half> half3x4;
00115 typedef detail::tmat4x2<gtc::half_float::half> half4x2;
00116 typedef detail::tmat4x3<gtc::half_float::half> half4x3;
00117 typedef detail::tmat4x4<gtc::half_float::half> half4x4;
00118
00119 typedef float float1;
00120 typedef detail::tvec2<float> float2;
00121 typedef detail::tvec3<float> float3;
00122 typedef detail::tvec4<float> float4;
00123
00124 typedef float float1x1;
00125 typedef detail::tmat2x2<float> float2x2;
00126 typedef detail::tmat2x3<float> float2x3;
00127 typedef detail::tmat2x4<float> float2x4;
00128 typedef detail::tmat3x2<float> float3x2;
00129 typedef detail::tmat3x3<float> float3x3;
00130 typedef detail::tmat3x4<float> float3x4;
00131 typedef detail::tmat4x2<float> float4x2;
00132 typedef detail::tmat4x3<float> float4x3;
00133 typedef detail::tmat4x4<float> float4x4;
00134
00135 typedef double double1;
00136 typedef detail::tvec2<double> double2;
00137 typedef detail::tvec3<double> double3;
00138 typedef detail::tvec4<double> double4;
00139
00140 typedef double double1x1;
00141 typedef detail::tmat2x2<double> double2x2;
00142 typedef detail::tmat2x3<double> double2x3;
00143 typedef detail::tmat2x4<double> double2x4;
00144 typedef detail::tmat3x2<double> double3x2;
00145 typedef detail::tmat3x3<double> double3x3;
00146 typedef detail::tmat3x4<double> double3x4;
00147 typedef detail::tmat4x2<double> double4x2;
00148 typedef detail::tmat4x3<double> double4x3;
00149 typedef detail::tmat4x4<double> double4x4;
00150
00152 }
00153 }
00154 }
00155
00156 #include "compatibility.inl"
00157
00158 namespace glm{using namespace gtx::compatibility;}
00159
00160 #endif//glm_gtx_compatibility
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170