GLM Version 0.9.0

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
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