33 #include "../System/cl_platform.h"
42 template<
typename T,
typename ...Args>
45 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
58 template<
typename A,
typename B>
inline A
min(A a, B b) {
return a <
b ?
a :
b; }
59 template<
typename A,
typename B>
inline A
max(A a, B b) {
return a >
b ?
a :
b; }
61 template<
typename Type>
67 template<
typename Type>
73 template<
typename Type>
79 template<
typename Type>
85 template<
typename Type>
91 template<
typename Type>
97 template<
typename A,
typename B,
typename C>
98 inline C
clamp(A val, B minval, C maxval)
100 return max((A)minval,
min((A)maxval, val));
103 template<
typename A,
typename B,
typename C>
139 template<
typename Type>
145 template<
typename Type>
151 template<
typename Type>
157 template<
typename A,
typename B,
typename C>
inline C
smoothstep(A edge0, B edge1, C x)
159 C
t =
clamp((
x - edge0) / (edge1 - edge0), C(0), C(1));
160 return t *
t * (C(3) - C(2) *
t);
163 inline int step(
int edge,
int x)
165 return x < edge ? 0 : 1;
168 inline long long step(
long long edge,
long long x)
170 return x < edge ? 0 : 1;
173 inline float step(
float edge,
float x)
175 return x < edge ? 0.0f : 1.0f;
178 inline double step(
double edge,
double x)
180 return x < edge ? 0.0 : 1.0;
183 template<
typename Type>
189 template<
typename Type>
195 template<
typename Type>
Type x
Definition: vec4.h:80
C clamp(A val, B minval, C maxval)
Definition: cl_math.h:98
T pow2(T value)
Definition: cl_math.h:53
Type y
Definition: vec2.h:81
int sign(int x)
Definition: cl_math.h:109
Type x
Definition: vec2.h:80
Type z
Definition: vec4.h:82
std::unique_ptr< T > make_unique(Args &&...args)
Definition: cl_math.h:43
2D vector
Definition: line.h:48
Type w
Definition: vec4.h:83
A mix(A a, B b, C mix)
Definition: cl_math.h:104
4D vector
Definition: size.h:47
int step(int edge, int x)
Definition: cl_math.h:163
Type y
Definition: vec4.h:81
A max(A a, B b)
Definition: cl_math.h:59
C smoothstep(A edge0, B edge1, C x)
Definition: cl_math.h:157
3D vector
Definition: line_ray.h:48
Type x
Definition: vec3.h:80
Type z
Definition: vec3.h:82
A min(A a, B b)
Definition: cl_math.h:58
Type y
Definition: vec3.h:81