compatibility.hpp
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
00013 
00014 #ifndef glm_gtx_compatibility
00015 #define glm_gtx_compatibility
00016 
00017 // Dependency:
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 }//namespace compatibility
00153 }//namespace gtx
00154 }//namespace glm
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