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