GLM Version 0.9.0
|
00001 00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) 00004 // Created : 2007-01-24 00005 // Updated : 2008-10-24 00006 // Licence : This source is under MIT License 00007 // File : glm/gtx/compatibility.hpp 00009 // Dependency: 00010 // - GLM core 00011 // - GLM_GTC_half_float 00012 // - GLM_GTC_double_float 00014 00015 #ifndef glm_gtx_compatibility 00016 #define glm_gtx_compatibility 00017 00018 // Dependency: 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 }//namespace test 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 }//namespace compatibility 00154 }//namespace gtx 00155 }//namespace glm 00156 00157 #include "compatibility.inl" 00158 00159 namespace glm{using namespace gtx::compatibility;} 00160 00161 #endif//glm_gtx_compatibility 00162 00163 00164 00165 00166 00167 00168 00169 00170 00171