33 #include <cuda_runtime.h>
67 return 1.0f / sqrtf(x);
140 return make_float3(
float(a.x),
float(a.y),
float(a.z));
144 return make_float3(
float(a.x),
float(a.y),
float(a.z));
161 return make_int3(
int(a.x),
int(a.y),
int(a.z));
165 return make_int3(
int(a.x),
int(a.y),
int(a.z));
203 return make_float4(
float(a.x),
float(a.y),
float(a.z),
float(a.w));
207 return make_float4(
float(a.x),
float(a.y),
float(a.z),
float(a.w));
224 return make_int4(
int(a.x),
int(a.y),
int(a.z),
int(a.w));
228 return make_int4(
int(a.x),
int(a.y),
int(a.z),
int(a.w));
274 return make_int4(-a.x, -a.y, -a.z, -a.w);
352 return make_float3(a.x + b.x, a.y + b.y, a.z + b.z);
373 return make_int3(a.x + b.x, a.y + b.y, a.z + b.z);
383 return make_int3(a.x + b, a.y + b, a.z + b);
394 return make_uint3(a.x + b.x, a.y + b.y, a.z + b.z);
415 return make_int3(a.x + b, a.y + b, a.z + b);
428 return make_float4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
439 return make_float4(a.x + b, a.y + b, a.z + b, a.w + b);
443 return make_float4(a.x + b, a.y + b, a.z + b, a.w + b);
455 return make_int4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
466 return make_int4(a.x + b, a.y + b, a.z + b, a.w + b);
470 return make_int4(a.x + b, a.y + b, a.z + b, a.w + b);
482 return make_uint4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
493 return make_uint4(a.x + b, a.y + b, a.z + b, a.w + b);
497 return make_uint4(a.x + b, a.y + b, a.z + b, a.w + b);
582 return make_float3(a.x - b.x, a.y - b.y, a.z - b.z);
607 return make_int3(a.x - b.x, a.y - b.y, a.z - b.z);
617 return make_int3(a.x - b, a.y - b, a.z - b);
621 return make_int3(b - a.x, b - a.y, b - a.z);
632 return make_uint3(a.x - b.x, a.y - b.y, a.z - b.z);
657 return make_float4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
668 return make_float4(a.x - b, a.y - b, a.z - b, a.w - b);
680 return make_int4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
691 return make_int4(a.x - b, a.y - b, a.z - b, a.w - b);
695 return make_int4(b - a.x, b - a.y, b - a.z, b - a.w);
707 return make_uint4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
718 return make_uint4(a.x - b, a.y - b, a.z - b, a.w - b);
722 return make_uint4(b - a.x, b - a.y, b - a.z, b - a.w);
807 return make_float3(a.x * b.x, a.y * b.y, a.z * b.z);
832 return make_int3(a.x * b.x, a.y * b.y, a.z * b.z);
842 return make_int3(a.x * b, a.y * b, a.z * b);
846 return make_int3(b * a.x, b * a.y, b * a.z);
857 return make_uint3(a.x * b.x, a.y * b.y, a.z * b.z);
882 return make_float4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
893 return make_float4(a.x * b, a.y * b, a.z * b, a.w * b);
897 return make_float4(b * a.x, b * a.y, b * a.z, b * a.w);
909 return make_int4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
920 return make_int4(a.x * b, a.y * b, a.z * b, a.w * b);
924 return make_int4(b * a.x, b * a.y, b * a.z, b * a.w);
936 return make_uint4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
947 return make_uint4(a.x * b, a.y * b, a.z * b, a.w * b);
951 return make_uint4(b * a.x, b * a.y, b * a.z, b * a.w);
990 return make_float3(a.x / b.x, a.y / b.y, a.z / b.z);
1015 return make_float4(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w);
1026 return make_float4(a.x / b, a.y / b, a.z / b, a.w / b);
1037 return make_float4(b / a.x, b / a.y, b / a.z, b / a.w);
1044 inline __host__ __device__ float2
fminf(float2
a, float2
b)
1048 inline __host__ __device__ float3
fminf(float3
a, float3
b)
1052 inline __host__ __device__ float4
fminf(float4
a, float4
b)
1057 inline __host__ __device__ int2
min(int2
a, int2
b)
1061 inline __host__ __device__ int3
min(int3
a, int3
b)
1065 inline __host__ __device__ int4
min(int4
a, int4
b)
1070 inline __host__ __device__ uint2
min(uint2
a, uint2
b)
1074 inline __host__ __device__ uint3
min(uint3
a, uint3
b)
1078 inline __host__ __device__ uint4
min(uint4
a, uint4
b)
1087 inline __host__ __device__ float2
fmaxf(float2
a, float2
b)
1091 inline __host__ __device__ float3
fmaxf(float3
a, float3
b)
1095 inline __host__ __device__ float4
fmaxf(float4
a, float4
b)
1100 inline __host__ __device__ int2
max(int2
a, int2
b)
1104 inline __host__ __device__ int3
max(int3
a, int3
b)
1108 inline __host__ __device__ int4
max(int4
a, int4
b)
1113 inline __host__ __device__ uint2
max(uint2
a, uint2
b)
1117 inline __host__ __device__ uint3
max(uint3
a, uint3
b)
1121 inline __host__ __device__ uint4
max(uint4
a, uint4
b)
1131 inline __device__ __host__
float lerp(
float a,
float b,
float t)
1133 return a + t * (b -
a);
1135 inline __device__ __host__ float2
lerp(float2
a, float2
b,
float t)
1137 return a + t * (b -
a);
1139 inline __device__ __host__ float3
lerp(float3
a, float3
b,
float t)
1141 return a + t * (b -
a);
1143 inline __device__ __host__ float4
lerp(float4
a, float4
b,
float t)
1145 return a + t * (b -
a);
1153 inline __device__ __host__
float clamp(
float f,
float a,
float b)
1157 inline __device__ __host__
int clamp(
int f,
int a,
int b)
1159 return max(a,
min(f, b));
1163 return max(a,
min(f, b));
1166 inline __device__ __host__ float2
clamp(float2
v,
float a,
float b)
1170 inline __device__ __host__ float2
clamp(float2
v, float2
a, float2
b)
1174 inline __device__ __host__ float3
clamp(float3
v,
float a,
float b)
1178 inline __device__ __host__ float3
clamp(float3
v, float3
a, float3
b)
1182 inline __device__ __host__ float4
clamp(float4
v,
float a,
float b)
1184 return make_float4(
clamp(v.x, a, b),
clamp(v.y, a, b),
clamp(v.z, a, b),
clamp(v.w, a, b));
1186 inline __device__ __host__ float4
clamp(float4
v, float4
a, float4
b)
1188 return make_float4(
clamp(v.x, a.x, b.x),
clamp(v.y, a.y, b.y),
clamp(v.z, a.z, b.z),
clamp(v.w, a.w, b.w));
1191 inline __device__ __host__ int2
clamp(int2
v,
int a,
int b)
1195 inline __device__ __host__ int2
clamp(int2
v, int2
a, int2
b)
1199 inline __device__ __host__ int3
clamp(int3
v,
int a,
int b)
1203 inline __device__ __host__ int3
clamp(int3
v, int3
a, int3
b)
1207 inline __device__ __host__ int4
clamp(int4
v,
int a,
int b)
1209 return make_int4(
clamp(v.x, a, b),
clamp(v.y, a, b),
clamp(v.z, a, b),
clamp(v.w, a, b));
1211 inline __device__ __host__ int4
clamp(int4
v, int4
a, int4
b)
1213 return make_int4(
clamp(v.x, a.x, b.x),
clamp(v.y, a.y, b.y),
clamp(v.z, a.z, b.z),
clamp(v.w, a.w, b.w));
1220 inline __device__ __host__ uint2
clamp(uint2
v, uint2
a, uint2
b)
1228 inline __device__ __host__ uint3
clamp(uint3
v, uint3
a, uint3
b)
1234 return make_uint4(
clamp(v.x, a, b),
clamp(v.y, a, b),
clamp(v.z, a, b),
clamp(v.w, a, b));
1236 inline __device__ __host__ uint4
clamp(uint4
v, uint4
a, uint4
b)
1238 return make_uint4(
clamp(v.x, a.x, b.x),
clamp(v.y, a.y, b.y),
clamp(v.z, a.z, b.z),
clamp(v.w, a.w, b.w));
1245 inline __host__ __device__
float dot(float2
a, float2
b)
1247 return a.x * b.x + a.y * b.y;
1249 inline __host__ __device__
float dot(float3
a, float3
b)
1251 return a.x * b.x + a.y * b.y + a.z * b.z;
1253 inline __host__ __device__
float dot(float4
a, float4
b)
1255 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
1258 inline __host__ __device__
int dot(int2
a, int2
b)
1260 return a.x * b.x + a.y * b.y;
1262 inline __host__ __device__
int dot(int3
a, int3
b)
1264 return a.x * b.x + a.y * b.y + a.z * b.z;
1266 inline __host__ __device__
int dot(int4
a, int4
b)
1268 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
1273 return a.x * b.x + a.y * b.y;
1277 return a.x * b.x + a.y * b.y + a.z * b.z;
1281 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
1290 return sqrtf(
dot(v, v));
1294 return sqrtf(
dot(v, v));
1298 return sqrtf(
dot(v, v));
1325 inline __host__ __device__ float2
floorf(float2
v)
1329 inline __host__ __device__ float3
floorf(float3
v)
1333 inline __host__ __device__ float4
floorf(float4
v)
1342 inline __host__ __device__
float fracf(
float v)
1346 inline __host__ __device__ float2
fracf(float2
v)
1350 inline __host__ __device__ float3
fracf(float3
v)
1354 inline __host__ __device__ float4
fracf(float4
v)
1363 inline __host__ __device__ float2
fmodf(float2
a, float2
b)
1367 inline __host__ __device__ float3
fmodf(float3
a, float3
b)
1371 inline __host__ __device__ float4
fmodf(float4
a, float4
b)
1380 inline __host__ __device__ float2
fabs(float2
v)
1384 inline __host__ __device__ float3
fabs(float3
v)
1388 inline __host__ __device__ float4
fabs(float4
v)
1393 inline __host__ __device__ int2
abs(int2
v)
1397 inline __host__ __device__ int3
abs(int3
v)
1401 inline __host__ __device__ int4
abs(int4
v)
1412 inline __host__ __device__ float3
reflect(float3 i, float3
n)
1414 return i - 2.0f * n *
dot(n, i);
1421 inline __host__ __device__ float3
cross(float3
a, float3
b)
1423 return make_float3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
1435 float y =
clamp((x - a) / (b - a), 0.0
f, 1.0
f);
1436 return (y * y * (3.0
f - (2.0
f * y)));
1440 float2
y =
clamp((x - a) / (b - a), 0.0
f, 1.0
f);
1445 float3
y =
clamp((x - a) / (b - a), 0.0
f, 1.0
f);
1450 float4
y =
clamp((x - a) / (b - a), 0.0
f, 1.0
f);
GLubyte GLubyte GLubyte GLubyte w
Definition: khronos-glext.h:6793
__host__ __device__ float3 reflect(float3 i, float3 n)
Definition: cutil_math.h:1412
GLenum clamp
Definition: khronos-glext.h:6907
__host__ __device__ void operator-=(float2 &a, float2 b)
Definition: cutil_math.h:515
__host__ __device__ float2 operator-(float2 &a)
Definition: cutil_math.h:252
GLboolean GLboolean GLboolean GLboolean a
Definition: khronos-glext.h:6895
GLenum GLuint GLenum GLsizei length
Definition: khronos-glext.h:6279
__host__ __device__ float2 floorf(float2 v)
Definition: cutil_math.h:1325
__host__ __device__ int2 make_int2(int s)
Definition: cutil_math.h:92
__host__ __device__ float3 make_float3(float s)
Definition: cutil_math.h:122
GLfloat f
Definition: khronos-glext.h:8258
__host__ __device__ void operator+=(float2 &a, float2 b)
Definition: cutil_math.h:285
int max(int a, int b)
Definition: cutil_math.h:55
__host__ __device__ float dot(float2 a, float2 b)
Definition: cutil_math.h:1245
__host__ __device__ void operator/=(float2 &a, float2 b)
Definition: cutil_math.h:969
__host__ __device__ float2 normalize(float2 v)
Definition: cutil_math.h:1305
__host__ __device__ float2 make_float2(float s)
Definition: cutil_math.h:75
__host__ __device__ float2 operator+(float2 a, float2 b)
Definition: cutil_math.h:281
GLdouble GLdouble t
Definition: khronos-glext.h:6449
unsigned int uint
Definition: cutil_math.h:35
__host__ __device__ uint2 make_uint2(uint s)
Definition: cutil_math.h:109
__host__ __device__ int2 abs(int2 v)
Definition: cutil_math.h:1393
__host__ __device__ void operator*=(float2 &a, float2 b)
Definition: cutil_math.h:740
float fminf(float a, float b)
Definition: cutil_math.h:45
__host__ __device__ int3 make_int3(int s)
Definition: cutil_math.h:147
GLint GLint GLint GLint GLint GLint y
Definition: khronos-glext.h:6346
__host__ __device__ int4 make_int4(int s)
Definition: cutil_math.h:210
__host__ __device__ uint3 make_uint3(uint s)
Definition: cutil_math.h:168
GLdouble s
Definition: khronos-glext.h:6441
__device__ __host__ float lerp(float a, float b, float t)
Definition: cutil_math.h:1131
float rsqrtf(float x)
Definition: cutil_math.h:65
int min(int a, int b)
Definition: cutil_math.h:60
__host__ __device__ uint4 make_uint4(uint s)
Definition: cutil_math.h:231
__host__ __device__ float fracf(float v)
Definition: cutil_math.h:1342
__device__ __host__ float smoothstep(float a, float b, float x)
Definition: cutil_math.h:1433
unsigned short ushort
Definition: cutil_math.h:36
GLdouble n
Definition: khronos-glext.h:8447
__host__ __device__ float2 fabs(float2 v)
Definition: cutil_math.h:1380
GLboolean GLboolean GLboolean b
Definition: khronos-glext.h:6895
__host__ __device__ float2 operator/(float2 a, float2 b)
Definition: cutil_math.h:965
__host__ __device__ float2 fmodf(float2 a, float2 b)
Definition: cutil_math.h:1363
__host__ __device__ float4 make_float4(float s)
Definition: cutil_math.h:189
GLint GLint GLint GLint GLint x
Definition: khronos-glext.h:6346
__host__ __device__ float2 operator*(float2 a, float2 b)
Definition: cutil_math.h:736
__host__ __device__ float3 cross(float3 a, float3 b)
Definition: cutil_math.h:1421
const GLdouble * v
Definition: khronos-glext.h:6442
float fmaxf(float a, float b)
Definition: cutil_math.h:50