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