compatibility.hpp
Go to the documentation of this file.
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 #ifndef GLM_GTX_compatibility
40 #define GLM_GTX_compatibility GLM_VERSION
41 
42 // Dependency:
43 #include "../glm.hpp"
44 #include "../gtc/half_float.hpp"
45 #include "../gtc/quaternion.hpp"
46 
47 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
48 # pragma message("GLM: GLM_GTX_compatibility extension included")
49 #endif
50 
51 #if(GLM_COMPILER & GLM_COMPILER_VC)
52 # include <cfloat>
53 #elif(GLM_COMPILER & GLM_COMPILER_GCC)
54 # include <cmath>
55 # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
56 # undef isfinite
57 # endif
58 #endif//GLM_COMPILER
59 
60 namespace glm
61 {
64 
65  template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}
66  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);}
67  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);}
68  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);}
69  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);}
70  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);}
71  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);}
72 
73  template <typename T> GLM_FUNC_QUALIFIER T slerp(detail::tquat<T> const & x, detail::tquat<T> const & y, T const & a){return mix(x, y, a);}
74 
75  template <typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}
76  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> saturate(const detail::tvec2<T>& x){return clamp(x, T(0), T(1));}
77  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> saturate(const detail::tvec3<T>& x){return clamp(x, T(0), T(1));}
78  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> saturate(const detail::tvec4<T>& x){return clamp(x, T(0), T(1));}
79 
80  template <typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}
81  template <typename T> GLM_FUNC_QUALIFIER detail::tvec2<T> atan2(const detail::tvec2<T>& x, const detail::tvec2<T>& y){return atan(x, y);}
82  template <typename T> GLM_FUNC_QUALIFIER detail::tvec3<T> atan2(const detail::tvec3<T>& x, const detail::tvec3<T>& y){return atan(x, y);}
83  template <typename T> GLM_FUNC_QUALIFIER detail::tvec4<T> atan2(const detail::tvec4<T>& x, const detail::tvec4<T>& y){return atan(x, y);}
84 
85  template <typename genType> bool isfinite(genType const & x);
86  template <typename valType> detail::tvec2<bool> isfinite(const detail::tvec2<valType>& x);
87  template <typename valType> detail::tvec3<bool> isfinite(const detail::tvec3<valType>& x);
88  template <typename valType> detail::tvec4<bool> isfinite(const detail::tvec4<valType>& x);
89 
90  typedef bool bool1;
91  typedef detail::tvec2<bool> bool2;
92  typedef detail::tvec3<bool> bool3;
93  typedef detail::tvec4<bool> bool4;
94 
95  typedef bool bool1x1;
96  typedef detail::tmat2x2<bool> bool2x2;
97  typedef detail::tmat2x3<bool> bool2x3;
98  typedef detail::tmat2x4<bool> bool2x4;
99  typedef detail::tmat3x2<bool> bool3x2;
100  typedef detail::tmat3x3<bool> bool3x3;
101  typedef detail::tmat3x4<bool> bool3x4;
102  typedef detail::tmat4x2<bool> bool4x2;
103  typedef detail::tmat4x3<bool> bool4x3;
104  typedef detail::tmat4x4<bool> bool4x4;
105 
106  typedef int int1;
107  typedef detail::tvec2<int> int2;
108  typedef detail::tvec3<int> int3;
109  typedef detail::tvec4<int> int4;
110 
111  typedef int int1x1;
112  typedef detail::tmat2x2<int> int2x2;
113  typedef detail::tmat2x3<int> int2x3;
114  typedef detail::tmat2x4<int> int2x4;
115  typedef detail::tmat3x2<int> int3x2;
116  typedef detail::tmat3x3<int> int3x3;
117  typedef detail::tmat3x4<int> int3x4;
118  typedef detail::tmat4x2<int> int4x2;
119  typedef detail::tmat4x3<int> int4x3;
120  typedef detail::tmat4x4<int> int4x4;
121 
122  typedef detail::half half1;
123  typedef detail::tvec2<detail::half> half2;
124  typedef detail::tvec3<detail::half> half3;
125  typedef detail::tvec4<detail::half> half4;
126 
128  typedef detail::tmat2x2<detail::half> half2x2;
129  typedef detail::tmat2x3<detail::half> half2x3;
130  typedef detail::tmat2x4<detail::half> half2x4;
131  typedef detail::tmat3x2<detail::half> half3x2;
132  typedef detail::tmat3x3<detail::half> half3x3;
133  typedef detail::tmat3x4<detail::half> half3x4;
134  typedef detail::tmat4x2<detail::half> half4x2;
135  typedef detail::tmat4x3<detail::half> half4x3;
136  typedef detail::tmat4x4<detail::half> half4x4;
137 
138  typedef float float1;
139  typedef detail::tvec2<float> float2;
140  typedef detail::tvec3<float> float3;
141  typedef detail::tvec4<float> float4;
142 
143  typedef float float1x1;
144  typedef detail::tmat2x2<float> float2x2;
145  typedef detail::tmat2x3<float> float2x3;
146  typedef detail::tmat2x4<float> float2x4;
147  typedef detail::tmat3x2<float> float3x2;
148  typedef detail::tmat3x3<float> float3x3;
149  typedef detail::tmat3x4<float> float3x4;
150  typedef detail::tmat4x2<float> float4x2;
151  typedef detail::tmat4x3<float> float4x3;
152  typedef detail::tmat4x4<float> float4x4;
153 
154  typedef double double1;
155  typedef detail::tvec2<double> double2;
156  typedef detail::tvec3<double> double3;
157  typedef detail::tvec4<double> double4;
158 
159  typedef double double1x1;
160  typedef detail::tmat2x2<double> double2x2;
161  typedef detail::tmat2x3<double> double2x3;
162  typedef detail::tmat2x4<double> double2x4;
163  typedef detail::tmat3x2<double> double3x2;
164  typedef detail::tmat3x3<double> double3x3;
165  typedef detail::tmat3x4<double> double3x4;
166  typedef detail::tmat4x2<double> double4x2;
167  typedef detail::tmat4x3<double> double4x3;
168  typedef detail::tmat4x4<double> double4x4;
169 
171 }//namespace glm
172 
173 #include "compatibility.inl"
174 
175 #endif//GLM_GTX_compatibility
176