32#include "../System/cl_platform.h"
41 template<
typename T,
typename ...Args>
44 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
57 template<
typename A,
typename B>
inline A
min(A
a, B
b) {
return a <
b ?
a :
b; }
58 template<
typename A,
typename B>
inline A
max(A
a, B
b) {
return a >
b ?
a :
b; }
60 template<
typename Type>
66 template<
typename Type>
72 template<
typename Type>
78 template<
typename Type>
84 template<
typename Type>
90 template<
typename Type>
96 template<
typename A,
typename B,
typename C>
97 inline C
clamp(A val, B minval, C maxval)
99 return max((A)minval,
min((A)maxval, val));
102 template<
typename A,
typename B,
typename C>
138 template<
typename Type>
144 template<
typename Type>
150 template<
typename Type>
156 template<
typename A,
typename B,
typename C>
inline C
smoothstep(A edge0, B edge1, C
x)
158 C
t =
clamp((
x - edge0) / (edge1 - edge0), C(0), C(1));
159 return t *
t * (C(3) - C(2) *
t);
164 return x < edge ? 0 : 1;
167 inline long long step(
long long edge,
long long x)
169 return x < edge ? 0 : 1;
172 inline float step(
float edge,
float x)
174 return x < edge ? 0.0f : 1.0f;
177 inline double step(
double edge,
double x)
179 return x < edge ? 0.0 : 1.0;
182 template<
typename Type>
188 template<
typename Type>
194 template<
typename Type>
2D vector
Definition: vec2.h:76
Type y
Definition: vec2.h:81
Type x
Definition: vec2.h:80
3D vector
Definition: vec3.h:75
Type z
Definition: vec3.h:81
Type y
Definition: vec3.h:80
Type x
Definition: vec3.h:79
4D vector
Definition: vec4.h:75
Type z
Definition: vec4.h:81
Type y
Definition: vec4.h:80
Type x
Definition: vec4.h:79
Type w
Definition: vec4.h:82
A mix(A a, B b, C mix)
Definition: cl_math.h:103
T pow2(T value)
Definition: cl_math.h:52
std::unique_ptr< T > make_unique(Args &&...args)
Definition: cl_math.h:42
C smoothstep(A edge0, B edge1, C x)
Definition: cl_math.h:156
int sign(int x)
Definition: cl_math.h:108
int step(int edge, int x)
Definition: cl_math.h:162