RavEngine
Loading...
Searching...
No Matches
scalar_common.inl
1namespace glm
2{
3 template<typename T>
4 GLM_FUNC_QUALIFIER T min(T a, T b, T c)
5 {
6 return glm::min(glm::min(a, b), c);
7 }
8
9 template<typename T>
10 GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d)
11 {
12 return glm::min(glm::min(a, b), glm::min(c, d));
13 }
14
15 template<typename T>
16 GLM_FUNC_QUALIFIER T max(T a, T b, T c)
17 {
18 return glm::max(glm::max(a, b), c);
19 }
20
21 template<typename T>
22 GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d)
23 {
24 return glm::max(glm::max(a, b), glm::max(c, d));
25 }
26
27# if GLM_HAS_CXX11_STL
28 using std::fmin;
29# else
30 template<typename T>
31 GLM_FUNC_QUALIFIER T fmin(T a, T b)
32 {
33 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
34
35 if (isnan(a))
36 return b;
37 return min(a, b);
38 }
39# endif
40
41 template<typename T>
42 GLM_FUNC_QUALIFIER T fmin(T a, T b, T c)
43 {
44 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
45
46 if (isnan(a))
47 return fmin(b, c);
48 if (isnan(b))
49 return fmin(a, c);
50 if (isnan(c))
51 return min(a, b);
52 return min(a, b, c);
53 }
54
55 template<typename T>
56 GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d)
57 {
58 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
59
60 if (isnan(a))
61 return fmin(b, c, d);
62 if (isnan(b))
63 return min(a, fmin(c, d));
64 if (isnan(c))
65 return fmin(min(a, b), d);
66 if (isnan(d))
67 return min(a, b, c);
68 return min(a, b, c, d);
69 }
70
71
72# if GLM_HAS_CXX11_STL
73 using std::fmax;
74# else
75 template<typename T>
76 GLM_FUNC_QUALIFIER T fmax(T a, T b)
77 {
78 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
79
80 if (isnan(a))
81 return b;
82 return max(a, b);
83 }
84# endif
85
86 template<typename T>
87 GLM_FUNC_QUALIFIER T fmax(T a, T b, T c)
88 {
89 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
90
91 if (isnan(a))
92 return fmax(b, c);
93 if (isnan(b))
94 return fmax(a, c);
95 if (isnan(c))
96 return max(a, b);
97 return max(a, b, c);
98 }
99
100 template<typename T>
101 GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d)
102 {
103 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
104
105 if (isnan(a))
106 return fmax(b, c, d);
107 if (isnan(b))
108 return max(a, fmax(c, d));
109 if (isnan(c))
110 return fmax(max(a, b), d);
111 if (isnan(d))
112 return max(a, b, c);
113 return max(a, b, c, d);
114 }
115
116 // fclamp
117 template<typename genType>
118 GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal)
119 {
120 GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fclamp' only accept floating-point or integer inputs");
121 return fmin(fmax(x, minVal), maxVal);
122 }
123
124 template<typename genType>
125 GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord)
126 {
127 return glm::clamp(Texcoord, static_cast<genType>(0), static_cast<genType>(1));
128 }
129
130 template<typename genType>
131 GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord)
132 {
133 return glm::fract(Texcoord);
134 }
135
136 template<typename genType>
137 GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord)
138 {
139 return glm::fract(glm::abs(Texcoord));
140 }
141
142 template<typename genType>
143 GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord)
144 {
145 genType const Abs = glm::abs(Texcoord);
146 genType const Clamp = glm::mod(glm::floor(Abs), static_cast<genType>(2));
147 genType const Floor = glm::floor(Abs);
148 genType const Rest = Abs - Floor;
149 genType const Mirror = Clamp + Rest;
150 return mix(Rest, static_cast<genType>(1) - Rest, Mirror >= static_cast<genType>(1));
151 }
152}//namespace glm
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x)
GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y)
Definition func_common.inl:17
GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)
Definition func_common.inl:505
GLM_FUNC_DECL vec< L, bool, Q > isnan(vec< L, T, Q > const &x)
Definition func_common.inl:613
GLM_FUNC_DECL genType fract(genType x)
Definition func_common.inl:388
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
Definition func_common.inl:526
GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > const &x)
Definition func_common.inl:307
GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y)
Definition func_common.inl:25
GLM_FUNC_DECL genType mirrorRepeat(genType const &Texcoord)
Definition scalar_common.inl:143
GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal)
Definition scalar_common.inl:118
GLM_FUNC_DECL T fmax(T a, T b)
Definition scalar_common.inl:76
GLM_FUNC_DECL T fmin(T a, T b)
Definition scalar_common.inl:31
GLM_FUNC_DECL genType repeat(genType const &Texcoord)
Definition scalar_common.inl:131
GLM_FUNC_DECL genType mirrorClamp(genType const &Texcoord)
Definition scalar_common.inl:137
Core features
Definition common.hpp:21