mirror of
https://github.com/recp/cglm.git
synced 2025-12-24 20:34:58 +00:00
- Change the approach implementation of several functions
- Added `glms_vec4_pack` and `glms_vec4_unpack` to pack and unpack arrays of `vec4s`. - Added `glms_vec3_pack` and `glms_vec3_unpack` to pack and unpack arrays of `vec3s`. - Fixes in functions that accumulates in one parameter -
This commit is contained in:
@@ -286,15 +286,9 @@ glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_decompose_scalev(mat4s m) {
|
||||
mat3s m3x3;
|
||||
vec3s s;
|
||||
|
||||
m3x3 = glms_mat4_pick3(m);
|
||||
|
||||
s.x = glms_vec3_norm(m3x3.col[0]);
|
||||
s.y = glms_vec3_norm(m3x3.col[1]);
|
||||
s.z = glms_vec3_norm(m3x3.col[2]);
|
||||
return s;
|
||||
vec3s r;
|
||||
glm_decompose_scalev(m.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -322,6 +316,8 @@ glms_uniscaled(mat4s m) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_decompose_rs(mat4s m, mat4s r, vec3s s) {
|
||||
// FIX: Modify param
|
||||
//
|
||||
glm_decompose_rs(m.raw, r.raw, s.raw);
|
||||
}
|
||||
|
||||
@@ -337,6 +333,8 @@ glms_decompose_rs(mat4s m, mat4s r, vec3s s) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s) {
|
||||
// FIX: Modify param
|
||||
//
|
||||
glm_decompose(m.raw, t.raw, r.raw, s.raw);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,34 +25,12 @@
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) {
|
||||
vec3s v[2], xa, xb, ya, yb, za, zb;
|
||||
mat3s m3x3;
|
||||
vec3 rawBox[2];
|
||||
vec3 rawDest[2];
|
||||
|
||||
m3x3 = glms_mat4_pick3(m);
|
||||
|
||||
xa = glms_vec3_scale(m3x3.col[0], box[0].x);
|
||||
xb = glms_vec3_scale(m3x3.col[0], box[1].x);
|
||||
|
||||
ya = glms_vec3_scale(m3x3.col[1], box[0].y);
|
||||
yb = glms_vec3_scale(m3x3.col[1], box[1].y);
|
||||
|
||||
za = glms_vec3_scale(m3x3.col[2], box[0].z);
|
||||
zb = glms_vec3_scale(m3x3.col[2], box[1].z);
|
||||
|
||||
/* translation + min(xa, xb) + min(ya, yb) + min(za, zb) */
|
||||
v[0] = m3x3.col[3];
|
||||
v[0] = glms_vec3_minadd(xa, xb);
|
||||
v[0] = glms_vec3_minadd(ya, yb);
|
||||
v[0] = glms_vec3_minadd(za, zb);
|
||||
|
||||
/* translation + max(xa, xb) + max(ya, yb) + max(za, zb) */
|
||||
v[1] = m3x3.col[3];
|
||||
v[1] = glms_vec3_maxadd(xa, xb);
|
||||
v[1] = glms_vec3_maxadd(ya, yb);
|
||||
v[1] = glms_vec3_maxadd(za, zb);
|
||||
|
||||
dest[0] = glms_vec3_copy(v[0]);
|
||||
dest[1] = glms_vec3_copy(v[1]);
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glm_aabb_transform(rawBox, m.raw, rawDest);
|
||||
glms_vec3_pack(dest, rawDest, 2);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -68,13 +46,14 @@ glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) {
|
||||
dest[0].x = glm_min(box1[0].x, box2[0].x);
|
||||
dest[0].y = glm_min(box1[0].y, box2[0].y);
|
||||
dest[0].z = glm_min(box1[0].z, box2[0].z);
|
||||
vec3 rawBox1[2];
|
||||
vec3 rawBox2[2];
|
||||
vec3 rawDest[2];
|
||||
|
||||
dest[1].x = glm_max(box1[1].x, box2[1].x);
|
||||
dest[1].y = glm_max(box1[1].y, box2[1].y);
|
||||
dest[1].z = glm_max(box1[1].z, box2[1].z);
|
||||
glms_vec3_unpack(rawBox1, box1, 2);
|
||||
glms_vec3_unpack(rawBox2, box2, 2);
|
||||
glm_aabb_merge(rawBox1, rawBox2, rawDest);
|
||||
glms_vec3_pack(dest, rawDest, 2);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -91,13 +70,14 @@ glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) {
|
||||
dest[0].x = glm_max(box[0].x, cropBox[0].x);
|
||||
dest[0].y = glm_max(box[0].y, cropBox[0].y);
|
||||
dest[0].z = glm_max(box[0].z, cropBox[0].z);
|
||||
vec3 rawBox[2];
|
||||
vec3 rawCropBox[2];
|
||||
vec3 rawDest[2];
|
||||
|
||||
dest[1].x = glm_min(box[1].x, cropBox[1].x);
|
||||
dest[1].y = glm_min(box[1].y, cropBox[1].y);
|
||||
dest[1].z = glm_min(box[1].z, cropBox[1].z);
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glms_vec3_unpack(rawCropBox, cropBox, 2);
|
||||
glm_aabb_crop(rawBox, rawCropBox, rawDest);
|
||||
glms_vec3_pack(dest, rawDest, 2);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -139,21 +119,12 @@ glms_aabb_crop_until(vec3s box[2],
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_aabb_frustum(vec3s box[2], vec4s planes[6]) {
|
||||
vec4s p;
|
||||
float dp;
|
||||
int i;
|
||||
vec3 rawBox[2];
|
||||
vec4 rawPlanes[6];
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
p = planes[i];
|
||||
dp = p.x * box[p.x > 0.0f].x
|
||||
+ p.y * box[p.y > 0.0f].y
|
||||
+ p.z * box[p.z > 0.0f].z;
|
||||
|
||||
if (dp < -p.w)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glms_vec4_unpack(rawPlanes, planes, 6);
|
||||
return glm_aabb_frustum(rawBox, rawPlanes);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -164,6 +135,8 @@ glms_aabb_frustum(vec3s box[2], vec4s planes[6]) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_aabb_invalidate(vec3s box[2]) {
|
||||
// FIX: Modify param
|
||||
//
|
||||
box[0] = glms_vec3_broadcast(FLT_MAX);
|
||||
box[1] = glms_vec3_broadcast(-FLT_MAX);
|
||||
}
|
||||
@@ -176,8 +149,9 @@ glms_aabb_invalidate(vec3s box[2]) {
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_aabb_isvalid(vec3s box[2]) {
|
||||
return glms_vec3_max(box[0]) != FLT_MAX &&
|
||||
glms_vec3_min(box[1]) != -FLT_MAX;
|
||||
vec3 rawBox[2];
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
return glm_aabb_isvalid(rawBox);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -55,23 +55,9 @@
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_frustum_planes(mat4s m, vec4s dest[6]) {
|
||||
mat4s t;
|
||||
|
||||
t = glms_mat4_transpose(m);
|
||||
|
||||
dest[0] = glms_vec4_add(t.col[3], t.col[0]); /* left */
|
||||
dest[1] = glms_vec4_sub(t.col[3], t.col[0]); /* right */
|
||||
dest[2] = glms_vec4_add(t.col[3], t.col[1]); /* bottom */
|
||||
dest[3] = glms_vec4_sub(t.col[3], t.col[1]); /* top */
|
||||
dest[4] = glms_vec4_add(t.col[3], t.col[2]); /* near */
|
||||
dest[5] = glms_vec4_sub(t.col[3], t.col[2]); /* far */
|
||||
|
||||
dest[0] = glms_plane_normalize(dest[0]);
|
||||
dest[1] = glms_plane_normalize(dest[1]);
|
||||
dest[2] = glms_plane_normalize(dest[2]);
|
||||
dest[3] = glms_plane_normalize(dest[3]);
|
||||
dest[4] = glms_plane_normalize(dest[4]);
|
||||
dest[5] = glms_plane_normalize(dest[5]);
|
||||
vec4 rawDest[6];
|
||||
glm_frustum_planes(m.raw, rawDest);
|
||||
glms_vec4_pack(dest, rawDest, 6);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -100,38 +86,9 @@ glms_frustum_planes(mat4s m, vec4s dest[6]) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_frustum_corners(mat4s invMat, vec4s dest[8]) {
|
||||
vec4s c[8];
|
||||
|
||||
/* indexOf(nearCoord) = indexOf(farCoord) + 4 */
|
||||
vec4s csCoords[8] = {
|
||||
GLMS_CSCOORD_LBN,
|
||||
GLMS_CSCOORD_LTN,
|
||||
GLMS_CSCOORD_RTN,
|
||||
GLMS_CSCOORD_RBN,
|
||||
|
||||
GLMS_CSCOORD_LBF,
|
||||
GLMS_CSCOORD_LTF,
|
||||
GLMS_CSCOORD_RTF,
|
||||
GLMS_CSCOORD_RBF
|
||||
};
|
||||
|
||||
c[0] = glms_mat4_mulv(invMat, csCoords[0]);
|
||||
c[1] = glms_mat4_mulv(invMat, csCoords[1]);
|
||||
c[2] = glms_mat4_mulv(invMat, csCoords[2]);
|
||||
c[3] = glms_mat4_mulv(invMat, csCoords[3]);
|
||||
c[4] = glms_mat4_mulv(invMat, csCoords[4]);
|
||||
c[5] = glms_mat4_mulv(invMat, csCoords[5]);
|
||||
c[6] = glms_mat4_mulv(invMat, csCoords[6]);
|
||||
c[7] = glms_mat4_mulv(invMat, csCoords[7]);
|
||||
|
||||
dest[0] = glms_vec4_scale(c[0], 1.0f / c[0].z);
|
||||
dest[1] = glms_vec4_scale(c[1], 1.0f / c[1].z);
|
||||
dest[2] = glms_vec4_scale(c[2], 1.0f / c[2].z);
|
||||
dest[3] = glms_vec4_scale(c[3], 1.0f / c[3].z);
|
||||
dest[4] = glms_vec4_scale(c[4], 1.0f / c[4].z);
|
||||
dest[5] = glms_vec4_scale(c[5], 1.0f / c[5].z);
|
||||
dest[6] = glms_vec4_scale(c[6], 1.0f / c[6].z);
|
||||
dest[7] = glms_vec4_scale(c[7], 1.0f / c[7].z);
|
||||
vec4 rawDest[8];
|
||||
glm_frustum_corners(invMat.raw, rawDest);
|
||||
glms_vec4_pack(dest, rawDest, 8);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -143,19 +100,12 @@ glms_frustum_corners(mat4s invMat, vec4s dest[8]) {
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_frustum_center(vec4s corners[8]) {
|
||||
vec4s center;
|
||||
vec4 rawCorners[8];
|
||||
vec4s r;
|
||||
|
||||
center = glms_vec4_copy(corners[0]);
|
||||
|
||||
center = glms_vec4_add(corners[1], center);
|
||||
center = glms_vec4_add(corners[2], center);
|
||||
center = glms_vec4_add(corners[3], center);
|
||||
center = glms_vec4_add(corners[4], center);
|
||||
center = glms_vec4_add(corners[5], center);
|
||||
center = glms_vec4_add(corners[6], center);
|
||||
center = glms_vec4_add(corners[7], center);
|
||||
|
||||
return glms_vec4_scale(center, 0.125f);
|
||||
glms_vec4_unpack(rawCorners, corners, 8);
|
||||
glm_frustum_center(rawCorners, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -168,27 +118,12 @@ glms_frustum_center(vec4s corners[8]) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) {
|
||||
vec4s v;
|
||||
vec3s min, max;
|
||||
int i;
|
||||
vec4 rawCorners[8];
|
||||
vec3 rawBox[2];
|
||||
|
||||
min = glms_vec3_broadcast(FLT_MAX);
|
||||
max = glms_vec3_broadcast(-FLT_MAX);
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
v = glms_mat4_mulv(m, corners[i]);
|
||||
|
||||
min.x = glm_min(min.x, v.x);
|
||||
min.y = glm_min(min.y, v.y);
|
||||
min.z = glm_min(min.z, v.z);
|
||||
|
||||
max.x = glm_max(max.x, v.x);
|
||||
max.y = glm_max(max.y, v.y);
|
||||
max.z = glm_max(max.z, v.z);
|
||||
}
|
||||
|
||||
box[0] = glms_vec3_copy(min);
|
||||
box[1] = glms_vec3_copy(max);
|
||||
glms_vec4_unpack(rawCorners, corners, 8);
|
||||
glm_frustum_box(rawCorners, m.raw, rawBox);
|
||||
glms_vec3_pack(box, rawBox, 2);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -205,36 +140,16 @@ glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) {
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_frustum_corners_at(vec4s corners[8],
|
||||
glms_frustum_corners_at(vec4s corners[8],
|
||||
float splitDist,
|
||||
float farDist,
|
||||
vec4s planeCorners[4]) {
|
||||
vec4s corner;
|
||||
float dist, sc;
|
||||
vec4s planeCorners[4]) {
|
||||
vec4 rawCorners[8];
|
||||
vec4 rawPlaneCorners[4];
|
||||
|
||||
/* because distance and scale is same for all */
|
||||
dist = glms_vec4_distance(corners[GLM_RTF], corners[GLM_RTN]);
|
||||
sc = dist * (splitDist / farDist);
|
||||
|
||||
/* left bottom */
|
||||
corner = glms_vec4_sub(corners[GLM_LBF], corners[GLM_LBN]);
|
||||
corner = glms_vec4_scale_as(corner, sc);
|
||||
planeCorners[0] = glms_vec4_add(corners[GLM_LBN], corner);
|
||||
|
||||
/* left top */
|
||||
corner = glms_vec4_sub(corners[GLM_LTF], corners[GLM_LTN]);
|
||||
corner = glms_vec4_scale_as(corner, sc);
|
||||
planeCorners[1] = glms_vec4_add(corners[GLM_LTN], corner);
|
||||
|
||||
/* right top */
|
||||
corner = glms_vec4_sub(corners[GLM_RTF], corners[GLM_RTN]);
|
||||
corner = glms_vec4_scale_as(corner, sc);
|
||||
planeCorners[2] = glms_vec4_add(corners[GLM_RTN], corner);
|
||||
|
||||
/* right bottom */
|
||||
corner = glms_vec4_sub(corners[GLM_RBF], corners[GLM_RBN]);
|
||||
corner = glms_vec4_scale_as(corner, sc);
|
||||
planeCorners[3] = glms_vec4_add(corners[GLM_RBN], corner);
|
||||
glms_vec4_unpack(rawCorners, corners, 8);
|
||||
glm_frustum_corners_at(rawCorners, splitDist, farDist, rawPlaneCorners);
|
||||
glms_vec4_pack(planeCorners, rawPlaneCorners, 8);
|
||||
}
|
||||
|
||||
#endif /* cglm_frustums_h */
|
||||
|
||||
@@ -73,28 +73,10 @@ void
|
||||
glms_aabb_print(vec3s bbox[2],
|
||||
const char * __restrict tag,
|
||||
FILE * __restrict ostream) {
|
||||
int i, j;
|
||||
vec3 rawBbox[2];
|
||||
|
||||
#define m 3
|
||||
|
||||
fprintf(ostream, "AABB (%s):\n", tag ? tag : "float");
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
fprintf(ostream, "\t|");
|
||||
|
||||
for (j = 0; j < m; j++) {
|
||||
fprintf(ostream, "%0.4f", bbox[i].raw[j]);
|
||||
|
||||
if (j != m - 1)
|
||||
fprintf(ostream, "\t");
|
||||
}
|
||||
|
||||
fprintf(ostream, "|\n");
|
||||
}
|
||||
|
||||
fprintf(ostream, "\n");
|
||||
|
||||
#undef m
|
||||
glms_vec3_unpack(rawBbox, bbox, 2);
|
||||
glm_aabb_print(rawBbox, tag, ostream);
|
||||
}
|
||||
|
||||
#endif /* cglm_ios_h */
|
||||
|
||||
@@ -241,7 +241,7 @@ CGLM_INLINE
|
||||
mat4s
|
||||
glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) {
|
||||
CGLM_ALIGN_MAT mat4s r = GLMS_MAT4_IDENTITY_INIT;
|
||||
uint32_t i;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
r = glms_mat4_mul(r, *matrices[i]);
|
||||
|
||||
@@ -40,6 +40,30 @@ glms_vec3_copy(vec3s v) {
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
dst[i].x = src[i][0];
|
||||
dst[i].y = src[i][1];
|
||||
dst[i].z = src[i][2];
|
||||
}
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
dst[i][0] = src[i].x;
|
||||
dst[i][1] = src[i].y;
|
||||
dst[i][2] = src[i].z;
|
||||
}
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_zero() {
|
||||
@@ -65,13 +89,13 @@ glms_vec3_dot(vec3s a, vec3s b) {
|
||||
CGLM_INLINE
|
||||
float
|
||||
glms_vec3_norm2(vec3s v) {
|
||||
glm_vec3_norm2(v.raw);
|
||||
return glm_vec3_norm2(v.raw);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
float
|
||||
glms_vec3_norm(vec3s v) {
|
||||
glm_vec3_norm(v.raw);
|
||||
return glm_vec3_norm(v.raw);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
@@ -148,50 +172,44 @@ glms_vec3_divs(vec3s a, float s) {
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_addadd(vec3s a, vec3s b) {
|
||||
vec3s r;
|
||||
glm_vec3_addadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) {
|
||||
glm_vec3_addadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_subadd(vec3s a, vec3s b) {
|
||||
vec3s r;
|
||||
glm_vec3_subadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) {
|
||||
glm_vec3_subadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_muladd(vec3s a, vec3s b) {
|
||||
vec3s r;
|
||||
glm_vec3_muladd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) {
|
||||
glm_vec3_muladd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_muladds(vec3s a, float s) {
|
||||
vec3s r;
|
||||
glm_vec3_muladds(a.raw, s, r.raw);
|
||||
return r;
|
||||
glms_vec3_muladds(vec3s a, float s, vec3s dest) {
|
||||
glm_vec3_muladds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_maxadd(vec3s a, vec3s b) {
|
||||
vec3s r;
|
||||
glm_vec3_maxadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) {
|
||||
glm_vec3_maxadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_minadd(vec3s a, vec3s b) {
|
||||
vec3s r;
|
||||
glm_vec3_minadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) {
|
||||
glm_vec3_minadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
@@ -201,22 +219,6 @@ glms_vec3_flipsign(vec3s v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_flipsign_to(vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_flipsign_to(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_negate_to(vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_negate_to(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_negate(vec3s v) {
|
||||
@@ -231,14 +233,6 @@ glms_vec3_inv(vec3s v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_inv_to(vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_inv_to(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_normalize(vec3s v) {
|
||||
@@ -246,14 +240,6 @@ glms_vec3_normalize(vec3s v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_normalize_to(vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_normalize_to(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_cross(vec3s a, vec3s b) {
|
||||
@@ -291,17 +277,17 @@ glms_vec3_rotate(vec3s v, float angle, vec3s axis) {
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_rotate_m4(mat4 m, vec3s v) {
|
||||
glms_vec3_rotate_m4(mat4s m, vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_rotate_m4(m, v.raw, r.raw);
|
||||
glm_vec3_rotate_m4(m.raw, v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_vec3_rotate_m3(mat3 m, vec3s v) {
|
||||
glms_vec3_rotate_m3(mat3s m, vec3s v) {
|
||||
vec3s r;
|
||||
glm_vec3_rotate_m3(m, v.raw, r.raw);
|
||||
glm_vec3_rotate_m3(m.raw, v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -387,12 +373,4 @@ glms_normalize(vec3s v) {
|
||||
return v;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec3s
|
||||
glms_normalize_to(vec3s v) {
|
||||
vec3s r;
|
||||
glm_normalize_to(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* cglm_vec3s_h */
|
||||
|
||||
@@ -54,6 +54,29 @@ glms_vec4_ucopy(vec4s v) {
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
dst[i].x = src[i][0];
|
||||
dst[i].y = src[i][1];
|
||||
dst[i].z = src[i][2];
|
||||
}
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
dst[i][0] = src[i].x;
|
||||
dst[i][1] = src[i].y;
|
||||
dst[i][2] = src[i].z;
|
||||
}
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
float
|
||||
@@ -147,50 +170,44 @@ glms_vec4_divs(vec4s v, float s) {
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_addadd(vec4s a, vec4s b) {
|
||||
vec4s r;
|
||||
glm_vec4_addadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) {
|
||||
glm_vec4_addadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_subadd(vec4s a, vec4s b) {
|
||||
vec4s r;
|
||||
glm_vec4_subadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) {
|
||||
glm_vec4_subadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_muladd(vec4s a, vec4s b) {
|
||||
vec4s r;
|
||||
glm_vec4_muladd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) {
|
||||
glm_vec4_muladd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_muladds(vec4s a, float s) {
|
||||
vec4s r;
|
||||
glm_vec4_muladds(a.raw, s, r.raw);
|
||||
return r;
|
||||
glms_vec4_muladds(vec4s a, float s, vec4s dest) {
|
||||
glm_vec4_muladds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_maxadd(vec4s a, vec4s b) {
|
||||
vec4s r;
|
||||
glm_vec4_maxadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) {
|
||||
glm_vec4_maxadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_minadd(vec4s a, vec4s b) {
|
||||
vec4s r;
|
||||
glm_vec4_minadd(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) {
|
||||
glm_vec4_minadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
@@ -251,4 +268,12 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) {
|
||||
return r;
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
vec4s
|
||||
glms_vec4_cubic(float s) {
|
||||
vec4s r;
|
||||
glm_vec4_cubic(s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* cglm_vec4s_h */
|
||||
|
||||
Reference in New Issue
Block a user