diff --git a/include/cglm/affine-mat.h b/include/cglm/affine-mat.h index f58749bd9..71e109d1d 100644 --- a/include/cglm/affine-mat.h +++ b/include/cglm/affine-mat.h @@ -7,8 +7,8 @@ /* Functions: - CGLM_INLINE void glm_mul(mat4 m1, mat4 m2, mat4 dest); - CGLM_INLINE void glm_inv_tr(mat4 mat); + CGLM_DECL void glm_mul(mat4 m1, mat4 m2, mat4 dest); + CGLM_DECL void glm_inv_tr(mat4 mat); */ #ifndef cglm_affine_mat_h @@ -42,9 +42,11 @@ * @param[in] m2 affine matrix 2 * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mul(mat4 m1, mat4 m2, mat4 dest) { +glm_mul(mat4 m1, mat4 m2, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #ifdef __AVX__ glm_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -81,6 +83,7 @@ glm_mul(mat4 m1, mat4 m2, mat4 dest) { dest[3][3] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33; #endif } +#endif /*! * @brief this is similar to glm_mat4_mul but specialized to affine transform @@ -98,9 +101,11 @@ glm_mul(mat4 m1, mat4 m2, mat4 dest) { * @param[in] m2 affine matrix 2 * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) { +glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mul_rot_sse2(m1, m2, dest); #else @@ -134,6 +139,7 @@ glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) { dest[3][3] = a33; #endif } +#endif /*! * @brief inverse orthonormal rotation + translation matrix (ridig-body) @@ -145,9 +151,11 @@ glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) { * * @param[in,out] mat matrix */ -CGLM_INLINE +CGLM_DECL void -glm_inv_tr(mat4 mat) { +glm_inv_tr(mat4 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_inv_tr_sse2(mat); #else @@ -164,5 +172,6 @@ glm_inv_tr(mat4 mat) { glm_vec3_copy(t, mat[3]); #endif } +#endif #endif /* cglm_affine_mat_h */ diff --git a/include/cglm/affine.h b/include/cglm/affine.h index 0c7121889..eea49f5b9 100644 --- a/include/cglm/affine.h +++ b/include/cglm/affine.h @@ -7,27 +7,27 @@ /* Functions: - CGLM_INLINE void glm_translate_to(mat4 m, vec3 v, mat4 dest); - CGLM_INLINE void glm_translate(mat4 m, vec3 v); - CGLM_INLINE void glm_translate_x(mat4 m, float to); - CGLM_INLINE void glm_translate_y(mat4 m, float to); - CGLM_INLINE void glm_translate_z(mat4 m, float to); - CGLM_INLINE void glm_translate_make(mat4 m, vec3 v); - CGLM_INLINE void glm_scale_to(mat4 m, vec3 v, mat4 dest); - CGLM_INLINE void glm_scale_make(mat4 m, vec3 v); - CGLM_INLINE void glm_scale(mat4 m, vec3 v); - CGLM_INLINE void glm_scale_uni(mat4 m, float s); - CGLM_INLINE void glm_rotate_x(mat4 m, float angle, mat4 dest); - CGLM_INLINE void glm_rotate_y(mat4 m, float angle, mat4 dest); - CGLM_INLINE void glm_rotate_z(mat4 m, float angle, mat4 dest); - CGLM_INLINE void glm_rotate_make(mat4 m, float angle, vec3 axis); - CGLM_INLINE void glm_rotate(mat4 m, float angle, vec3 axis); - CGLM_INLINE void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis); - CGLM_INLINE void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis); - CGLM_INLINE void glm_decompose_scalev(mat4 m, vec3 s); - CGLM_INLINE bool glm_uniscaled(mat4 m); - CGLM_INLINE void glm_decompose_rs(mat4 m, mat4 r, vec3 s); - CGLM_INLINE void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s); + CGLM_DECL void glm_translate_to(mat4 m, vec3 v, mat4 dest); + CGLM_DECL void glm_translate(mat4 m, vec3 v); + CGLM_DECL void glm_translate_x(mat4 m, float to); + CGLM_DECL void glm_translate_y(mat4 m, float to); + CGLM_DECL void glm_translate_z(mat4 m, float to); + CGLM_DECL void glm_translate_make(mat4 m, vec3 v); + CGLM_DECL void glm_scale_to(mat4 m, vec3 v, mat4 dest); + CGLM_DECL void glm_scale_make(mat4 m, vec3 v); + CGLM_DECL void glm_scale(mat4 m, vec3 v); + CGLM_DECL void glm_scale_uni(mat4 m, float s); + CGLM_DECL void glm_rotate_x(mat4 m, float angle, mat4 dest); + CGLM_DECL void glm_rotate_y(mat4 m, float angle, mat4 dest); + CGLM_DECL void glm_rotate_z(mat4 m, float angle, mat4 dest); + CGLM_DECL void glm_rotate_make(mat4 m, float angle, vec3 axis); + CGLM_DECL void glm_rotate(mat4 m, float angle, vec3 axis); + CGLM_DECL void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis); + CGLM_DECL void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis); + CGLM_DECL void glm_decompose_scalev(mat4 m, vec3 s); + CGLM_DECL bool glm_uniscaled(mat4 m); + CGLM_DECL void glm_decompose_rs(mat4 m, mat4 r, vec3 s); + CGLM_DECL void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s); */ #ifndef cglm_affine_h @@ -47,9 +47,11 @@ * @param[in, out] m affine transfrom * @param[in] v translate vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL void -glm_translate(mat4 m, vec3 v) { +glm_translate(mat4 m, vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_load(m[0]), @@ -72,6 +74,7 @@ glm_translate(mat4 m, vec3 v) { glm_vec4_add(v3, m[3], m[3]); #endif } +#endif /*! * @brief translate existing transform matrix by v vector @@ -83,12 +86,15 @@ glm_translate(mat4 m, vec3 v) { * @param[in] v translate vector [x, y, z] * @param[out] dest translated matrix */ -CGLM_INLINE +CGLM_DECL void -glm_translate_to(mat4 m, vec3 v, mat4 dest) { +glm_translate_to(mat4 m, vec3 v, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_copy(m, dest); glm_translate(dest, v); } +#endif /*! * @brief translate existing transform matrix by x factor @@ -96,9 +102,11 @@ glm_translate_to(mat4 m, vec3 v, mat4 dest) { * @param[in, out] m affine transfrom * @param[in] x x factor */ -CGLM_INLINE +CGLM_DECL void -glm_translate_x(mat4 m, float x) { +glm_translate_x(mat4 m, float x) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_mul_ps(glmm_load(m[0]), @@ -111,6 +119,7 @@ glm_translate_x(mat4 m, float x) { glm_vec4_add(v1, m[3], m[3]); #endif } +#endif /*! * @brief translate existing transform matrix by y factor @@ -118,9 +127,11 @@ glm_translate_x(mat4 m, float x) { * @param[in, out] m affine transfrom * @param[in] y y factor */ -CGLM_INLINE +CGLM_DECL void -glm_translate_y(mat4 m, float y) { +glm_translate_y(mat4 m, float y) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_mul_ps(glmm_load(m[1]), @@ -133,6 +144,7 @@ glm_translate_y(mat4 m, float y) { glm_vec4_add(v1, m[3], m[3]); #endif } +#endif /*! * @brief translate existing transform matrix by z factor @@ -140,9 +152,11 @@ glm_translate_y(mat4 m, float y) { * @param[in, out] m affine transfrom * @param[in] z z factor */ -CGLM_INLINE +CGLM_DECL void -glm_translate_z(mat4 m, float z) { +glm_translate_z(mat4 m, float z) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_mul_ps(glmm_load(m[2]), @@ -155,6 +169,7 @@ glm_translate_z(mat4 m, float z) { glm_vec4_add(v1, m[3], m[3]); #endif } +#endif /*! * @brief creates NEW translate transform matrix by v vector @@ -162,12 +177,15 @@ glm_translate_z(mat4 m, float z) { * @param[out] m affine transfrom * @param[in] v translate vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL void -glm_translate_make(mat4 m, vec3 v) { +glm_translate_make(mat4 m, vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_identity(m); glm_vec3_copy(v, m[3]); } +#endif /*! * @brief scale existing transform matrix by v vector @@ -177,15 +195,18 @@ glm_translate_make(mat4 m, vec3 v) { * @param[in] v scale vector [x, y, z] * @param[out] dest scaled matrix */ -CGLM_INLINE +CGLM_DECL void -glm_scale_to(mat4 m, vec3 v, mat4 dest) { +glm_scale_to(mat4 m, vec3 v, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_scale(m[0], v[0], dest[0]); glm_vec4_scale(m[1], v[1], dest[1]); glm_vec4_scale(m[2], v[2], dest[2]); glm_vec4_copy(m[3], dest[3]); } +#endif /*! * @brief creates NEW scale matrix by v vector @@ -193,14 +214,17 @@ glm_scale_to(mat4 m, vec3 v, mat4 dest) { * @param[out] m affine transfrom * @param[in] v scale vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL void -glm_scale_make(mat4 m, vec3 v) { +glm_scale_make(mat4 m, vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_identity(m); m[0][0] = v[0]; m[1][1] = v[1]; m[2][2] = v[2]; } +#endif /*! * @brief scales existing transform matrix by v vector @@ -209,11 +233,14 @@ glm_scale_make(mat4 m, vec3 v) { * @param[in, out] m affine transfrom * @param[in] v scale vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL void -glm_scale(mat4 m, vec3 v) { +glm_scale(mat4 m, vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_scale_to(m, v, m); } +#endif /*! * @brief applies uniform scale to existing transform matrix v = [s, s, s] @@ -222,12 +249,15 @@ glm_scale(mat4 m, vec3 v) { * @param[in, out] m affine transfrom * @param[in] s scale factor */ -CGLM_INLINE +CGLM_DECL void -glm_scale_uni(mat4 m, float s) { +glm_scale_uni(mat4 m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 v = { s, s, s }; glm_scale_to(m, v, m); } +#endif /*! * @brief rotate existing transform matrix around X axis by angle @@ -237,9 +267,11 @@ glm_scale_uni(mat4 m, float s) { * @param[in] angle angle (radians) * @param[out] dest rotated matrix */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_x(mat4 m, float angle, mat4 dest) { +glm_rotate_x(mat4 m, float angle, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -253,6 +285,7 @@ glm_rotate_x(mat4 m, float angle, mat4 dest) { glm_mul_rot(m, t, dest); } +#endif /*! * @brief rotate existing transform matrix around Y axis by angle @@ -262,9 +295,11 @@ glm_rotate_x(mat4 m, float angle, mat4 dest) { * @param[in] angle angle (radians) * @param[out] dest rotated matrix */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_y(mat4 m, float angle, mat4 dest) { +glm_rotate_y(mat4 m, float angle, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -278,6 +313,7 @@ glm_rotate_y(mat4 m, float angle, mat4 dest) { glm_mul_rot(m, t, dest); } +#endif /*! * @brief rotate existing transform matrix around Z axis by angle @@ -287,9 +323,11 @@ glm_rotate_y(mat4 m, float angle, mat4 dest) { * @param[in] angle angle (radians) * @param[out] dest rotated matrix */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_z(mat4 m, float angle, mat4 dest) { +glm_rotate_z(mat4 m, float angle, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -303,6 +341,7 @@ glm_rotate_z(mat4 m, float angle, mat4 dest) { glm_mul_rot(m, t, dest); } +#endif /*! * @brief creates NEW rotation matrix by angle and axis @@ -313,9 +352,11 @@ glm_rotate_z(mat4 m, float angle, mat4 dest) { * @param[in] angle angle (radians) * @param[in] axis axis */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_make(mat4 m, float angle, vec3 axis) { +glm_rotate_make(mat4 m, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 axisn, v, vs; float c; @@ -336,6 +377,7 @@ glm_rotate_make(mat4 m, float angle, vec3 axis) { m[0][3] = m[1][3] = m[2][3] = m[3][0] = m[3][1] = m[3][2] = 0.0f; m[3][3] = 1.0f; } +#endif /*! * @brief rotate existing transform matrix around given axis by angle @@ -344,13 +386,16 @@ glm_rotate_make(mat4 m, float angle, vec3 axis) { * @param[in] angle angle (radians) * @param[in] axis axis */ -CGLM_INLINE +CGLM_DECL void -glm_rotate(mat4 m, float angle, vec3 axis) { +glm_rotate(mat4 m, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 rot; glm_rotate_make(rot, angle, axis); glm_mul_rot(m, rot, m); } +#endif /*! * @brief rotate existing transform @@ -361,9 +406,11 @@ glm_rotate(mat4 m, float angle, vec3 axis) { * @param[in] angle angle (radians) * @param[in] axis axis */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { +glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -372,6 +419,7 @@ glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { glm_rotate(m, angle, axis); glm_translate(m, pivotInv); } +#endif /*! * @brief creates NEW rotation matrix by angle and axis at given point @@ -386,9 +434,11 @@ glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { * @param[in] angle angle (radians) * @param[in] axis axis */ -CGLM_INLINE +CGLM_DECL void -glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { +glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -397,6 +447,7 @@ glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { glm_rotate(m, angle, axis); glm_translate(m, pivotInv); } +#endif /*! * @brief decompose scale vector @@ -404,13 +455,16 @@ glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { * @param[in] m affine transform * @param[out] s scale vector (Sx, Sy, Sz) */ -CGLM_INLINE +CGLM_DECL void -glm_decompose_scalev(mat4 m, vec3 s) { +glm_decompose_scalev(mat4 m, vec3 s) CGLM_ENDD +#ifndef CGLM_LIB +{ s[0] = glm_vec3_norm(m[0]); s[1] = glm_vec3_norm(m[1]); s[2] = glm_vec3_norm(m[2]); } +#endif /*! * @brief returns true if matrix is uniform scaled. This is helpful for @@ -420,13 +474,16 @@ glm_decompose_scalev(mat4 m, vec3 s) { * * @return boolean */ -CGLM_INLINE +CGLM_DECL bool -glm_uniscaled(mat4 m) { +glm_uniscaled(mat4 m) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 s; glm_decompose_scalev(m, s); return glm_vec3_eq_all(s); } +#endif /*! * @brief decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz] @@ -436,9 +493,11 @@ glm_uniscaled(mat4 m) { * @param[out] r rotation matrix * @param[out] s scale matrix */ -CGLM_INLINE +CGLM_DECL void -glm_decompose_rs(mat4 m, mat4 r, vec3 s) { +glm_decompose_rs(mat4 m, mat4 r, vec3 s) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) vec4 t = {0.0f, 0.0f, 0.0f, 1.0f}; CGLM_ALIGN(8) vec3 v; @@ -466,6 +525,7 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) { glm_vec3_negate(s); } } +#endif /*! * @brief decompose affine transform, TODO: extract shear factors. @@ -476,11 +536,14 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) { * @param[out] r rotation matrix (mat4) * @param[out] s scaling vector [X, Y, Z] */ -CGLM_INLINE +CGLM_DECL void -glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { +glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_copy(m[3], t); glm_decompose_rs(m, r, s); } +#endif #endif /* cglm_affine_h */ diff --git a/include/cglm/applesimd.h b/include/cglm/applesimd.h index 3608bb31e..c816e8631 100644 --- a/include/cglm/applesimd.h +++ b/include/cglm/applesimd.h @@ -19,9 +19,11 @@ * @brief converts mat4 to Apple's simd type simd_float4x4 * @return simd_float4x4 */ -CGLM_INLINE +CGLM_DECL simd_float4x4 -glm_mat4_applesimd(mat4 m) { +glm_mat4_applesimd(mat4 m) CGLM_ENDD +#ifndef CGLM_LIB +{ simd_float4x4 t; t.columns[0][0] = m[0][0]; @@ -46,14 +48,17 @@ glm_mat4_applesimd(mat4 m) { return t; } +#endif /*! * @brief converts mat3 to Apple's simd type simd_float3x3 * @return simd_float3x3 */ -CGLM_INLINE +CGLM_DECL simd_float3x3 -glm_mat3_applesimd(mat3 m) { +glm_mat3_applesimd(mat3 m) CGLM_ENDD +#ifndef CGLM_LIB +{ simd_float3x3 t; t.columns[0][0] = m[0][0]; @@ -70,26 +75,33 @@ glm_mat3_applesimd(mat3 m) { return t; } +#endif /*! * @brief converts vec4 to Apple's simd type simd_float4 * @return simd_float4 */ -CGLM_INLINE +CGLM_DECL simd_float4 -glm_vec4_applesimd(vec4 v) { +glm_vec4_applesimd(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return (simd_float4){v[0], v[1], v[2], v[3]}; } +#endif /*! * @brief converts vec3 to Apple's simd type simd_float3 * @return v */ -CGLM_INLINE +CGLM_DECL simd_float3 -glm_vec3_applesimd(vec3 v) { +glm_vec3_applesimd(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return (simd_float3){v[0], v[1], v[2]}; } +#endif #endif #endif /* cglm_applesimd_h */ diff --git a/include/cglm/bezier.h b/include/cglm/bezier.h index 2bbe09f5f..43183fca7 100644 --- a/include/cglm/bezier.h +++ b/include/cglm/bezier.h @@ -45,9 +45,11 @@ * * @return B(s) */ -CGLM_INLINE +CGLM_DECL float -glm_bezier(float s, float p0, float c0, float c1, float p1) { +glm_bezier(float s, float p0, float c0, float c1, float p1) CGLM_ENDD +#ifndef CGLM_LIB +{ float x, xx, ss, xs3, a; x = 1.0f - s; @@ -58,6 +60,7 @@ glm_bezier(float s, float p0, float c0, float c1, float p1) { return a + s * (c1 * xs3 + p1 * ss - a); } +#endif /*! * @brief cubic hermite interpolation @@ -79,9 +82,11 @@ glm_bezier(float s, float p0, float c0, float c1, float p1) { * * @return H(s) */ -CGLM_INLINE +CGLM_DECL float -glm_hermite(float s, float p0, float t0, float t1, float p1) { +glm_hermite(float s, float p0, float t0, float t1, float p1) CGLM_ENDD +#ifndef CGLM_LIB +{ float ss, d, a, b, c, e, f; ss = s * s; @@ -94,6 +99,7 @@ glm_hermite(float s, float p0, float t0, float t1, float p1) { return p0 * (e + 1.0f) + t0 * (f - ss + s) + t1 * f - p1 * e; } +#endif /*! * @brief iterative way to solve cubic equation @@ -106,9 +112,11 @@ glm_hermite(float s, float p0, float t0, float t1, float p1) { * * @return parameter to use in cubic equation */ -CGLM_INLINE +CGLM_DECL float -glm_decasteljau(float prm, float p0, float c0, float c1, float p1) { +glm_decasteljau(float prm, float p0, float c0, float c1, float p1) CGLM_ENDD +#ifndef CGLM_LIB +{ float u, v, a, b, c, d, e, f; int i; @@ -150,5 +158,6 @@ glm_decasteljau(float prm, float p0, float c0, float c1, float p1) { return glm_clamp_zo((u + v) * 0.5f); } +#endif #endif /* cglm_bezier_h */ diff --git a/include/cglm/box.h b/include/cglm/box.h index 2250c2a7e..a7d9414d6 100644 --- a/include/cglm/box.h +++ b/include/cglm/box.h @@ -20,9 +20,11 @@ * @param[in] m transform matrix * @param[out] dest transformed bounding box */ -CGLM_INLINE +CGLM_DECL void -glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { +glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 v[2], xa, xb, ya, yb, za, zb; glm_vec3_scale(m[0], box[0][0], xa); @@ -49,6 +51,7 @@ glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { glm_vec3_copy(v[0], dest[0]); glm_vec3_copy(v[1], dest[1]); } +#endif /*! * @brief merges two AABB bounding box and creates new one @@ -60,9 +63,11 @@ glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { * @param[in] box2 bounding box 2 * @param[out] dest merged bounding box */ -CGLM_INLINE +CGLM_DECL void -glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { +glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = glm_min(box1[0][0], box2[0][0]); dest[0][1] = glm_min(box1[0][1], box2[0][1]); dest[0][2] = glm_min(box1[0][2], box2[0][2]); @@ -71,6 +76,7 @@ glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { dest[1][1] = glm_max(box1[1][1], box2[1][1]); dest[1][2] = glm_max(box1[1][2], box2[1][2]); } +#endif /*! * @brief crops a bounding box with another one. @@ -83,9 +89,11 @@ glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { * @param[in] cropBox crop box * @param[out] dest cropped bounding box */ -CGLM_INLINE +CGLM_DECL void -glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { +glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = glm_max(box[0][0], cropBox[0][0]); dest[0][1] = glm_max(box[0][1], cropBox[0][1]); dest[0][2] = glm_max(box[0][2], cropBox[0][2]); @@ -94,6 +102,7 @@ glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { dest[1][1] = glm_min(box[1][1], cropBox[1][1]); dest[1][2] = glm_min(box[1][2], cropBox[1][2]); } +#endif /*! * @brief crops a bounding box with another one. @@ -107,15 +116,18 @@ glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { * @param[in] clampBox miniumum box * @param[out] dest cropped bounding box */ -CGLM_INLINE +CGLM_DECL void glm_aabb_crop_until(vec3 box[2], vec3 cropBox[2], vec3 clampBox[2], - vec3 dest[2]) { + vec3 dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_aabb_crop(box, cropBox, dest); glm_aabb_merge(clampBox, dest, dest); } +#endif /*! * @brief check if AABB intersects with frustum planes @@ -131,9 +143,11 @@ glm_aabb_crop_until(vec3 box[2], * @param[in] box bounding box * @param[in] planes frustum planes */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_frustum(vec3 box[2], vec4 planes[6]) { +glm_aabb_frustum(vec3 box[2], vec4 planes[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ float *p, dp; int i; @@ -149,52 +163,65 @@ glm_aabb_frustum(vec3 box[2], vec4 planes[6]) { return true; } +#endif /*! * @brief invalidate AABB min and max values * * @param[in, out] box bounding box */ -CGLM_INLINE +CGLM_DECL void -glm_aabb_invalidate(vec3 box[2]) { +glm_aabb_invalidate(vec3 box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_broadcast(FLT_MAX, box[0]); glm_vec3_broadcast(-FLT_MAX, box[1]); } +#endif /*! * @brief check if AABB is valid or not * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_isvalid(vec3 box[2]) { +glm_aabb_isvalid(vec3 box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_max(box[0]) != FLT_MAX && glm_vec3_min(box[1]) != -FLT_MAX; } +#endif /*! * @brief distance between of min and max * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL float -glm_aabb_size(vec3 box[2]) { +glm_aabb_size(vec3 box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_distance(box[0], box[1]); } +#endif /*! * @brief radius of sphere which surrounds AABB * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL float -glm_aabb_radius(vec3 box[2]) { +glm_aabb_radius(vec3 box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_aabb_size(box) * 0.5f; } +#endif /*! * @brief computes center point of AABB @@ -202,11 +229,14 @@ glm_aabb_radius(vec3 box[2]) { * @param[in] box bounding box * @param[out] dest center of bounding box */ -CGLM_INLINE +CGLM_DECL void -glm_aabb_center(vec3 box[2], vec3 dest) { +glm_aabb_center(vec3 box[2], vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_center(box[0], box[1], dest); } +#endif /*! * @brief check if two AABB intersects @@ -214,13 +244,16 @@ glm_aabb_center(vec3 box[2], vec3 dest) { * @param[in] box bounding box * @param[in] other other bounding box */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_aabb(vec3 box[2], vec3 other[2]) { +glm_aabb_aabb(vec3 box[2], vec3 other[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return (box[0][0] <= other[1][0] && box[1][0] >= other[0][0]) && (box[0][1] <= other[1][1] && box[1][1] >= other[0][1]) && (box[0][2] <= other[1][2] && box[1][2] >= other[0][2]); } +#endif /*! * @brief check if AABB intersects with sphere @@ -231,9 +264,11 @@ glm_aabb_aabb(vec3 box[2], vec3 other[2]) { * @param[in] box solid bounding box * @param[in] s solid sphere */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_sphere(vec3 box[2], vec4 s) { +glm_aabb_sphere(vec3 box[2], vec4 s) CGLM_ENDD +#ifndef CGLM_LIB +{ float dmin; int a, b, c; @@ -247,6 +282,7 @@ glm_aabb_sphere(vec3 box[2], vec4 s) { return dmin <= glm_pow2(s[3]); } +#endif /*! * @brief check if point is inside of AABB @@ -254,13 +290,16 @@ glm_aabb_sphere(vec3 box[2], vec4 s) { * @param[in] box bounding box * @param[in] point point */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_point(vec3 box[2], vec3 point) { +glm_aabb_point(vec3 box[2], vec3 point) CGLM_ENDD +#ifndef CGLM_LIB +{ return (point[0] >= box[0][0] && point[0] <= box[1][0]) && (point[1] >= box[0][1] && point[1] <= box[1][1]) && (point[2] >= box[0][2] && point[2] <= box[1][2]); } +#endif /*! * @brief check if AABB contains other AABB @@ -268,12 +307,15 @@ glm_aabb_point(vec3 box[2], vec3 point) { * @param[in] box bounding box * @param[in] other other bounding box */ -CGLM_INLINE +CGLM_DECL bool -glm_aabb_contains(vec3 box[2], vec3 other[2]) { +glm_aabb_contains(vec3 box[2], vec3 other[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return (box[0][0] <= other[0][0] && box[1][0] >= other[1][0]) && (box[0][1] <= other[0][1] && box[1][1] >= other[1][1]) && (box[0][2] <= other[0][2] && box[1][2] >= other[1][2]); } +#endif #endif /* cglm_box_h */ diff --git a/include/cglm/call.h b/include/cglm/call.h deleted file mode 100644 index b51b7311b..000000000 --- a/include/cglm/call.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglm_call_h -#define cglm_call_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "cglm.h" -#include "call/vec2.h" -#include "call/vec3.h" -#include "call/vec4.h" -#include "call/mat2.h" -#include "call/mat3.h" -#include "call/mat4.h" -#include "call/affine.h" -#include "call/cam.h" -#include "call/quat.h" -#include "call/euler.h" -#include "call/plane.h" -#include "call/frustum.h" -#include "call/box.h" -#include "call/io.h" -#include "call/project.h" -#include "call/sphere.h" -#include "call/ease.h" -#include "call/curve.h" -#include "call/bezier.h" -#include "call/ray.h" - -#ifdef __cplusplus -} -#endif -#endif /* cglm_call_h */ diff --git a/include/cglm/call/affine.h b/include/cglm/call/affine.h deleted file mode 100644 index c11405be8..000000000 --- a/include/cglm/call/affine.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_affine_h -#define cglmc_affine_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_translate_make(mat4 m, vec3 v); - -CGLM_EXPORT -void -glmc_translate_to(mat4 m, vec3 v, mat4 dest); - -CGLM_EXPORT -void -glmc_translate(mat4 m, vec3 v); - -CGLM_EXPORT -void -glmc_translate_x(mat4 m, float to); - -CGLM_EXPORT -void -glmc_translate_y(mat4 m, float to); - -CGLM_EXPORT -void -glmc_translate_z(mat4 m, float to); - -CGLM_EXPORT -void -glmc_scale_make(mat4 m, vec3 v); - -CGLM_EXPORT -void -glmc_scale_to(mat4 m, vec3 v, mat4 dest); - -CGLM_EXPORT -void -glmc_scale(mat4 m, vec3 v); - -CGLM_EXPORT -void -glmc_scale_uni(mat4 m, float s); - -CGLM_EXPORT -void -glmc_rotate_x(mat4 m, float rad, mat4 dest); - -CGLM_EXPORT -void -glmc_rotate_y(mat4 m, float rad, mat4 dest); - -CGLM_EXPORT -void -glmc_rotate_z(mat4 m, float rad, mat4 dest); - -CGLM_EXPORT -void -glmc_rotate_make(mat4 m, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_rotate(mat4 m, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_decompose_scalev(mat4 m, vec3 s); - -CGLM_EXPORT -bool -glmc_uniscaled(mat4 m); - -CGLM_EXPORT -void -glmc_decompose_rs(mat4 m, mat4 r, vec3 s); - -CGLM_EXPORT -void -glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s); - -/* affine-mat */ - -CGLM_EXPORT -void -glmc_mul(mat4 m1, mat4 m2, mat4 dest); - -CGLM_EXPORT -void -glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest); - -CGLM_EXPORT -void -glmc_inv_tr(mat4 mat); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_affine_h */ diff --git a/include/cglm/call/bezier.h b/include/cglm/call/bezier.h deleted file mode 100644 index a6a0eb4d7..000000000 --- a/include/cglm/call/bezier.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_bezier_h -#define cglmc_bezier_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -float -glmc_bezier(float s, float p0, float c0, float c1, float p1); - -CGLM_EXPORT -float -glmc_hermite(float s, float p0, float t0, float t1, float p1); - -CGLM_EXPORT -float -glmc_decasteljau(float prm, float p0, float c0, float c1, float p1); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_bezier_h */ diff --git a/include/cglm/call/box.h b/include/cglm/call/box.h deleted file mode 100644 index afb75584a..000000000 --- a/include/cglm/call/box.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_box_h -#define cglmc_box_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]); - -CGLM_EXPORT -void -glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]); - -CGLM_EXPORT -void -glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]); - -CGLM_EXPORT -void -glmc_aabb_crop_until(vec3 box[2], - vec3 cropBox[2], - vec3 clampBox[2], - vec3 dest[2]); - -CGLM_EXPORT -bool -glmc_aabb_frustum(vec3 box[2], vec4 planes[6]); - -CGLM_EXPORT -void -glmc_aabb_invalidate(vec3 box[2]); - -CGLM_EXPORT -bool -glmc_aabb_isvalid(vec3 box[2]); - -CGLM_EXPORT -float -glmc_aabb_size(vec3 box[2]); - -CGLM_EXPORT -float -glmc_aabb_radius(vec3 box[2]); - -CGLM_EXPORT -void -glmc_aabb_center(vec3 box[2], vec3 dest); - -CGLM_EXPORT -bool -glmc_aabb_aabb(vec3 box[2], vec3 other[2]); - -CGLM_EXPORT -bool -glmc_aabb_point(vec3 box[2], vec3 point); - -CGLM_EXPORT -bool -glmc_aabb_contains(vec3 box[2], vec3 other[2]); - -CGLM_EXPORT -bool -glmc_aabb_sphere(vec3 box[2], vec4 s); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_box_h */ - diff --git a/include/cglm/call/cam.h b/include/cglm/call/cam.h deleted file mode 100644 index 017b6fc2c..000000000 --- a/include/cglm/call/cam.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_cam_h -#define cglmc_cam_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_frustum(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, - mat4 dest); - -CGLM_EXPORT -void -glmc_ortho(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, - mat4 dest); - -CGLM_EXPORT -void -glmc_ortho_aabb(vec3 box[2], mat4 dest); - -CGLM_EXPORT -void -glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest); - -CGLM_EXPORT -void -glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest); - -CGLM_EXPORT -void -glmc_ortho_default(float aspect, mat4 dest); - -CGLM_EXPORT -void -glmc_ortho_default_s(float aspect, float size, mat4 dest); - -CGLM_EXPORT -void -glmc_perspective(float fovy, - float aspect, - float nearVal, - float farVal, - mat4 dest); - -CGLM_EXPORT -void -glmc_persp_move_far(mat4 proj, float deltaFar); - -CGLM_EXPORT -void -glmc_perspective_default(float aspect, mat4 dest); - -CGLM_EXPORT -void -glmc_perspective_resize(float aspect, mat4 proj); - -CGLM_EXPORT -void -glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest); - -CGLM_EXPORT -void -glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest); - -CGLM_EXPORT -void -glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest); - -CGLM_EXPORT -void -glmc_persp_decomp(mat4 proj, - float * __restrict nearVal, - float * __restrict farVal, - float * __restrict top, - float * __restrict bottom, - float * __restrict left, - float * __restrict right); - -CGLM_EXPORT -void -glmc_persp_decompv(mat4 proj, float dest[6]); - -CGLM_EXPORT -void -glmc_persp_decomp_x(mat4 proj, - float * __restrict left, - float * __restrict right); - -CGLM_EXPORT -void -glmc_persp_decomp_y(mat4 proj, - float * __restrict top, - float * __restrict bottom); - -CGLM_EXPORT -void -glmc_persp_decomp_z(mat4 proj, - float * __restrict nearVal, - float * __restrict farVal); - -CGLM_EXPORT -void -glmc_persp_decomp_far(mat4 proj, float * __restrict farVal); - -CGLM_EXPORT -void -glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal); - -CGLM_EXPORT -float -glmc_persp_fovy(mat4 proj); - -CGLM_EXPORT -float -glmc_persp_aspect(mat4 proj); - -CGLM_EXPORT -void -glmc_persp_sizes(mat4 proj, float fovy, vec4 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_cam_h */ diff --git a/include/cglm/call/curve.h b/include/cglm/call/curve.h deleted file mode 100644 index 061fdb95c..000000000 --- a/include/cglm/call/curve.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_curve_h -#define cglmc_curve_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -float -glmc_smc(float s, mat4 m, vec4 c); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_curve_h */ diff --git a/include/cglm/call/ease.h b/include/cglm/call/ease.h deleted file mode 100644 index 87e39ca89..000000000 --- a/include/cglm/call/ease.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_ease_h -#define cglmc_ease_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -float -glmc_ease_linear(float t); - -CGLM_EXPORT -float -glmc_ease_sine_in(float t); - -CGLM_EXPORT -float -glmc_ease_sine_out(float t); - -CGLM_EXPORT -float -glmc_ease_sine_inout(float t); - -CGLM_EXPORT -float -glmc_ease_quad_in(float t); - -CGLM_EXPORT -float -glmc_ease_quad_out(float t); - -CGLM_EXPORT -float -glmc_ease_quad_inout(float t); - -CGLM_EXPORT -float -glmc_ease_cubic_in(float t); - -CGLM_EXPORT -float -glmc_ease_cubic_out(float t); - -CGLM_EXPORT -float -glmc_ease_cubic_inout(float t); - -CGLM_EXPORT -float -glmc_ease_quart_in(float t); - -CGLM_EXPORT -float -glmc_ease_quart_out(float t); - -CGLM_EXPORT -float -glmc_ease_quart_inout(float t); - -CGLM_EXPORT -float -glmc_ease_quint_in(float t); - -CGLM_EXPORT -float -glmc_ease_quint_out(float t); - -CGLM_EXPORT -float -glmc_ease_quint_inout(float t); - -CGLM_EXPORT -float -glmc_ease_exp_in(float t); - -CGLM_EXPORT -float -glmc_ease_exp_out(float t); - -CGLM_EXPORT -float -glmc_ease_exp_inout(float t); - -CGLM_EXPORT -float -glmc_ease_circ_in(float t); - -CGLM_EXPORT -float -glmc_ease_circ_out(float t); - -CGLM_EXPORT -float -glmc_ease_circ_inout(float t); - -CGLM_EXPORT -float -glmc_ease_back_in(float t); - -CGLM_EXPORT -float -glmc_ease_back_out(float t); - -CGLM_EXPORT -float -glmc_ease_back_inout(float t); - -CGLM_EXPORT -float -glmc_ease_elast_in(float t); - -CGLM_EXPORT -float -glmc_ease_elast_out(float t); - -CGLM_EXPORT -float -glmc_ease_elast_inout(float t); - -CGLM_EXPORT -float -glmc_ease_bounce_out(float t); - -CGLM_EXPORT -float -glmc_ease_bounce_in(float t); - -CGLM_EXPORT -float -glmc_ease_bounce_inout(float t); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_ease_h */ diff --git a/include/cglm/call/euler.h b/include/cglm/call/euler.h deleted file mode 100644 index 2de68fb88..000000000 --- a/include/cglm/call/euler.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_euler_h -#define cglmc_euler_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_euler_angles(mat4 m, vec3 dest); - -CGLM_EXPORT -void -glmc_euler(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_xyz(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_zyx(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_zxy(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_xzy(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_yzx(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_yxz(vec3 angles, mat4 dest); - -CGLM_EXPORT -void -glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_euler_h */ diff --git a/include/cglm/call/frustum.h b/include/cglm/call/frustum.h deleted file mode 100644 index 6b4facbc4..000000000 --- a/include/cglm/call/frustum.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_frustum_h -#define cglmc_frustum_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_frustum_planes(mat4 m, vec4 dest[6]); - -CGLM_EXPORT -void -glmc_frustum_corners(mat4 invMat, vec4 dest[8]); - -CGLM_EXPORT -void -glmc_frustum_center(vec4 corners[8], vec4 dest); - -CGLM_EXPORT -void -glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]); - -CGLM_EXPORT -void -glmc_frustum_corners_at(vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]); -#ifdef __cplusplus -} -#endif -#endif /* cglmc_frustum_h */ diff --git a/include/cglm/call/io.h b/include/cglm/call/io.h deleted file mode 100644 index b6c50f666..000000000 --- a/include/cglm/call/io.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_io_h -#define cglmc_io_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_mat4_print(mat4 matrix, - FILE * __restrict ostream); - -CGLM_EXPORT -void -glmc_mat3_print(mat3 matrix, - FILE * __restrict ostream); - -CGLM_EXPORT -void -glmc_vec4_print(vec4 vec, - FILE * __restrict ostream); - -CGLM_EXPORT -void -glmc_vec3_print(vec3 vec, - FILE * __restrict ostream); - -CGLM_EXPORT -void -glmc_versor_print(versor vec, - FILE * __restrict ostream); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_io_h */ diff --git a/include/cglm/call/mat2.h b/include/cglm/call/mat2.h deleted file mode 100644 index 91234a328..000000000 --- a/include/cglm/call/mat2.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_mat2_h -#define cglmc_mat2_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_mat2_copy(mat2 mat, mat2 dest); - -CGLM_EXPORT -void -glmc_mat2_identity(mat2 mat); - -CGLM_EXPORT -void -glmc_mat2_identity_array(mat2 * __restrict mat, size_t count); - -CGLM_EXPORT -void -glmc_mat2_zero(mat2 mat); - -CGLM_EXPORT -void -glmc_mat2_mul(mat2 m1, mat2 m2, mat2 dest); - -CGLM_EXPORT -void -glmc_mat2_transpose_to(mat2 m, mat2 dest); - -CGLM_EXPORT -void -glmc_mat2_transpose(mat2 m); - -CGLM_EXPORT -void -glmc_mat2_mulv(mat2 m, vec2 v, vec2 dest); - -CGLM_EXPORT -float -glmc_mat2_trace(mat2 m); - -CGLM_EXPORT -void -glmc_mat2_scale(mat2 m, float s); - -CGLM_EXPORT -float -glmc_mat2_det(mat2 mat); - -CGLM_EXPORT -void -glmc_mat2_inv(mat2 mat, mat2 dest); - -CGLM_EXPORT -void -glmc_mat2_swap_col(mat2 mat, int col1, int col2); - -CGLM_EXPORT -void -glmc_mat2_swap_row(mat2 mat, int row1, int row2); - -CGLM_EXPORT -float -glmc_mat2_rmc(vec2 r, mat2 m, vec2 c); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_mat2_h */ diff --git a/include/cglm/call/mat3.h b/include/cglm/call/mat3.h deleted file mode 100644 index 36dcb27a4..000000000 --- a/include/cglm/call/mat3.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_mat3_h -#define cglmc_mat3_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -/* DEPRECATED! use _copy, _ucopy versions */ -#define glmc_mat3_dup(mat, dest) glmc_mat3_copy(mat, dest) - -CGLM_EXPORT -void -glmc_mat3_copy(mat3 mat, mat3 dest); - -CGLM_EXPORT -void -glmc_mat3_identity(mat3 mat); - -CGLM_EXPORT -void -glmc_mat3_zero(mat3 mat); - -CGLM_EXPORT -void -glmc_mat3_identity_array(mat3 * __restrict mat, size_t count); - -CGLM_EXPORT -void -glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest); - -CGLM_EXPORT -void -glmc_mat3_transpose_to(mat3 m, mat3 dest); - -CGLM_EXPORT -void -glmc_mat3_transpose(mat3 m); - -CGLM_EXPORT -void -glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest); - -CGLM_EXPORT -float -glmc_mat3_trace(mat3 m); - -CGLM_EXPORT -void -glmc_mat3_quat(mat3 m, versor dest); - -CGLM_EXPORT -void -glmc_mat3_scale(mat3 m, float s); - -CGLM_EXPORT -float -glmc_mat3_det(mat3 mat); - -CGLM_EXPORT -void -glmc_mat3_inv(mat3 mat, mat3 dest); - -CGLM_EXPORT -void -glmc_mat3_swap_col(mat3 mat, int col1, int col2); - -CGLM_EXPORT -void -glmc_mat3_swap_row(mat3 mat, int row1, int row2); - -CGLM_EXPORT -float -glmc_mat3_rmc(vec3 r, mat3 m, vec3 c); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_mat3_h */ diff --git a/include/cglm/call/mat4.h b/include/cglm/call/mat4.h deleted file mode 100644 index 1c71da18b..000000000 --- a/include/cglm/call/mat4.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_mat_h -#define cglmc_mat_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -/* DEPRECATED! use _copy, _ucopy versions */ -#define glmc_mat4_udup(mat, dest) glmc_mat4_ucopy(mat, dest) -#define glmc_mat4_dup(mat, dest) glmc_mat4_copy(mat, dest) - -CGLM_EXPORT -void -glmc_mat4_ucopy(mat4 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_copy(mat4 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_identity(mat4 mat); - -CGLM_EXPORT -void -glmc_mat4_identity_array(mat4 * __restrict mat, size_t count); - -CGLM_EXPORT -void -glmc_mat4_zero(mat4 mat); - -CGLM_EXPORT -void -glmc_mat4_pick3(mat4 mat, mat3 dest); - -CGLM_EXPORT -void -glmc_mat4_pick3t(mat4 mat, mat3 dest); - -CGLM_EXPORT -void -glmc_mat4_ins3(mat3 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest); - -CGLM_EXPORT -void -glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest); - -CGLM_EXPORT -float -glmc_mat4_trace(mat4 m); - -CGLM_EXPORT -float -glmc_mat4_trace3(mat4 m); - -CGLM_EXPORT -void -glmc_mat4_quat(mat4 m, versor dest); - -CGLM_EXPORT -void -glmc_mat4_transpose_to(mat4 m, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_transpose(mat4 m); - -CGLM_EXPORT -void -glmc_mat4_scale_p(mat4 m, float s); - -CGLM_EXPORT -void -glmc_mat4_scale(mat4 m, float s); - -CGLM_EXPORT -float -glmc_mat4_det(mat4 mat); - -CGLM_EXPORT -void -glmc_mat4_inv(mat4 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_inv_precise(mat4 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_inv_fast(mat4 mat, mat4 dest); - -CGLM_EXPORT -void -glmc_mat4_swap_col(mat4 mat, int col1, int col2); - -CGLM_EXPORT -void -glmc_mat4_swap_row(mat4 mat, int row1, int row2); - -CGLM_EXPORT -float -glmc_mat4_rmc(vec4 r, mat4 m, vec4 c); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_mat_h */ diff --git a/include/cglm/call/plane.h b/include/cglm/call/plane.h deleted file mode 100644 index f991121bb..000000000 --- a/include/cglm/call/plane.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_plane_h -#define cglmc_plane_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_plane_normalize(vec4 plane); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_plane_h */ diff --git a/include/cglm/call/project.h b/include/cglm/call/project.h deleted file mode 100644 index 35ac08711..000000000 --- a/include/cglm/call/project.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_project_h -#define cglmc_project_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest); - -CGLM_EXPORT -void -glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest); - -CGLM_EXPORT -void -glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_project_h */ - - diff --git a/include/cglm/call/quat.h b/include/cglm/call/quat.h deleted file mode 100644 index 32e503c16..000000000 --- a/include/cglm/call/quat.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_quat_h -#define cglmc_quat_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_quat_identity(versor q); - -CGLM_EXPORT -void -glmc_quat_identity_array(versor * __restrict q, size_t count); - -CGLM_EXPORT -void -glmc_quat_init(versor q, float x, float y, float z, float w); - -CGLM_EXPORT -void -glmc_quat(versor q, float angle, float x, float y, float z); - -CGLM_EXPORT -void -glmc_quatv(versor q, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_quat_copy(versor q, versor dest); - -CGLM_EXPORT -float -glmc_quat_norm(versor q); - -CGLM_EXPORT -void -glmc_quat_normalize_to(versor q, versor dest); - -CGLM_EXPORT -void -glmc_quat_normalize(versor q); - -CGLM_EXPORT -float -glmc_quat_dot(versor p, versor q); - -CGLM_EXPORT -void -glmc_quat_conjugate(versor q, versor dest); - -CGLM_EXPORT -void -glmc_quat_inv(versor q, versor dest); - -CGLM_EXPORT -void -glmc_quat_add(versor p, versor q, versor dest); - -CGLM_EXPORT -void -glmc_quat_sub(versor p, versor q, versor dest); - -CGLM_EXPORT -float -glmc_quat_real(versor q); - -CGLM_EXPORT -void -glmc_quat_imag(versor q, vec3 dest); - -CGLM_EXPORT -void -glmc_quat_imagn(versor q, vec3 dest); - -CGLM_EXPORT -float -glmc_quat_imaglen(versor q); - -CGLM_EXPORT -float -glmc_quat_angle(versor q); - -CGLM_EXPORT -void -glmc_quat_axis(versor q, vec3 dest); - -CGLM_EXPORT -void -glmc_quat_mul(versor p, versor q, versor dest); - -CGLM_EXPORT -void -glmc_quat_mat4(versor q, mat4 dest); - -CGLM_EXPORT -void -glmc_quat_mat4t(versor q, mat4 dest); - -CGLM_EXPORT -void -glmc_quat_mat3(versor q, mat3 dest); - -CGLM_EXPORT -void -glmc_quat_mat3t(versor q, mat3 dest); - -CGLM_EXPORT -void -glmc_quat_lerp(versor from, versor to, float t, versor dest); - -CGLM_EXPORT -void -glmc_quat_lerpc(versor from, versor to, float t, versor dest); - -CGLM_EXPORT -void -glmc_quat_slerp(versor q, versor r, float t, versor dest); - -CGLM_EXPORT -void -glmc_quat_look(vec3 eye, versor ori, mat4 dest); - -CGLM_EXPORT -void -glmc_quat_for(vec3 dir, vec3 up, versor dest); - -CGLM_EXPORT -void -glmc_quat_forp(vec3 from, vec3 to, vec3 up, versor dest); - -CGLM_EXPORT -void -glmc_quat_rotatev(versor from, vec3 to, vec3 dest); - -CGLM_EXPORT -void -glmc_quat_rotate(mat4 m, versor q, mat4 dest); - -CGLM_EXPORT -void -glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot); - -CGLM_EXPORT -void -glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_quat_h */ diff --git a/include/cglm/call/ray.h b/include/cglm/call/ray.h deleted file mode 100644 index 1fff0554c..000000000 --- a/include/cglm/call/ray.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_ray_h -#define cglmc_ray_h -#ifdef __cplusplus -extern "C" { -#endif -#include "../cglm.h" - -CGLM_EXPORT -bool -glmc_ray_triangle(vec3 origin, - vec3 direction, - vec3 v0, - vec3 v1, - vec3 v2, - float *d); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_ray_h */ diff --git a/include/cglm/call/sphere.h b/include/cglm/call/sphere.h deleted file mode 100644 index 9b9654684..000000000 --- a/include/cglm/call/sphere.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_sphere_h -#define cglmc_sphere_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -float -glmc_sphere_radii(vec4 s); - -CGLM_EXPORT -void -glmc_sphere_transform(vec4 s, mat4 m, vec4 dest); - -CGLM_EXPORT -void -glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest); - -CGLM_EXPORT -bool -glmc_sphere_sphere(vec4 s1, vec4 s2); - -CGLM_EXPORT -bool -glmc_sphere_point(vec4 s, vec3 point); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_sphere_h */ diff --git a/include/cglm/call/vec2.h b/include/cglm/call/vec2.h deleted file mode 100644 index d4d3396b8..000000000 --- a/include/cglm/call/vec2.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_vec2_h -#define cglmc_vec2_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -CGLM_EXPORT -void -glmc_vec2(float * __restrict v, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_copy(vec2 a, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_zero(vec2 v); - -CGLM_EXPORT -void -glmc_vec2_one(vec2 v); - -CGLM_EXPORT -float -glmc_vec2_dot(vec2 a, vec2 b); - -CGLM_EXPORT -float -glmc_vec2_cross(vec2 a, vec2 b); - -CGLM_EXPORT -float -glmc_vec2_norm2(vec2 v); - -CGLM_EXPORT -float -glmc_vec2_norm(vec2 v); - -CGLM_EXPORT -void -glmc_vec2_add(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_adds(vec2 v, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_sub(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_subs(vec2 v, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_mul(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_scale(vec2 v, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_scale_as(vec2 v, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_div(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_divs(vec2 v, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_addadd(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_subadd(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_muladd(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_muladds(vec2 a, float s, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_maxadd(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_negate_to(vec2 v, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_negate(vec2 v); - -CGLM_EXPORT -void -glmc_vec2_normalize(vec2 v); - -CGLM_EXPORT -void -glmc_vec2_normalize_to(vec2 v, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_rotate(vec2 v, float angle, vec2 dest); - -CGLM_EXPORT -float -glmc_vec2_distance2(vec2 a, vec2 b); - -CGLM_EXPORT -float -glmc_vec2_distance(vec2 a, vec2 b); - -CGLM_EXPORT -void -glmc_vec2_maxv(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_minv(vec2 a, vec2 b, vec2 dest); - -CGLM_EXPORT -void -glmc_vec2_clamp(vec2 v, float minval, float maxval); - -CGLM_EXPORT -void -glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_vec2_h */ diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h deleted file mode 100644 index 69fc0e2ff..000000000 --- a/include/cglm/call/vec3.h +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_vec3_h -#define cglmc_vec3_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -/* DEPRECATED! use _copy, _ucopy versions */ -#define glmc_vec_dup(v, dest) glmc_vec3_copy(v, dest) -#define glmc_vec3_flipsign(v) glmc_vec3_negate(v) -#define glmc_vec3_flipsign_to(v, dest) glmc_vec3_negate_to(v, dest) -#define glmc_vec3_inv(v) glmc_vec3_negate(v) -#define glmc_vec3_inv_to(v, dest) glmc_vec3_negate_to(v, dest) - -CGLM_EXPORT -void -glmc_vec3(vec4 v4, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_copy(vec3 a, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_zero(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_one(vec3 v); - -CGLM_EXPORT -float -glmc_vec3_dot(vec3 a, vec3 b); - -CGLM_EXPORT -void -glmc_vec3_cross(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -float -glmc_vec3_norm(vec3 v); - -CGLM_EXPORT -float -glmc_vec3_norm2(vec3 v); - -CGLM_EXPORT -float -glmc_vec3_norm_one(vec3 v); - -CGLM_EXPORT -float -glmc_vec3_norm_inf(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_normalize_to(vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_normalize(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_add(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_adds(vec3 v, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_sub(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_subs(vec3 v, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_mul(vec3 a, vec3 b, vec3 d); - -CGLM_EXPORT -void -glmc_vec3_scale(vec3 v, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_scale_as(vec3 v, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_div(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_divs(vec3 a, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_muladds(vec3 a, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_negate(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_negate_to(vec3 v, vec3 dest); - -CGLM_EXPORT -float -glmc_vec3_angle(vec3 a, vec3 b); - -CGLM_EXPORT -void -glmc_vec3_rotate(vec3 v, float angle, vec3 axis); - -CGLM_EXPORT -void -glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_proj(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_center(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -float -glmc_vec3_distance2(vec3 a, vec3 b); - -CGLM_EXPORT -float -glmc_vec3_distance(vec3 a, vec3 b); - -CGLM_EXPORT -void -glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_minv(vec3 a, vec3 b, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_clamp(vec3 v, float minVal, float maxVal); - -CGLM_EXPORT -void -glmc_vec3_ortho(vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest); - -CGLM_INLINE -void -glmc_vec3_mix(vec3 from, vec3 to, float t, vec3 dest) { - glmc_vec3_lerp(from, to, t, dest); -} - -CGLM_INLINE -void -glmc_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest) { - glmc_vec3_lerpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec3_step_uni(float edge, vec3 x, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_step(vec3 edge, vec3 x, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest); - -/* ext */ - -CGLM_EXPORT -void -glmc_vec3_mulv(vec3 a, vec3 b, vec3 d); - -CGLM_EXPORT -void -glmc_vec3_broadcast(float val, vec3 d); - -CGLM_EXPORT -void -glmc_vec3_fill(vec3 v, float val); - -CGLM_EXPORT -bool -glmc_vec3_eq(vec3 v, float val); - -CGLM_EXPORT -bool -glmc_vec3_eq_eps(vec3 v, float val); - -CGLM_EXPORT -bool -glmc_vec3_eq_all(vec3 v); - -CGLM_EXPORT -bool -glmc_vec3_eqv(vec3 a, vec3 b); - -CGLM_EXPORT -bool -glmc_vec3_eqv_eps(vec3 a, vec3 b); - -CGLM_EXPORT -float -glmc_vec3_max(vec3 v); - -CGLM_EXPORT -float -glmc_vec3_min(vec3 v); - -CGLM_EXPORT -bool -glmc_vec3_isnan(vec3 v); - -CGLM_EXPORT -bool -glmc_vec3_isinf(vec3 v); - -CGLM_EXPORT -bool -glmc_vec3_isvalid(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_sign(vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_abs(vec3 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec3_fract(vec3 v, vec3 dest); - -CGLM_EXPORT -float -glmc_vec3_hadd(vec3 v); - -CGLM_EXPORT -void -glmc_vec3_sqrt(vec3 v, vec3 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_vec3_h */ diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h deleted file mode 100644 index 28a3734d6..000000000 --- a/include/cglm/call/vec4.h +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#ifndef cglmc_vec4_h -#define cglmc_vec4_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "../cglm.h" - -/* DEPRECATED! use _copy, _ucopy versions */ -#define glmc_vec4_dup3(v, dest) glmc_vec4_copy3(v, dest) -#define glmc_vec4_dup(v, dest) glmc_vec4_copy(v, dest) -#define glmc_vec4_flipsign(v) glmc_vec4_negate(v) -#define glmc_vec4_flipsign_to(v, dest) glmc_vec4_negate_to(v, dest) -#define glmc_vec4_inv(v) glmc_vec4_negate(v) -#define glmc_vec4_inv_to(v, dest) glmc_vec4_negate_to(v, dest) - -CGLM_EXPORT -void -glmc_vec4(vec3 v3, float last, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_zero(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_one(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_copy3(vec4 v, vec3 dest); - -CGLM_EXPORT -void -glmc_vec4_copy(vec4 v, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_ucopy(vec4 v, vec4 dest); - -CGLM_EXPORT -float -glmc_vec4_dot(vec4 a, vec4 b); - -CGLM_EXPORT -float -glmc_vec4_norm(vec4 v); - -CGLM_EXPORT -float -glmc_vec4_norm2(vec4 v); - -CGLM_EXPORT -float -glmc_vec4_norm_one(vec4 v); - -CGLM_EXPORT -float -glmc_vec4_norm_inf(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_normalize_to(vec4 v, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_normalize(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_add(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_adds(vec4 v, float s, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_sub(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_subs(vec4 v, float s, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_mul(vec4 a, vec4 b, vec4 d); - -CGLM_EXPORT -void -glmc_vec4_scale(vec4 v, float s, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_scale_as(vec3 v, float s, vec3 dest); - -CGLM_EXPORT -void -glmc_vec4_div(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_divs(vec4 v, float s, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_muladds(vec4 a, float s, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_negate(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_negate_to(vec4 v, vec4 dest); - -CGLM_EXPORT -float -glmc_vec4_distance(vec4 a, vec4 b); - -CGLM_EXPORT -float -glmc_vec4_distance2(vec4 a, vec4 b); - -CGLM_EXPORT -void -glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_minv(vec4 a, vec4 b, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_clamp(vec4 v, float minVal, float maxVal); - -CGLM_EXPORT -void -glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest); - -CGLM_INLINE -void -glmc_vec4_mix(vec4 from, vec4 to, float t, vec4 dest) { - glmc_vec4_lerp(from, to, t, dest); -} - -CGLM_INLINE -void -glmc_vec4_mixc(vec4 from, vec4 to, float t, vec4 dest) { - glmc_vec4_lerpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec4_step_uni(float edge, vec4 x, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_step(vec4 edge, vec4 x, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_cubic(float s, vec4 dest); - -/* ext */ - -CGLM_EXPORT -void -glmc_vec4_mulv(vec4 a, vec4 b, vec4 d); - -CGLM_EXPORT -void -glmc_vec4_broadcast(float val, vec4 d); - -CGLM_EXPORT -void -glmc_vec4_fill(vec4 v, float val); - -CGLM_EXPORT -bool -glmc_vec4_eq(vec4 v, float val); - -CGLM_EXPORT -bool -glmc_vec4_eq_eps(vec4 v, float val); - -CGLM_EXPORT -bool -glmc_vec4_eq_all(vec4 v); - -CGLM_EXPORT -bool -glmc_vec4_eqv(vec4 a, vec4 b); - -CGLM_EXPORT -bool -glmc_vec4_eqv_eps(vec4 a, vec4 b); - -CGLM_EXPORT -float -glmc_vec4_max(vec4 v); - -CGLM_EXPORT -float -glmc_vec4_min(vec4 v); - -CGLM_EXPORT -bool -glmc_vec4_isnan(vec4 v); - -CGLM_EXPORT -bool -glmc_vec4_isinf(vec4 v); - -CGLM_EXPORT -bool -glmc_vec4_isvalid(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_sign(vec4 v, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_abs(vec4 v, vec4 dest); - -CGLM_EXPORT -void -glmc_vec4_fract(vec4 v, vec4 dest); - -CGLM_EXPORT -float -glmc_vec4_hadd(vec4 v); - -CGLM_EXPORT -void -glmc_vec4_sqrt(vec4 v, vec4 dest); - -#ifdef __cplusplus -} -#endif -#endif /* cglmc_vec4_h */ - diff --git a/include/cglm/cam.h b/include/cglm/cam.h index bbe7fec64..e49159bd4 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -7,42 +7,42 @@ /* Functions: - CGLM_INLINE void glm_frustum(float left, float right, + CGLM_DECL void glm_frustum(float left, float right, float bottom, float top, float nearVal, float farVal, mat4 dest) - CGLM_INLINE void glm_ortho(float left, float right, + CGLM_DECL void glm_ortho(float left, float right, float bottom, float top, float nearVal, float farVal, mat4 dest) - CGLM_INLINE void glm_ortho_aabb(vec3 box[2], mat4 dest) - CGLM_INLINE void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) - CGLM_INLINE void glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) - CGLM_INLINE void glm_ortho_default(float aspect, mat4 dest) - CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest) - CGLM_INLINE void glm_perspective(float fovy, + CGLM_DECL void glm_ortho_aabb(vec3 box[2], mat4 dest) + CGLM_DECL void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) + CGLM_DECL void glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) + CGLM_DECL void glm_ortho_default(float aspect, mat4 dest) + CGLM_DECL void glm_ortho_default_s(float aspect, float size, mat4 dest) + CGLM_DECL void glm_perspective(float fovy, float aspect, float nearVal, float farVal, mat4 dest) - CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest) - CGLM_INLINE void glm_perspective_resize(float aspect, mat4 proj) - CGLM_INLINE void glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) - CGLM_INLINE void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) - CGLM_INLINE void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) - CGLM_INLINE void glm_persp_decomp(mat4 proj, + CGLM_DECL void glm_perspective_default(float aspect, mat4 dest) + CGLM_DECL void glm_perspective_resize(float aspect, mat4 proj) + CGLM_DECL void glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) + CGLM_DECL void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) + CGLM_DECL void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) + CGLM_DECL void glm_persp_decomp(mat4 proj, float *nearVal, float *farVal, float *top, float *bottom, float *left, float *right) - CGLM_INLINE void glm_persp_decompv(mat4 proj, float dest[6]) - CGLM_INLINE void glm_persp_decomp_x(mat4 proj, float *left, float *right) - CGLM_INLINE void glm_persp_decomp_y(mat4 proj, float *top, float *bottom) - CGLM_INLINE void glm_persp_decomp_z(mat4 proj, float *nearv, float *farv) - CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farVal) - CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearVal) - CGLM_INLINE float glm_persp_fovy(mat4 proj) - CGLM_INLINE float glm_persp_aspect(mat4 proj) - CGLM_INLINE void glm_persp_sizes(mat4 proj, float fovy, vec4 dest) + CGLM_DECL void glm_persp_decompv(mat4 proj, float dest[6]) + CGLM_DECL void glm_persp_decomp_x(mat4 proj, float *left, float *right) + CGLM_DECL void glm_persp_decomp_y(mat4 proj, float *top, float *bottom) + CGLM_DECL void glm_persp_decomp_z(mat4 proj, float *nearv, float *farv) + CGLM_DECL void glm_persp_decomp_far(mat4 proj, float *farVal) + CGLM_DECL void glm_persp_decomp_near(mat4 proj, float *nearVal) + CGLM_DECL float glm_persp_fovy(mat4 proj) + CGLM_DECL float glm_persp_aspect(mat4 proj) + CGLM_DECL void glm_persp_sizes(mat4 proj, float fovy, vec4 dest) */ #ifndef cglm_vcam_h @@ -62,12 +62,14 @@ * @param[in] farVal far clipping plane * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void glm_frustum(float left, float right, float bottom, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float rl, tb, fn, nv; glm_mat4_zero(dest); @@ -85,6 +87,7 @@ glm_frustum(float left, float right, dest[2][3] =-1.0f; dest[3][2] = farVal * nv * fn; } +#endif /*! * @brief set up orthographic projection matrix @@ -97,12 +100,14 @@ glm_frustum(float left, float right, * @param[in] farVal far clipping plane * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void glm_ortho(float left, float right, float bottom, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float rl, tb, fn; glm_mat4_zero(dest); @@ -119,6 +124,7 @@ glm_ortho(float left, float right, dest[3][2] = (farVal + nearVal) * fn; dest[3][3] = 1.0f; } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -128,14 +134,17 @@ glm_ortho(float left, float right, * @param[in] box AABB * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_ortho_aabb(vec3 box[2], mat4 dest) { +glm_ortho_aabb(vec3 box[2], mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -box[1][2], -box[0][2], dest); } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -146,14 +155,17 @@ glm_ortho_aabb(vec3 box[2], mat4 dest) { * @param[in] padding padding * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_ortho(box[0][0] - padding, box[1][0] + padding, box[0][1] - padding, box[1][1] + padding, -(box[1][2] + padding), -(box[0][2] - padding), dest); } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -164,14 +176,17 @@ glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { * @param[in] padding padding for near and far * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -(box[1][2] + padding), -(box[0][2] - padding), dest); } +#endif /*! * @brief set up unit orthographic projection matrix @@ -179,9 +194,11 @@ glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { * @param[in] aspect aspect ration ( width / height ) * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_ortho_default(float aspect, mat4 dest) { +glm_ortho_default(float aspect, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ if (aspect >= 1.0f) { glm_ortho(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest); return; @@ -191,6 +208,7 @@ glm_ortho_default(float aspect, mat4 dest) { glm_ortho(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest); } +#endif /*! * @brief set up orthographic projection matrix with given CUBE size @@ -199,9 +217,11 @@ glm_ortho_default(float aspect, mat4 dest) { * @param[in] size cube size * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_ortho_default_s(float aspect, float size, mat4 dest) { +glm_ortho_default_s(float aspect, float size, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ if (aspect >= 1.0f) { glm_ortho(-size * aspect, size * aspect, @@ -221,6 +241,7 @@ glm_ortho_default_s(float aspect, float size, mat4 dest) { size + 100.0f, dest); } +#endif /*! * @brief set up perspective projection matrix @@ -231,13 +252,15 @@ glm_ortho_default_s(float aspect, float size, mat4 dest) { * @param[in] farVal far clipping planes * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void glm_perspective(float fovy, float aspect, float nearVal, float farVal, - mat4 dest) { + mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float f, fn; glm_mat4_zero(dest); @@ -251,6 +274,7 @@ glm_perspective(float fovy, dest[2][3] =-1.0f; dest[3][2] = 2.0f * nearVal * farVal * fn; } +#endif /*! * @brief extend perspective projection matrix's far distance @@ -260,9 +284,11 @@ glm_perspective(float fovy, * @param[in, out] proj projection matrix to extend * @param[in] deltaFar distance from existing far (negative to shink) */ -CGLM_INLINE +CGLM_DECL void -glm_persp_move_far(mat4 proj, float deltaFar) { +glm_persp_move_far(mat4 proj, float deltaFar) CGLM_ENDD +#ifndef CGLM_LIB +{ float fn, farVal, nearVal, p22, p32; p22 = proj[2][2]; @@ -275,6 +301,7 @@ glm_persp_move_far(mat4 proj, float deltaFar) { proj[2][2] = (nearVal + farVal) * fn; proj[3][2] = 2.0f * nearVal * farVal * fn; } +#endif /*! * @brief set up perspective projection matrix with default near/far @@ -283,11 +310,14 @@ glm_persp_move_far(mat4 proj, float deltaFar) { * @param[in] aspect aspect ratio ( width / height ) * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_perspective_default(float aspect, mat4 dest) { +glm_perspective_default(float aspect, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_perspective(GLM_PI_4f, aspect, 0.01f, 100.0f, dest); } +#endif /*! * @brief resize perspective matrix by aspect ratio ( width / height ) @@ -297,14 +327,17 @@ glm_perspective_default(float aspect, mat4 dest) { * @param[in] aspect aspect ratio ( width / height ) * @param[in, out] proj perspective projection matrix */ -CGLM_INLINE +CGLM_DECL void -glm_perspective_resize(float aspect, mat4 proj) { +glm_perspective_resize(float aspect, mat4 proj) CGLM_ENDD +#ifndef CGLM_LIB +{ if (proj[0][0] == 0.0f) return; proj[0][0] = proj[1][1] / aspect; } +#endif /*! * @brief set up view matrix @@ -317,9 +350,11 @@ glm_perspective_resize(float aspect, mat4 proj) { * @param[in] up up vector * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) { +glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 f, u, s; glm_vec3_sub(center, eye, f); @@ -343,6 +378,7 @@ glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) { dest[0][3] = dest[1][3] = dest[2][3] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief set up view matrix @@ -358,13 +394,16 @@ glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) { * @param[in] up up vector * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { +glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 target; glm_vec3_add(eye, dir, target); glm_lookat(eye, target, up, dest); } +#endif /*! * @brief set up view matrix @@ -376,13 +415,16 @@ glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { * @param[in] dir direction vector * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { +glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 up; glm_vec3_ortho(dir, up); glm_look(eye, dir, up, dest); } +#endif /*! * @brief decomposes frustum values of perspective projection. @@ -395,12 +437,14 @@ glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { * @param[out] left left * @param[out] right right */ -CGLM_INLINE +CGLM_DECL void glm_persp_decomp(mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, float * __restrict bottom, - float * __restrict left, float * __restrict right) { + float * __restrict left, float * __restrict right) CGLM_ENDD +#ifndef CGLM_LIB +{ float m00, m11, m20, m21, m22, m32, n, f; float n_m11, n_m00; @@ -424,6 +468,7 @@ glm_persp_decomp(mat4 proj, *left = n_m00 * (m20 - 1.0f); *right = n_m00 * (m20 + 1.0f); } +#endif /*! * @brief decomposes frustum values of perspective projection. @@ -432,12 +477,15 @@ glm_persp_decomp(mat4 proj, * @param[in] proj perspective projection matrix * @param[out] dest array */ -CGLM_INLINE +CGLM_DECL void -glm_persp_decompv(mat4 proj, float dest[6]) { +glm_persp_decompv(mat4 proj, float dest[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2], &dest[3], &dest[4], &dest[5]); } +#endif /*! * @brief decomposes left and right values of perspective projection. @@ -447,11 +495,13 @@ glm_persp_decompv(mat4 proj, float dest[6]) { * @param[out] left left * @param[out] right right */ -CGLM_INLINE +CGLM_DECL void glm_persp_decomp_x(mat4 proj, float * __restrict left, - float * __restrict right) { + float * __restrict right) CGLM_ENDD +#ifndef CGLM_LIB +{ float nearVal, m20, m00; m00 = proj[0][0]; @@ -461,6 +511,7 @@ glm_persp_decomp_x(mat4 proj, *left = nearVal * (m20 - 1.0f) / m00; *right = nearVal * (m20 + 1.0f) / m00; } +#endif /*! * @brief decomposes top and bottom values of perspective projection. @@ -470,11 +521,13 @@ glm_persp_decomp_x(mat4 proj, * @param[out] top top * @param[out] bottom bottom */ -CGLM_INLINE +CGLM_DECL void glm_persp_decomp_y(mat4 proj, float * __restrict top, - float * __restrict bottom) { + float * __restrict bottom) CGLM_ENDD +#ifndef CGLM_LIB +{ float nearVal, m21, m11; m21 = proj[2][1]; @@ -484,6 +537,7 @@ glm_persp_decomp_y(mat4 proj, *bottom = nearVal * (m21 - 1) / m11; *top = nearVal * (m21 + 1) / m11; } +#endif /*! * @brief decomposes near and far values of perspective projection. @@ -493,11 +547,13 @@ glm_persp_decomp_y(mat4 proj, * @param[out] nearVal near * @param[out] farVal far */ -CGLM_INLINE +CGLM_DECL void glm_persp_decomp_z(mat4 proj, float * __restrict nearVal, - float * __restrict farVal) { + float * __restrict farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ float m32, m22; m32 = proj[3][2]; @@ -506,6 +562,7 @@ glm_persp_decomp_z(mat4 proj, *nearVal = m32 / (m22 - 1.0f); *farVal = m32 / (m22 + 1.0f); } +#endif /*! * @brief decomposes far value of perspective projection. @@ -513,11 +570,14 @@ glm_persp_decomp_z(mat4 proj, * @param[in] proj perspective projection matrix * @param[out] farVal far */ -CGLM_INLINE +CGLM_DECL void -glm_persp_decomp_far(mat4 proj, float * __restrict farVal) { +glm_persp_decomp_far(mat4 proj, float * __restrict farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ *farVal = proj[3][2] / (proj[2][2] + 1.0f); } +#endif /*! * @brief decomposes near value of perspective projection. @@ -525,11 +585,14 @@ glm_persp_decomp_far(mat4 proj, float * __restrict farVal) { * @param[in] proj perspective projection matrix * @param[out] nearVal near */ -CGLM_INLINE +CGLM_DECL void -glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) { +glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) CGLM_ENDD +#ifndef CGLM_LIB +{ *nearVal = proj[3][2] / (proj[2][2] - 1.0f); } +#endif /*! * @brief returns field of view angle along the Y-axis (in radians) @@ -539,22 +602,28 @@ glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) { * * @param[in] proj perspective projection matrix */ -CGLM_INLINE +CGLM_DECL float -glm_persp_fovy(mat4 proj) { +glm_persp_fovy(mat4 proj) CGLM_ENDD +#ifndef CGLM_LIB +{ return 2.0f * atanf(1.0f / proj[1][1]); } +#endif /*! * @brief returns aspect ratio of perspective projection * * @param[in] proj perspective projection matrix */ -CGLM_INLINE +CGLM_DECL float -glm_persp_aspect(mat4 proj) { +glm_persp_aspect(mat4 proj) CGLM_ENDD +#ifndef CGLM_LIB +{ return proj[1][1] / proj[0][0]; } +#endif /*! * @brief returns sizes of near and far planes of perspective projection @@ -563,9 +632,11 @@ glm_persp_aspect(mat4 proj) { * @param[in] fovy fovy (see brief) * @param[out] dest sizes order: [Wnear, Hnear, Wfar, Hfar] */ -CGLM_INLINE +CGLM_DECL void -glm_persp_sizes(mat4 proj, float fovy, vec4 dest) { +glm_persp_sizes(mat4 proj, float fovy, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float t, a, nearVal, farVal; t = 2.0f * tanf(fovy * 0.5f); @@ -578,5 +649,6 @@ glm_persp_sizes(mat4 proj, float fovy, vec4 dest) { dest[0] = a * dest[1]; dest[2] = a * dest[3]; } +#endif #endif /* cglm_vcam_h */ diff --git a/include/cglm/color.h b/include/cglm/color.h index 69566ad2e..e28db7e37 100644 --- a/include/cglm/color.h +++ b/include/cglm/color.h @@ -16,11 +16,14 @@ * * @param[in] rgb RGB color */ -CGLM_INLINE +CGLM_DECL float -glm_luminance(vec3 rgb) { +glm_luminance(vec3 rgb) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 l = {0.212671f, 0.715160f, 0.072169f}; return glm_dot(rgb, l); } +#endif #endif /* cglm_color_h */ diff --git a/include/cglm/common.h b/include/cglm/common.h index 83d54be38..f73821c70 100644 --- a/include/cglm/common.h +++ b/include/cglm/common.h @@ -16,16 +16,36 @@ #include #include +#if defined(_WIN32) /* Win32/64, incl MSVC, Tiny C, MinGW/Cygwin GCC */ + #if defined(CGLM_DLL) + #define CGLM_EXPORT __declspec(dllexport) + #else + #define CGLM_EXPORT __declspec(dllimport) + #endif +#elif defined(__GNUC__) && defined(CGLM_DLL) + #define CGLM_EXPORT __attribute__((visibility ("default"))) +#else + #define CGLM_EXPORT +#endif + #if defined(_MSC_VER) -# ifdef CGLM_DLL -# define CGLM_EXPORT __declspec(dllexport) -# else -# define CGLM_EXPORT __declspec(dllimport) -# endif -# define CGLM_INLINE __forceinline + #define CGLM_INLINE __forceinline +#elif defined(__GNUC__) + #define CGLM_INLINE static inline __attribute((always_inline)) +#else + #define CGLM_INLINE static inline +#endif + +#if defined(CGLM_LIB) && !defined(CGLM_DLL) + #define CGLM_ENDD ; +#else + #define CGLM_ENDD +#endif + +#if defined(CGLM_LIB) || defined(CGLM_DLL) +# define CGLM_DECL CGLM_EXPORT #else -# define CGLM_EXPORT __attribute__((visibility("default"))) -# define CGLM_INLINE static inline __attribute((always_inline)) +# define CGLM_DECL CGLM_INLINE #endif #define GLM_SHUFFLE4(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w)) diff --git a/include/cglm/curve.h b/include/cglm/curve.h index 5033be500..690f5c294 100644 --- a/include/cglm/curve.h +++ b/include/cglm/curve.h @@ -29,12 +29,15 @@ * * @return B(s) */ -CGLM_INLINE +CGLM_DECL float -glm_smc(float s, mat4 m, vec4 c) { +glm_smc(float s, mat4 m, vec4 c) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 vs; glm_vec4_cubic(s, vs); return glm_mat4_rmc(vs, m, c); } +#endif #endif /* cglm_curve_h */ diff --git a/include/cglm/ease.h b/include/cglm/ease.h index b40b75e3b..b1b6f18d2 100644 --- a/include/cglm/ease.h +++ b/include/cglm/ease.h @@ -10,45 +10,65 @@ #include "common.h" -CGLM_INLINE +CGLM_DECL float -glm_ease_linear(float t) { +glm_ease_linear(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return t; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_sine_in(float t) { +glm_ease_sine_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return sinf((t - 1.0f) * GLM_PI_2f) + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_sine_out(float t) { +glm_ease_sine_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return sinf(t * GLM_PI_2f); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_sine_inout(float t) { +glm_ease_sine_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return 0.5f * (1.0f - cosf(t * GLM_PIf)); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quad_in(float t) { +glm_ease_quad_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return t * t; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quad_out(float t) { +glm_ease_quad_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return -(t * (t - 2.0f)); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quad_inout(float t) { +glm_ease_quad_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float tt; tt = t * t; @@ -57,24 +77,33 @@ glm_ease_quad_inout(float t) { return (-2.0f * tt) + (4.0f * t) - 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_cubic_in(float t) { +glm_ease_cubic_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return t * t * t; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_cubic_out(float t) { +glm_ease_cubic_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f; f = t - 1.0f; return f * f * f + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_cubic_inout(float t) { +glm_ease_cubic_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f; if (t < 0.5f) @@ -84,28 +113,37 @@ glm_ease_cubic_inout(float t) { return 0.5f * f * f * f + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quart_in(float t) { +glm_ease_quart_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f; f = t * t; return f * f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quart_out(float t) { +glm_ease_quart_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f; f = t - 1.0f; return f * f * f * (1.0f - t) + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quart_inout(float t) { +glm_ease_quart_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f, g; if (t < 0.5f) { @@ -118,18 +156,24 @@ glm_ease_quart_inout(float t) { return -8.0f * g * g + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quint_in(float t) { +glm_ease_quint_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f; f = t * t; return f * f * t; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quint_out(float t) { +glm_ease_quint_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f, g; f = t - 1.0f; @@ -137,10 +181,13 @@ glm_ease_quint_out(float t) { return g * g * f + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_quint_inout(float t) { +glm_ease_quint_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float f, g; if (t < 0.5f) { @@ -153,28 +200,37 @@ glm_ease_quint_inout(float t) { return 0.5f * g * g * f + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_exp_in(float t) { +glm_ease_exp_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ if (t == 0.0f) return t; return powf(2.0f, 10.0f * (t - 1.0f)); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_exp_out(float t) { +glm_ease_exp_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ if (t == 1.0f) return t; return 1.0f - powf(2.0f, -10.0f * t); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_exp_inout(float t) { +glm_ease_exp_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ if (t == 0.0f || t == 1.0f) return t; @@ -183,31 +239,43 @@ glm_ease_exp_inout(float t) { return -0.5f * powf(2.0f, (-20.0f * t) + 10.0f) + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_circ_in(float t) { +glm_ease_circ_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return 1.0f - sqrtf(1.0f - (t * t)); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_circ_out(float t) { +glm_ease_circ_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return sqrtf((2.0f - t) * t); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_circ_inout(float t) { +glm_ease_circ_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ if (t < 0.5f) return 0.5f * (1.0f - sqrtf(1.0f - 4.0f * (t * t))); return 0.5f * (sqrtf(-((2.0f * t) - 3.0f) * ((2.0f * t) - 1.0f)) + 1.0f); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_back_in(float t) { +glm_ease_back_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float o, z; o = 1.70158f; @@ -215,10 +283,13 @@ glm_ease_back_in(float t) { return t * t * z; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_back_out(float t) { +glm_ease_back_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float o, z, n; o = 1.70158f; @@ -227,10 +298,13 @@ glm_ease_back_out(float t) { return n * n * z + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_back_inout(float t) { +glm_ease_back_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float o, z, n, m, s, x; o = 1.70158f; @@ -250,22 +324,31 @@ glm_ease_back_inout(float t) { return x * m; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_elast_in(float t) { +glm_ease_elast_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return sinf(13.0f * GLM_PI_2f * t) * powf(2.0f, 10.0f * (t - 1.0f)); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_elast_out(float t) { +glm_ease_elast_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return sinf(-13.0f * GLM_PI_2f * (t + 1.0f)) * powf(2.0f, -10.0f * t) + 1.0f; } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_elast_inout(float t) { +glm_ease_elast_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float a; a = 2.0f * t; @@ -277,10 +360,13 @@ glm_ease_elast_inout(float t) { return 0.5f * (sinf(-13.0f * GLM_PI_2f * a) * powf(2.0f, -10.0f * (a - 1.0f)) + 2.0f); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_bounce_out(float t) { +glm_ease_bounce_out(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ float tt; tt = t * t; @@ -298,20 +384,27 @@ glm_ease_bounce_out(float t) { return ((54.0f / 5.0f) * tt) - ((513.0f / 25.0f) * t) + (268.0f / 25.0f); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_bounce_in(float t) { +glm_ease_bounce_in(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return 1.0f - glm_ease_bounce_out(1.0f - t); } +#endif -CGLM_INLINE +CGLM_DECL float -glm_ease_bounce_inout(float t) { +glm_ease_bounce_inout(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ if (t < 0.5f) return 0.5f * (1.0f - glm_ease_bounce_out(t * 2.0f)); return 0.5f * glm_ease_bounce_out(t * 2.0f - 1.0f) + 0.5f; } +#endif #endif /* cglm_ease_h */ diff --git a/include/cglm/euler.h b/include/cglm/euler.h index 8ae0c83f5..31517f016 100644 --- a/include/cglm/euler.h +++ b/include/cglm/euler.h @@ -18,16 +18,16 @@ enum glm_euler_seq Functions: - CGLM_INLINE glm_euler_seq glm_euler_order(int newOrder[3]); - CGLM_INLINE void glm_euler_angles(mat4 m, vec3 dest); - CGLM_INLINE void glm_euler(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_xyz(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_zyx(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_zxy(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_xzy(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_yzx(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_yxz(vec3 angles, mat4 dest); - CGLM_INLINE void glm_euler_by_order(vec3 angles, + CGLM_DECL glm_euler_seq glm_euler_order(int newOrder[3]); + CGLM_DECL void glm_euler_angles(mat4 m, vec3 dest); + CGLM_DECL void glm_euler(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_xyz(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_zyx(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_zxy(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_xzy(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_yzx(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_yxz(vec3 angles, mat4 dest); + CGLM_DECL void glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest); */ @@ -57,11 +57,14 @@ typedef enum glm_euler_seq { typedef glm_euler_seq glm_euler_sq; -CGLM_INLINE +CGLM_DECL glm_euler_seq -glm_euler_order(int ord[3]) { +glm_euler_order(int ord[3]) CGLM_ENDD +#ifndef CGLM_LIB +{ return (glm_euler_seq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4); } +#endif /*! * @brief extract euler angles (in radians) using xyz order @@ -69,9 +72,11 @@ glm_euler_order(int ord[3]) { * @param[in] m affine transform * @param[out] dest angles vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL void -glm_euler_angles(mat4 m, vec3 dest) { +glm_euler_angles(mat4 m, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float m00, m01, m10, m11, m20, m21, m22; float thetaX, thetaY, thetaZ; @@ -100,6 +105,7 @@ glm_euler_angles(mat4 m, vec3 dest) { dest[1] = thetaY; dest[2] = thetaZ; } +#endif /*! * @brief build rotation matrix from euler angles @@ -107,9 +113,11 @@ glm_euler_angles(mat4 m, vec3 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_xyz(vec3 angles, mat4 dest) { +glm_euler_xyz(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -138,6 +146,7 @@ glm_euler_xyz(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief build rotation matrix from euler angles @@ -145,11 +154,14 @@ glm_euler_xyz(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler(vec3 angles, mat4 dest) { +glm_euler(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_euler_xyz(angles, dest); } +#endif /*! * @brief build rotation matrix from euler angles @@ -157,9 +169,11 @@ glm_euler(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_xzy(vec3 angles, mat4 dest) { +glm_euler_xzy(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, sxsy, cysx, cxsy, cxcy; @@ -189,6 +203,7 @@ glm_euler_xzy(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! @@ -197,9 +212,11 @@ glm_euler_xzy(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_yxz(vec3 angles, mat4 dest) { +glm_euler_yxz(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, cycz, sysz, czsy, cysz; @@ -229,6 +246,7 @@ glm_euler_yxz(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief build rotation matrix from euler angles @@ -236,9 +254,11 @@ glm_euler_yxz(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_yzx(vec3 angles, mat4 dest) { +glm_euler_yzx(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, sxsy, cxcy, cysx, cxsy; @@ -268,6 +288,7 @@ glm_euler_yzx(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief build rotation matrix from euler angles @@ -275,9 +296,11 @@ glm_euler_yzx(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_zxy(vec3 angles, mat4 dest) { +glm_euler_zxy(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, cycz, sxsy, cysz; @@ -306,6 +329,7 @@ glm_euler_zxy(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief build rotation matrix from euler angles @@ -313,9 +337,11 @@ glm_euler_zxy(vec3 angles, mat4 dest) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_zyx(vec3 angles, mat4 dest) { +glm_euler_zyx(vec3 angles, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -344,6 +370,7 @@ glm_euler_zyx(vec3 angles, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief build rotation matrix from euler angles @@ -352,9 +379,11 @@ glm_euler_zyx(vec3 angles, mat4 dest) { * @param[in] ord euler order * @param[out] dest rotation matrix */ -CGLM_INLINE +CGLM_DECL void -glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest) { +glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float cx, cy, cz, sx, sy, sz; @@ -449,5 +478,6 @@ glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif #endif /* cglm_euler_h */ diff --git a/include/cglm/frustum.h b/include/cglm/frustum.h index 5aa3c17d9..a0e16d293 100644 --- a/include/cglm/frustum.h +++ b/include/cglm/frustum.h @@ -67,9 +67,11 @@ * @param[in] m matrix (see brief) * @param[out] dest extracted view frustum planes (see brief) */ -CGLM_INLINE +CGLM_DECL void -glm_frustum_planes(mat4 m, vec4 dest[6]) { +glm_frustum_planes(mat4 m, vec4 dest[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4 t; glm_mat4_transpose_to(m, t); @@ -88,6 +90,7 @@ glm_frustum_planes(mat4 m, vec4 dest[6]) { glm_plane_normalize(dest[4]); glm_plane_normalize(dest[5]); } +#endif /*! * @brief extracts view frustum corners using clip-space coordinates @@ -112,9 +115,11 @@ glm_frustum_planes(mat4 m, vec4 dest[6]) { * @param[in] invMat matrix (see brief) * @param[out] dest exracted view frustum corners (see brief) */ -CGLM_INLINE +CGLM_DECL void -glm_frustum_corners(mat4 invMat, vec4 dest[8]) { +glm_frustum_corners(mat4 invMat, vec4 dest[8]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 c[8]; /* indexOf(nearCoord) = indexOf(farCoord) + 4 */ @@ -148,6 +153,7 @@ glm_frustum_corners(mat4 invMat, vec4 dest[8]) { glm_vec4_scale(c[6], 1.0f / c[6][3], dest[6]); glm_vec4_scale(c[7], 1.0f / c[7][3], dest[7]); } +#endif /*! * @brief finds center of view frustum @@ -155,9 +161,11 @@ glm_frustum_corners(mat4 invMat, vec4 dest[8]) { * @param[in] corners view frustum corners * @param[out] dest view frustum center */ -CGLM_INLINE +CGLM_DECL void -glm_frustum_center(vec4 corners[8], vec4 dest) { +glm_frustum_center(vec4 corners[8], vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 center; glm_vec4_copy(corners[0], center); @@ -172,6 +180,7 @@ glm_frustum_center(vec4 corners[8], vec4 dest) { glm_vec4_scale(center, 0.125f, dest); } +#endif /*! * @brief finds bounding box of frustum relative to given matrix e.g. view mat @@ -180,9 +189,11 @@ glm_frustum_center(vec4 corners[8], vec4 dest) { * @param[in] m matrix to convert existing conners * @param[out] box bounding box as array [min, max] */ -CGLM_INLINE +CGLM_DECL void -glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { +glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 v; vec3 min, max; int i; @@ -205,6 +216,7 @@ glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { glm_vec3_copy(min, box[0]); glm_vec3_copy(max, box[1]); } +#endif /*! * @brief finds planes corners which is between near and far planes (parallel) @@ -218,12 +230,14 @@ glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { * @param[in] farDist far distance (zFar) * @param[out] planeCorners plane corners [LB, LT, RT, RB] */ -CGLM_INLINE +CGLM_DECL void glm_frustum_corners_at(vec4 corners[8], float splitDist, float farDist, - vec4 planeCorners[4]) { + vec4 planeCorners[4]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 corner; float dist, sc; @@ -251,5 +265,6 @@ glm_frustum_corners_at(vec4 corners[8], glm_vec4_scale_as(corner, sc, corner); glm_vec4_add(corners[GLM_RBN], corner, planeCorners[3]); } +#endif #endif /* cglm_frustum_h */ diff --git a/include/cglm/io.h b/include/cglm/io.h index c71440096..70be76147 100644 --- a/include/cglm/io.h +++ b/include/cglm/io.h @@ -7,12 +7,12 @@ /* Functions: - CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream); - CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream); - CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream); - CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream); - CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream); - CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream); + CGLM_DECL void glm_mat4_print(mat4 matrix, FILE *ostream); + CGLM_DECL void glm_mat3_print(mat3 matrix, FILE *ostream); + CGLM_DECL void glm_vec4_print(vec4 vec, FILE *ostream); + CGLM_DECL void glm_vec3_print(vec3 vec, FILE *ostream); + CGLM_DECL void glm_ivec3_print(ivec3 vec, FILE *ostream); + CGLM_DECL void glm_versor_print(versor vec, FILE *ostream); */ #ifndef cglm_io_h @@ -23,10 +23,12 @@ #include #include -CGLM_INLINE +CGLM_DECL void glm_mat4_print(mat4 matrix, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; int j; @@ -52,11 +54,14 @@ glm_mat4_print(mat4 matrix, #undef m #undef n } +#endif -CGLM_INLINE +CGLM_DECL void glm_mat3_print(mat3 matrix, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; int j; @@ -82,11 +87,14 @@ glm_mat3_print(mat3 matrix, #undef m #undef n } +#endif -CGLM_INLINE +CGLM_DECL void glm_mat2_print(mat2 matrix, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; int j; @@ -112,11 +120,14 @@ glm_mat2_print(mat2 matrix, #undef m #undef n } +#endif -CGLM_INLINE +CGLM_DECL void glm_vec4_print(vec4 vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; #define m 4 @@ -134,11 +145,14 @@ glm_vec4_print(vec4 vec, #undef m } +#endif -CGLM_INLINE +CGLM_DECL void glm_vec3_print(vec3 vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; #define m 3 @@ -156,11 +170,14 @@ glm_vec3_print(vec3 vec, #undef m } +#endif -CGLM_INLINE +CGLM_DECL void glm_ivec3_print(ivec3 vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; #define m 3 @@ -178,11 +195,14 @@ glm_ivec3_print(ivec3 vec, #undef m } +#endif -CGLM_INLINE +CGLM_DECL void glm_vec2_print(vec2 vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; #define m 2 @@ -200,11 +220,14 @@ glm_vec2_print(vec2 vec, #undef m } +#endif -CGLM_INLINE +CGLM_DECL void glm_versor_print(versor vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i; #define m 4 @@ -222,12 +245,15 @@ glm_versor_print(versor vec, #undef m } +#endif -CGLM_INLINE +CGLM_DECL void glm_aabb_print(vec3 bbox[2], const char * __restrict tag, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ int i, j; #define m 3 @@ -251,5 +277,6 @@ glm_aabb_print(vec3 bbox[2], #undef m } +#endif #endif /* cglm_io_h */ diff --git a/include/cglm/mat2.h b/include/cglm/mat2.h index 69d27d3ef..05d9e6585 100644 --- a/include/cglm/mat2.h +++ b/include/cglm/mat2.h @@ -13,21 +13,21 @@ GLM_MAT2_ZERO Functions: - CGLM_INLINE void glm_mat2_copy(mat2 mat, mat2 dest) - CGLM_INLINE void glm_mat2_identity(mat2 mat) - CGLM_INLINE void glm_mat2_identity_array(mat2 * restrict mat, size_t count) - CGLM_INLINE void glm_mat2_zero(mat2 mat) - CGLM_INLINE void glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) - CGLM_INLINE void glm_mat2_transpose_to(mat2 m, mat2 dest) - CGLM_INLINE void glm_mat2_transpose(mat2 m) - CGLM_INLINE void glm_mat2_mulv(mat2 m, vec2 v, vec2 dest) - CGLM_INLINE float glm_mat2_trace(mat2 m) - CGLM_INLINE void glm_mat2_scale(mat2 m, float s) - CGLM_INLINE float glm_mat2_det(mat2 mat) - CGLM_INLINE void glm_mat2_inv(mat2 mat, mat2 dest) - CGLM_INLINE void glm_mat2_swap_col(mat2 mat, int col1, int col2) - CGLM_INLINE void glm_mat2_swap_row(mat2 mat, int row1, int row2) - CGLM_INLINE float glm_mat2_rmc(vec2 r, mat2 m, vec2 c) + CGLM_DECL void glm_mat2_copy(mat2 mat, mat2 dest) + CGLM_DECL void glm_mat2_identity(mat2 mat) + CGLM_DECL void glm_mat2_identity_array(mat2 * restrict mat, size_t count) + CGLM_DECL void glm_mat2_zero(mat2 mat) + CGLM_DECL void glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) + CGLM_DECL void glm_mat2_transpose_to(mat2 m, mat2 dest) + CGLM_DECL void glm_mat2_transpose(mat2 m) + CGLM_DECL void glm_mat2_mulv(mat2 m, vec2 v, vec2 dest) + CGLM_DECL float glm_mat2_trace(mat2 m) + CGLM_DECL void glm_mat2_scale(mat2 m, float s) + CGLM_DECL float glm_mat2_det(mat2 mat) + CGLM_DECL void glm_mat2_inv(mat2 mat, mat2 dest) + CGLM_DECL void glm_mat2_swap_col(mat2 mat, int col1, int col2) + CGLM_DECL void glm_mat2_swap_row(mat2 mat, int row1, int row2) + CGLM_DECL float glm_mat2_rmc(vec2 r, mat2 m, vec2 c) */ #ifndef cglm_mat2_h @@ -53,11 +53,14 @@ * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_copy(mat2 mat, mat2 dest) { +glm_mat2_copy(mat2 mat, mat2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_copy(mat[0], dest[0]); } +#endif /*! * @brief make given matrix identity. It is identical with below, @@ -73,12 +76,15 @@ glm_mat2_copy(mat2 mat, mat2 dest) { * * @param[in, out] mat destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_identity(mat2 mat) { +glm_mat2_identity(mat2 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat2 t = GLM_MAT2_IDENTITY_INIT; glm_mat2_copy(t, mat); } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -88,9 +94,11 @@ glm_mat2_identity(mat2 mat) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_identity_array(mat2 * __restrict mat, size_t count) { +glm_mat2_identity_array(mat2 * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat2 t = GLM_MAT2_IDENTITY_INIT; size_t i; @@ -98,18 +106,22 @@ glm_mat2_identity_array(mat2 * __restrict mat, size_t count) { glm_mat2_copy(t, mat[i]); } } +#endif /*! * @brief make given matrix zero. * * @param[in, out] mat matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_zero(mat2 mat) { +glm_mat2_zero(mat2 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat2 t = GLM_MAT2_ZERO_INIT; glm_mat2_copy(t, mat); } +#endif /*! * @brief multiply m1 and m2 to dest @@ -125,9 +137,11 @@ glm_mat2_zero(mat2 mat) { * @param[in] m2 right matrix * @param[out] dest destination matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) { +glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat2_mul_sse2(m1, m2, dest); #else @@ -142,6 +156,7 @@ glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) { dest[1][1] = a01 * b10 + a11 * b11; #endif } +#endif /*! * @brief transpose mat2 and store in dest @@ -151,9 +166,11 @@ glm_mat2_mul(mat2 m1, mat2 m2, mat2 dest) { * @param[in] m matrix * @param[out] dest result */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_transpose_to(mat2 m, mat2 dest) { +glm_mat2_transpose_to(mat2 m, mat2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat2_transp_sse2(m, dest); #else @@ -163,20 +180,24 @@ glm_mat2_transpose_to(mat2 m, mat2 dest) { dest[1][1] = m[1][1]; #endif } +#endif /*! * @brief tranpose mat2 and store result in same matrix * * @param[in, out] m source and dest */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_transpose(mat2 m) { +glm_mat2_transpose(mat2 m) CGLM_ENDD +#ifndef CGLM_LIB +{ float tmp; tmp = m[0][1]; m[0][1] = m[1][0]; m[1][0] = tmp; } +#endif /*! * @brief multiply mat2 with vec2 (column vector) and store in dest vector @@ -185,12 +206,15 @@ glm_mat2_transpose(mat2 m) { * @param[in] v vec2 (right, column vector) * @param[out] dest vec2 (result, column vector) */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_mulv(mat2 m, vec2 v, vec2 dest) { +glm_mat2_mulv(mat2 m, vec2 v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = m[0][0] * v[0] + m[1][0] * v[1]; dest[1] = m[0][1] * v[0] + m[1][1] * v[1]; } +#endif /*! * @brief trace of matrix @@ -199,11 +223,14 @@ glm_mat2_mulv(mat2 m, vec2 v, vec2 dest) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glm_mat2_trace(mat2 m) { +glm_mat2_trace(mat2 m) CGLM_ENDD +#ifndef CGLM_LIB +{ return m[0][0] + m[1][1]; } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -213,11 +240,14 @@ glm_mat2_trace(mat2 m) { * @param[in, out] m matrix * @param[in] s scalar */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_scale(mat2 m, float s) { +glm_mat2_scale(mat2 m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_scale(m[0], s, m[0]); } +#endif /*! * @brief mat2 determinant @@ -226,11 +256,14 @@ glm_mat2_scale(mat2 m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glm_mat2_det(mat2 mat) { +glm_mat2_det(mat2 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ return mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1]; } +#endif /*! * @brief inverse mat2 and store in dest @@ -238,9 +271,11 @@ glm_mat2_det(mat2 mat) { * @param[in] mat matrix * @param[out] dest inverse matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_inv(mat2 mat, mat2 dest) { +glm_mat2_inv(mat2 mat, mat2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float det; float a = mat[0][0], b = mat[0][1], c = mat[1][0], d = mat[1][1]; @@ -252,6 +287,7 @@ glm_mat2_inv(mat2 mat, mat2 dest) { dest[1][0] = -c * det; dest[1][1] = a * det; } +#endif /*! * @brief swap two matrix columns @@ -260,9 +296,11 @@ glm_mat2_inv(mat2 mat, mat2 dest) { * @param[in] col1 col1 * @param[in] col2 col2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_swap_col(mat2 mat, int col1, int col2) { +glm_mat2_swap_col(mat2 mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ float a, b; a = mat[col1][0]; @@ -274,6 +312,7 @@ glm_mat2_swap_col(mat2 mat, int col1, int col2) { mat[col2][0] = a; mat[col2][1] = b; } +#endif /*! * @brief swap two matrix rows @@ -282,9 +321,11 @@ glm_mat2_swap_col(mat2 mat, int col1, int col2) { * @param[in] row1 row1 * @param[in] row2 row2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat2_swap_row(mat2 mat, int row1, int row2) { +glm_mat2_swap_row(mat2 mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ float a, b; a = mat[0][row1]; @@ -296,6 +337,7 @@ glm_mat2_swap_row(mat2 mat, int row1, int row2) { mat[0][row2] = a; mat[1][row2] = b; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -311,12 +353,15 @@ glm_mat2_swap_row(mat2 mat, int row1, int row2) { * * @return scalar value e.g. Matrix1x1 */ -CGLM_INLINE +CGLM_DECL float -glm_mat2_rmc(vec2 r, mat2 m, vec2 c) { +glm_mat2_rmc(vec2 r, mat2 m, vec2 c) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2 tmp; glm_mat2_mulv(m, c, tmp); return glm_vec2_dot(r, tmp); } +#endif #endif /* cglm_mat2_h */ diff --git a/include/cglm/mat3.h b/include/cglm/mat3.h index 312606448..730a7f248 100644 --- a/include/cglm/mat3.h +++ b/include/cglm/mat3.h @@ -14,22 +14,22 @@ glm_mat3_dup(mat, dest) Functions: - CGLM_INLINE void glm_mat3_copy(mat3 mat, mat3 dest); - CGLM_INLINE void glm_mat3_identity(mat3 mat); - CGLM_INLINE void glm_mat3_identity_array(mat3 * restrict mat, size_t count); - CGLM_INLINE void glm_mat3_zero(mat3 mat); - CGLM_INLINE void glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest); - CGLM_INLINE void glm_mat3_transpose_to(mat3 m, mat3 dest); - CGLM_INLINE void glm_mat3_transpose(mat3 m); - CGLM_INLINE void glm_mat3_mulv(mat3 m, vec3 v, vec3 dest); - CGLM_INLINE float glm_mat3_trace(mat3 m); - CGLM_INLINE void glm_mat3_quat(mat3 m, versor dest); - CGLM_INLINE void glm_mat3_scale(mat3 m, float s); - CGLM_INLINE float glm_mat3_det(mat3 mat); - CGLM_INLINE void glm_mat3_inv(mat3 mat, mat3 dest); - CGLM_INLINE void glm_mat3_swap_col(mat3 mat, int col1, int col2); - CGLM_INLINE void glm_mat3_swap_row(mat3 mat, int row1, int row2); - CGLM_INLINE float glm_mat3_rmc(vec3 r, mat3 m, vec3 c); + CGLM_DECL void glm_mat3_copy(mat3 mat, mat3 dest); + CGLM_DECL void glm_mat3_identity(mat3 mat); + CGLM_DECL void glm_mat3_identity_array(mat3 * restrict mat, size_t count); + CGLM_DECL void glm_mat3_zero(mat3 mat); + CGLM_DECL void glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest); + CGLM_DECL void glm_mat3_transpose_to(mat3 m, mat3 dest); + CGLM_DECL void glm_mat3_transpose(mat3 m); + CGLM_DECL void glm_mat3_mulv(mat3 m, vec3 v, vec3 dest); + CGLM_DECL float glm_mat3_trace(mat3 m); + CGLM_DECL void glm_mat3_quat(mat3 m, versor dest); + CGLM_DECL void glm_mat3_scale(mat3 m, float s); + CGLM_DECL float glm_mat3_det(mat3 mat); + CGLM_DECL void glm_mat3_inv(mat3 mat, mat3 dest); + CGLM_DECL void glm_mat3_swap_col(mat3 mat, int col1, int col2); + CGLM_DECL void glm_mat3_swap_row(mat3 mat, int row1, int row2); + CGLM_DECL float glm_mat3_rmc(vec3 r, mat3 m, vec3 c); */ #ifndef cglm_mat3_h @@ -63,9 +63,11 @@ * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_copy(mat3 mat, mat3 dest) { +glm_mat3_copy(mat3 mat, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -78,6 +80,7 @@ glm_mat3_copy(mat3 mat, mat3 dest) { dest[2][1] = mat[2][1]; dest[2][2] = mat[2][2]; } +#endif /*! * @brief make given matrix identity. It is identical with below, @@ -93,12 +96,15 @@ glm_mat3_copy(mat3 mat, mat3 dest) { * * @param[in, out] mat destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_identity(mat3 mat) { +glm_mat3_identity(mat3 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT; glm_mat3_copy(t, mat); } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -108,9 +114,11 @@ glm_mat3_identity(mat3 mat) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_identity_array(mat3 * __restrict mat, size_t count) { +glm_mat3_identity_array(mat3 * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT; size_t i; @@ -118,18 +126,22 @@ glm_mat3_identity_array(mat3 * __restrict mat, size_t count) { glm_mat3_copy(t, mat[i]); } } +#endif /*! * @brief make given matrix zero. * * @param[in, out] mat matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_zero(mat3 mat) { +glm_mat3_zero(mat3 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3 t = GLM_MAT3_ZERO_INIT; glm_mat3_copy(t, mat); } +#endif /*! * @brief multiply m1 and m2 to dest @@ -145,9 +157,11 @@ glm_mat3_zero(mat3 mat) { * @param[in] m2 right matrix * @param[out] dest destination matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { +glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat3_mul_sse2(m1, m2, dest); #else @@ -170,6 +184,7 @@ glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { dest[2][2] = a02 * b20 + a12 * b21 + a22 * b22; #endif } +#endif /*! * @brief transpose mat3 and store in dest @@ -179,9 +194,11 @@ glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { * @param[in] m matrix * @param[out] dest result */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_transpose_to(mat3 m, mat3 dest) { +glm_mat3_transpose_to(mat3 m, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = m[0][0]; dest[0][1] = m[1][0]; dest[0][2] = m[2][0]; @@ -192,15 +209,18 @@ glm_mat3_transpose_to(mat3 m, mat3 dest) { dest[2][1] = m[1][2]; dest[2][2] = m[2][2]; } +#endif /*! * @brief tranpose mat3 and store result in same matrix * * @param[in, out] m source and dest */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_transpose(mat3 m) { +glm_mat3_transpose(mat3 m) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3 tmp; tmp[0][1] = m[1][0]; @@ -217,6 +237,7 @@ glm_mat3_transpose(mat3 m) { m[2][0] = tmp[2][0]; m[2][1] = tmp[2][1]; } +#endif /*! * @brief multiply mat3 with vec3 (column vector) and store in dest vector @@ -225,13 +246,16 @@ glm_mat3_transpose(mat3 m) { * @param[in] v vec3 (right, column vector) * @param[out] dest vec3 (result, column vector) */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) { +glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2]; dest[1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2]; dest[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2]; } +#endif /*! * @brief trace of matrix @@ -240,11 +264,14 @@ glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glm_mat3_trace(mat3 m) { +glm_mat3_trace(mat3 m) CGLM_ENDD +#ifndef CGLM_LIB +{ return m[0][0] + m[1][1] + m[2][2]; } +#endif /*! * @brief convert mat3 to quaternion @@ -252,9 +279,11 @@ glm_mat3_trace(mat3 m) { * @param[in] m rotation matrix * @param[out] dest destination quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_quat(mat3 m, versor dest) { +glm_mat3_quat(mat3 m, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -294,6 +323,7 @@ glm_mat3_quat(mat3 m, versor dest) { dest[3] = rinv * (m[0][1] - m[1][0]); } } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -303,13 +333,16 @@ glm_mat3_quat(mat3 m, versor dest) { * @param[in, out] m matrix * @param[in] s scalar */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_scale(mat3 m, float s) { +glm_mat3_scale(mat3 m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ m[0][0] *= s; m[0][1] *= s; m[0][2] *= s; m[1][0] *= s; m[1][1] *= s; m[1][2] *= s; m[2][0] *= s; m[2][1] *= s; m[2][2] *= s; } +#endif /*! * @brief mat3 determinant @@ -318,15 +351,18 @@ glm_mat3_scale(mat3 m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glm_mat3_det(mat3 mat) { +glm_mat3_det(mat3 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], g = mat[2][0], h = mat[2][1], i = mat[2][2]; return a * (e * i - h * f) - d * (b * i - c * h) + g * (b * f - c * e); } +#endif /*! * @brief inverse mat3 and store in dest @@ -334,9 +370,11 @@ glm_mat3_det(mat3 mat) { * @param[in] mat matrix * @param[out] dest inverse matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_inv(mat3 mat, mat3 dest) { +glm_mat3_inv(mat3 mat, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float det; float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], @@ -356,6 +394,7 @@ glm_mat3_inv(mat3 mat, mat3 dest) { glm_mat3_scale(dest, det); } +#endif /*! * @brief swap two matrix columns @@ -364,14 +403,17 @@ glm_mat3_inv(mat3 mat, mat3 dest) { * @param[in] col1 col1 * @param[in] col2 col2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_swap_col(mat3 mat, int col1, int col2) { +glm_mat3_swap_col(mat3 mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 tmp; glm_vec3_copy(mat[col1], tmp); glm_vec3_copy(mat[col2], mat[col1]); glm_vec3_copy(tmp, mat[col2]); } +#endif /*! * @brief swap two matrix rows @@ -380,9 +422,11 @@ glm_mat3_swap_col(mat3 mat, int col1, int col2) { * @param[in] row1 row1 * @param[in] row2 row2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat3_swap_row(mat3 mat, int row1, int row2) { +glm_mat3_swap_row(mat3 mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 tmp; tmp[0] = mat[0][row1]; tmp[1] = mat[1][row1]; @@ -396,6 +440,7 @@ glm_mat3_swap_row(mat3 mat, int row1, int row2) { mat[1][row2] = tmp[1]; mat[2][row2] = tmp[2]; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -411,12 +456,15 @@ glm_mat3_swap_row(mat3 mat, int row1, int row2) { * * @return scalar value e.g. Matrix1x1 */ -CGLM_INLINE +CGLM_DECL float -glm_mat3_rmc(vec3 r, mat3 m, vec3 c) { +glm_mat3_rmc(vec3 r, mat3 m, vec3 c) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 tmp; glm_mat3_mulv(m, c, tmp); return glm_vec3_dot(r, tmp); } +#endif #endif /* cglm_mat3_h */ diff --git a/include/cglm/mat4.h b/include/cglm/mat4.h index 7a72f9721..0f411e246 100644 --- a/include/cglm/mat4.h +++ b/include/cglm/mat4.h @@ -18,31 +18,31 @@ GLM_MAT4_ZERO Functions: - CGLM_INLINE void glm_mat4_ucopy(mat4 mat, mat4 dest); - CGLM_INLINE void glm_mat4_copy(mat4 mat, mat4 dest); - CGLM_INLINE void glm_mat4_identity(mat4 mat); - CGLM_INLINE void glm_mat4_identity_array(mat4 * restrict mat, size_t count); - CGLM_INLINE void glm_mat4_zero(mat4 mat); - CGLM_INLINE void glm_mat4_pick3(mat4 mat, mat3 dest); - CGLM_INLINE void glm_mat4_pick3t(mat4 mat, mat3 dest); - CGLM_INLINE void glm_mat4_ins3(mat3 mat, mat4 dest); - CGLM_INLINE void glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest); - CGLM_INLINE void glm_mat4_mulN(mat4 *matrices[], int len, mat4 dest); - CGLM_INLINE void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); - CGLM_INLINE void glm_mat4_mulv3(mat4 m, vec3 v, vec3 dest); - CGLM_INLINE float glm_mat4_trace(mat4 m); - CGLM_INLINE float glm_mat4_trace3(mat4 m); - CGLM_INLINE void glm_mat4_quat(mat4 m, versor dest) ; - CGLM_INLINE void glm_mat4_transpose_to(mat4 m, mat4 dest); - CGLM_INLINE void glm_mat4_transpose(mat4 m); - CGLM_INLINE void glm_mat4_scale_p(mat4 m, float s); - CGLM_INLINE void glm_mat4_scale(mat4 m, float s); - CGLM_INLINE float glm_mat4_det(mat4 mat); - CGLM_INLINE void glm_mat4_inv(mat4 mat, mat4 dest); - CGLM_INLINE void glm_mat4_inv_fast(mat4 mat, mat4 dest); - CGLM_INLINE void glm_mat4_swap_col(mat4 mat, int col1, int col2); - CGLM_INLINE void glm_mat4_swap_row(mat4 mat, int row1, int row2); - CGLM_INLINE float glm_mat4_rmc(vec4 r, mat4 m, vec4 c); + CGLM_DECL void glm_mat4_ucopy(mat4 mat, mat4 dest); + CGLM_DECL void glm_mat4_copy(mat4 mat, mat4 dest); + CGLM_DECL void glm_mat4_identity(mat4 mat); + CGLM_DECL void glm_mat4_identity_array(mat4 * restrict mat, size_t count); + CGLM_DECL void glm_mat4_zero(mat4 mat); + CGLM_DECL void glm_mat4_pick3(mat4 mat, mat3 dest); + CGLM_DECL void glm_mat4_pick3t(mat4 mat, mat3 dest); + CGLM_DECL void glm_mat4_ins3(mat3 mat, mat4 dest); + CGLM_DECL void glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest); + CGLM_DECL void glm_mat4_mulN(mat4 *matrices[], int len, mat4 dest); + CGLM_DECL void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); + CGLM_DECL void glm_mat4_mulv3(mat4 m, vec3 v, vec3 dest); + CGLM_DECL float glm_mat4_trace(mat4 m); + CGLM_DECL float glm_mat4_trace3(mat4 m); + CGLM_DECL void glm_mat4_quat(mat4 m, versor dest) ; + CGLM_DECL void glm_mat4_transpose_to(mat4 m, mat4 dest); + CGLM_DECL void glm_mat4_transpose(mat4 m); + CGLM_DECL void glm_mat4_scale_p(mat4 m, float s); + CGLM_DECL void glm_mat4_scale(mat4 m, float s); + CGLM_DECL float glm_mat4_det(mat4 mat); + CGLM_DECL void glm_mat4_inv(mat4 mat, mat4 dest); + CGLM_DECL void glm_mat4_inv_fast(mat4 mat, mat4 dest); + CGLM_DECL void glm_mat4_swap_col(mat4 mat, int col1, int col2); + CGLM_DECL void glm_mat4_swap_row(mat4 mat, int row1, int row2); + CGLM_DECL float glm_mat4_rmc(vec4 r, mat4 m, vec4 c); */ #ifndef cglm_mat_h @@ -98,9 +98,11 @@ * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_ucopy(mat4 mat, mat4 dest) { +glm_mat4_ucopy(mat4 mat, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = mat[0][0]; dest[1][0] = mat[1][0]; dest[0][1] = mat[0][1]; dest[1][1] = mat[1][1]; dest[0][2] = mat[0][2]; dest[1][2] = mat[1][2]; @@ -111,6 +113,7 @@ glm_mat4_ucopy(mat4 mat, mat4 dest) { dest[2][2] = mat[2][2]; dest[3][2] = mat[3][2]; dest[2][3] = mat[2][3]; dest[3][3] = mat[3][3]; } +#endif /*! * @brief copy all members of [mat] to [dest] @@ -118,9 +121,11 @@ glm_mat4_ucopy(mat4 mat, mat4 dest) { * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_copy(mat4 mat, mat4 dest) { +glm_mat4_copy(mat4 mat, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #ifdef __AVX__ glmm_store256(dest[0], glmm_load256(mat[0])); glmm_store256(dest[2], glmm_load256(mat[2])); @@ -138,6 +143,7 @@ glm_mat4_copy(mat4 mat, mat4 dest) { glm_mat4_ucopy(mat, dest); #endif } +#endif /*! * @brief make given matrix identity. It is identical with below, @@ -153,12 +159,15 @@ glm_mat4_copy(mat4 mat, mat4 dest) { * * @param[in, out] mat destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_identity(mat4 mat) { +glm_mat4_identity(mat4 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; glm_mat4_copy(t, mat); } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -168,9 +177,11 @@ glm_mat4_identity(mat4 mat) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_identity_array(mat4 * __restrict mat, size_t count) { +glm_mat4_identity_array(mat4 * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; size_t i; @@ -178,18 +189,22 @@ glm_mat4_identity_array(mat4 * __restrict mat, size_t count) { glm_mat4_copy(t, mat[i]); } } +#endif /*! * @brief make given matrix zero. * * @param[in, out] mat matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_zero(mat4 mat) { +glm_mat4_zero(mat4 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 t = GLM_MAT4_ZERO_INIT; glm_mat4_copy(t, mat); } +#endif /*! * @brief copy upper-left of mat4 to mat3 @@ -197,9 +212,11 @@ glm_mat4_zero(mat4 mat) { * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_pick3(mat4 mat, mat3 dest) { +glm_mat4_pick3(mat4 mat, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -212,6 +229,7 @@ glm_mat4_pick3(mat4 mat, mat3 dest) { dest[2][1] = mat[2][1]; dest[2][2] = mat[2][2]; } +#endif /*! * @brief copy upper-left of mat4 to mat3 (transposed) @@ -221,9 +239,11 @@ glm_mat4_pick3(mat4 mat, mat3 dest) { * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_pick3t(mat4 mat, mat3 dest) { +glm_mat4_pick3t(mat4 mat, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = mat[0][0]; dest[0][1] = mat[1][0]; dest[0][2] = mat[2][0]; @@ -236,6 +256,7 @@ glm_mat4_pick3t(mat4 mat, mat3 dest) { dest[2][1] = mat[1][2]; dest[2][2] = mat[2][2]; } +#endif /*! * @brief copy mat3 to mat4's upper-left @@ -243,9 +264,11 @@ glm_mat4_pick3t(mat4 mat, mat3 dest) { * @param[in] mat source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_ins3(mat3 mat, mat4 dest) { +glm_mat4_ins3(mat3 mat, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -258,6 +281,7 @@ glm_mat4_ins3(mat3 mat, mat4 dest) { dest[2][1] = mat[2][1]; dest[2][2] = mat[2][2]; } +#endif /*! * @brief multiply m1 and m2 to dest @@ -273,9 +297,11 @@ glm_mat4_ins3(mat3 mat, mat4 dest) { * @param[in] m2 right matrix * @param[out] dest destination matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { +glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #ifdef __AVX__ glm_mat4_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -311,6 +337,7 @@ glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { dest[3][3] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33; #endif } +#endif /*! * @brief mupliply N mat4 matrices and store result in dest @@ -331,9 +358,11 @@ glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { * @param[in] len matrices count * @param[out] dest result */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { +glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ uint32_t i; #ifdef DEBUG @@ -345,6 +374,7 @@ glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { for (i = 2; i < len; i++) glm_mat4_mul(dest, *matrices[i], dest); } +#endif /*! * @brief multiply mat4 with vec4 (column vector) and store in dest vector @@ -353,9 +383,11 @@ glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { * @param[in] v vec4 (right, column vector) * @param[out] dest vec4 (result, column vector) */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { +glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_mulv_sse2(m, v, dest); #else @@ -367,6 +399,7 @@ glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { glm_vec4_copy(res, dest); #endif } +#endif /*! * @brief trace of matrix @@ -375,11 +408,14 @@ glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glm_mat4_trace(mat4 m) { +glm_mat4_trace(mat4 m) CGLM_ENDD +#ifndef CGLM_LIB +{ return m[0][0] + m[1][1] + m[2][2] + m[3][3]; } +#endif /*! * @brief trace of matrix (rotation part) @@ -388,11 +424,14 @@ glm_mat4_trace(mat4 m) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glm_mat4_trace3(mat4 m) { +glm_mat4_trace3(mat4 m) CGLM_ENDD +#ifndef CGLM_LIB +{ return m[0][0] + m[1][1] + m[2][2]; } +#endif /*! * @brief convert mat4's rotation part to quaternion @@ -400,9 +439,11 @@ glm_mat4_trace3(mat4 m) { * @param[in] m affine matrix * @param[out] dest destination quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_quat(mat4 m, versor dest) { +glm_mat4_quat(mat4 m, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -442,6 +483,7 @@ glm_mat4_quat(mat4 m, versor dest) { dest[3] = rinv * (m[0][1] - m[1][0]); } } +#endif /*! * @brief multiply vector with mat4 @@ -454,14 +496,17 @@ glm_mat4_quat(mat4 m, versor dest) { * @param[in] last 4th item to make it vec4 * @param[out] dest result vector (vec3) */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { +glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 res; glm_vec4(v, last, res); glm_mat4_mulv(m, res, res); glm_vec3(res, dest); } +#endif /*! * @brief transpose mat4 and store in dest @@ -471,9 +516,11 @@ glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { * @param[in] m matrix * @param[out] dest result */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_transpose_to(mat4 m, mat4 dest) { +glm_mat4_transpose_to(mat4 m, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_transp_sse2(m, dest); #else @@ -487,15 +534,18 @@ glm_mat4_transpose_to(mat4 m, mat4 dest) { dest[2][3] = m[3][2]; dest[3][3] = m[3][3]; #endif } +#endif /*! * @brief tranpose mat4 and store result in same matrix * * @param[in, out] m source and dest */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_transpose(mat4 m) { +glm_mat4_transpose(mat4 m) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_transp_sse2(m, m); #else @@ -504,6 +554,7 @@ glm_mat4_transpose(mat4 m) { glm_mat4_ucopy(d, m); #endif } +#endif /*! * @brief scale (multiply with scalar) matrix without simd optimization @@ -513,14 +564,17 @@ glm_mat4_transpose(mat4 m) { * @param[in, out] m matrix * @param[in] s scalar */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_scale_p(mat4 m, float s) { +glm_mat4_scale_p(mat4 m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ m[0][0] *= s; m[0][1] *= s; m[0][2] *= s; m[0][3] *= s; m[1][0] *= s; m[1][1] *= s; m[1][2] *= s; m[1][3] *= s; m[2][0] *= s; m[2][1] *= s; m[2][2] *= s; m[2][3] *= s; m[3][0] *= s; m[3][1] *= s; m[3][2] *= s; m[3][3] *= s; } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -530,9 +584,11 @@ glm_mat4_scale_p(mat4 m, float s) { * @param[in, out] m matrix * @param[in] s scalar */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_scale(mat4 m, float s) { +glm_mat4_scale(mat4 m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_scale_sse2(m, s); #elif defined(CGLM_NEON_FP) @@ -546,6 +602,7 @@ glm_mat4_scale(mat4 m, float s) { glm_mat4_scale_p(m, s); #endif } +#endif /*! * @brief mat4 determinant @@ -554,9 +611,11 @@ glm_mat4_scale(mat4 m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glm_mat4_det(mat4 mat) { +glm_mat4_det(mat4 mat) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) return glm_mat4_det_sse2(mat); #else @@ -580,6 +639,7 @@ glm_mat4_det(mat4 mat) { - d * (e * t[2] - f * t[4] + g * t[5]); #endif } +#endif /*! * @brief inverse mat4 and store in dest @@ -587,9 +647,11 @@ glm_mat4_det(mat4 mat) { * @param[in] mat matrix * @param[out] dest inverse matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_inv(mat4 mat, mat4 dest) { +glm_mat4_inv(mat4 mat, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_sse2(mat, dest); #else @@ -635,6 +697,7 @@ glm_mat4_inv(mat4 mat, mat4 dest) { glm_mat4_scale_p(dest, det); #endif } +#endif /*! * @brief inverse mat4 and store in dest @@ -648,15 +711,18 @@ glm_mat4_inv(mat4 mat, mat4 dest) { * @param[in] mat matrix * @param[out] dest inverse matrix */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_inv_fast(mat4 mat, mat4 dest) { +glm_mat4_inv_fast(mat4 mat, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_fast_sse2(mat, dest); #else glm_mat4_inv(mat, dest); #endif } +#endif /*! * @brief swap two matrix columns @@ -665,14 +731,17 @@ glm_mat4_inv_fast(mat4 mat, mat4 dest) { * @param[in] col1 col1 * @param[in] col2 col2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_swap_col(mat4 mat, int col1, int col2) { +glm_mat4_swap_col(mat4 mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) vec4 tmp; glm_vec4_copy(mat[col1], tmp); glm_vec4_copy(mat[col2], mat[col1]); glm_vec4_copy(tmp, mat[col2]); } +#endif /*! * @brief swap two matrix rows @@ -681,9 +750,11 @@ glm_mat4_swap_col(mat4 mat, int col1, int col2) { * @param[in] row1 row1 * @param[in] row2 row2 */ -CGLM_INLINE +CGLM_DECL void -glm_mat4_swap_row(mat4 mat, int row1, int row2) { +glm_mat4_swap_row(mat4 mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) vec4 tmp; tmp[0] = mat[0][row1]; tmp[1] = mat[1][row1]; @@ -700,6 +771,7 @@ glm_mat4_swap_row(mat4 mat, int row1, int row2) { mat[2][row2] = tmp[2]; mat[3][row2] = tmp[3]; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -715,12 +787,15 @@ glm_mat4_swap_row(mat4 mat, int row1, int row2) { * * @return scalar value e.g. B(s) */ -CGLM_INLINE +CGLM_DECL float -glm_mat4_rmc(vec4 r, mat4 m, vec4 c) { +glm_mat4_rmc(vec4 r, mat4 m, vec4 c) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 tmp; glm_mat4_mulv(m, c, tmp); return glm_vec4_dot(r, tmp); } +#endif #endif /* cglm_mat_h */ diff --git a/include/cglm/plane.h b/include/cglm/plane.h index 15ae580a0..4e4c30c3b 100644 --- a/include/cglm/plane.h +++ b/include/cglm/plane.h @@ -19,7 +19,7 @@ /* Functions: - CGLM_INLINE void glm_plane_normalize(vec4 plane); + CGLM_DECL void glm_plane_normalize(vec4 plane); */ /*! @@ -27,9 +27,11 @@ * * @param[in, out] plane plane to normalize */ -CGLM_INLINE +CGLM_DECL void -glm_plane_normalize(vec4 plane) { +glm_plane_normalize(vec4 plane) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; if ((norm = glm_vec3_norm(plane)) == 0.0f) { @@ -39,5 +41,6 @@ glm_plane_normalize(vec4 plane) { glm_vec4_scale(plane, 1.0f / norm, plane); } +#endif #endif /* cglm_plane_h */ diff --git a/include/cglm/project.h b/include/cglm/project.h index 133622263..98e766704 100644 --- a/include/cglm/project.h +++ b/include/cglm/project.h @@ -39,9 +39,11 @@ * @param[in] vp viewport as [x, y, width, height] * @param[out] dest unprojected coordinates */ -CGLM_INLINE +CGLM_DECL void -glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { +glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 v; v[0] = 2.0f * (pos[0] - vp[0]) / vp[2] - 1.0f; @@ -53,6 +55,7 @@ glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { glm_vec4_scale(v, 1.0f / v[3], v); glm_vec3(v, dest); } +#endif /*! * @brief maps the specified viewport coordinates into specified space [1] @@ -78,13 +81,16 @@ glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { * @param[in] vp viewport as [x, y, width, height] * @param[out] dest unprojected coordinates */ -CGLM_INLINE +CGLM_DECL void -glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4 inv; glm_mat4_inv(m, inv); glm_unprojecti(pos, inv, vp, dest); } +#endif /*! * @brief map object coordinates to window coordinates @@ -98,9 +104,11 @@ glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { * @param[in] vp viewport as [x, y, width, height] * @param[out] dest projected coordinates */ -CGLM_INLINE +CGLM_DECL void -glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) vec4 pos4, vone = GLM_VEC4_ONE_INIT; glm_vec4(pos, 1.0f, pos4); @@ -114,5 +122,6 @@ glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { dest[1] = pos4[1] * vp[3] + vp[1]; dest[2] = pos4[2]; } +#endif #endif /* cglm_project_h */ diff --git a/include/cglm/quat.h b/include/cglm/quat.h index 6d38f2707..166eb15d0 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -11,42 +11,42 @@ GLM_QUAT_IDENTITY Functions: - CGLM_INLINE void glm_quat_identity(versor q); - CGLM_INLINE void glm_quat_init(versor q, float x, float y, float z, float w); - CGLM_INLINE void glm_quat(versor q, float angle, float x, float y, float z); - CGLM_INLINE void glm_quatv(versor q, float angle, vec3 axis); - CGLM_INLINE void glm_quat_copy(versor q, versor dest); - CGLM_INLINE float glm_quat_norm(versor q); - CGLM_INLINE void glm_quat_normalize(versor q); - CGLM_INLINE void glm_quat_normalize_to(versor q, versor dest); - CGLM_INLINE float glm_quat_dot(versor p, versor q); - CGLM_INLINE void glm_quat_conjugate(versor q, versor dest); - CGLM_INLINE void glm_quat_inv(versor q, versor dest); - CGLM_INLINE void glm_quat_add(versor p, versor q, versor dest); - CGLM_INLINE void glm_quat_sub(versor p, versor q, versor dest); - CGLM_INLINE float glm_quat_real(versor q); - CGLM_INLINE void glm_quat_imag(versor q, vec3 dest); - CGLM_INLINE void glm_quat_imagn(versor q, vec3 dest); - CGLM_INLINE float glm_quat_imaglen(versor q); - CGLM_INLINE float glm_quat_angle(versor q); - CGLM_INLINE void glm_quat_axis(versor q, vec3 dest); - CGLM_INLINE void glm_quat_mul(versor p, versor q, versor dest); - CGLM_INLINE void glm_quat_mat4(versor q, mat4 dest); - CGLM_INLINE void glm_quat_mat4t(versor q, mat4 dest); - CGLM_INLINE void glm_quat_mat3(versor q, mat3 dest); - CGLM_INLINE void glm_quat_mat3t(versor q, mat3 dest); - CGLM_INLINE void glm_quat_lerp(versor from, versor to, float t, versor dest); - CGLM_INLINE void glm_quat_lerpc(versor from, versor to, float t, versor dest); - CGLM_INLINE void glm_quat_slerp(versor q, versor r, float t, versor dest); - CGLM_INLINE void glm_quat_look(vec3 eye, versor ori, mat4 dest); - CGLM_INLINE void glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest); - CGLM_INLINE void glm_quat_forp(vec3 from, + CGLM_DECL void glm_quat_identity(versor q); + CGLM_DECL void glm_quat_init(versor q, float x, float y, float z, float w); + CGLM_DECL void glm_quat(versor q, float angle, float x, float y, float z); + CGLM_DECL void glm_quatv(versor q, float angle, vec3 axis); + CGLM_DECL void glm_quat_copy(versor q, versor dest); + CGLM_DECL float glm_quat_norm(versor q); + CGLM_DECL void glm_quat_normalize(versor q); + CGLM_DECL void glm_quat_normalize_to(versor q, versor dest); + CGLM_DECL float glm_quat_dot(versor p, versor q); + CGLM_DECL void glm_quat_conjugate(versor q, versor dest); + CGLM_DECL void glm_quat_inv(versor q, versor dest); + CGLM_DECL void glm_quat_add(versor p, versor q, versor dest); + CGLM_DECL void glm_quat_sub(versor p, versor q, versor dest); + CGLM_DECL float glm_quat_real(versor q); + CGLM_DECL void glm_quat_imag(versor q, vec3 dest); + CGLM_DECL void glm_quat_imagn(versor q, vec3 dest); + CGLM_DECL float glm_quat_imaglen(versor q); + CGLM_DECL float glm_quat_angle(versor q); + CGLM_DECL void glm_quat_axis(versor q, vec3 dest); + CGLM_DECL void glm_quat_mul(versor p, versor q, versor dest); + CGLM_DECL void glm_quat_mat4(versor q, mat4 dest); + CGLM_DECL void glm_quat_mat4t(versor q, mat4 dest); + CGLM_DECL void glm_quat_mat3(versor q, mat3 dest); + CGLM_DECL void glm_quat_mat3t(versor q, mat3 dest); + CGLM_DECL void glm_quat_lerp(versor from, versor to, float t, versor dest); + CGLM_DECL void glm_quat_lerpc(versor from, versor to, float t, versor dest); + CGLM_DECL void glm_quat_slerp(versor q, versor r, float t, versor dest); + CGLM_DECL void glm_quat_look(vec3 eye, versor ori, mat4 dest); + CGLM_DECL void glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest); + CGLM_DECL void glm_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest); - CGLM_INLINE void glm_quat_rotatev(versor q, vec3 v, vec3 dest); - CGLM_INLINE void glm_quat_rotate(mat4 m, versor q, mat4 dest); + CGLM_DECL void glm_quat_rotatev(versor q, vec3 v, vec3 dest); + CGLM_DECL void glm_quat_rotate(mat4 m, versor q, mat4 dest); */ #ifndef cglm_quat_h @@ -63,15 +63,15 @@ # include "simd/sse2/quat.h" #endif -CGLM_INLINE +CGLM_DECL void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); -CGLM_INLINE +CGLM_DECL void glm_mul_rot(mat4 m1, mat4 m2, mat4 dest); -CGLM_INLINE +CGLM_DECL void glm_translate(mat4 m, vec3 v); @@ -93,12 +93,15 @@ glm_translate(mat4 m, vec3 v); * * @param[in, out] q quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_identity(versor q) { +glm_quat_identity(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; glm_vec4_copy(v, q); } +#endif /*! * @brief make given quaternion array's each element identity quaternion @@ -108,9 +111,11 @@ glm_quat_identity(versor q) { * * @param[in] count count of quaternions */ -CGLM_INLINE +CGLM_DECL void -glm_quat_identity_array(versor * __restrict q, size_t count) { +glm_quat_identity_array(versor * __restrict q, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; size_t i; @@ -118,6 +123,7 @@ glm_quat_identity_array(versor * __restrict q, size_t count) { glm_vec4_copy(v, q[i]); } } +#endif /*! * @brief inits quaterion with raw values @@ -128,14 +134,17 @@ glm_quat_identity_array(versor * __restrict q, size_t count) { * @param[in] z z * @param[in] w w (real part) */ -CGLM_INLINE +CGLM_DECL void -glm_quat_init(versor q, float x, float y, float z, float w) { +glm_quat_init(versor q, float x, float y, float z, float w) CGLM_ENDD +#ifndef CGLM_LIB +{ q[0] = x; q[1] = y; q[2] = z; q[3] = w; } +#endif /*! * @brief creates NEW quaternion with axis vector @@ -144,9 +153,11 @@ glm_quat_init(versor q, float x, float y, float z, float w) { * @param[in] angle angle (radians) * @param[in] axis axis */ -CGLM_INLINE +CGLM_DECL void -glm_quatv(versor q, float angle, vec3 axis) { +glm_quatv(versor q, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 k; float a, c, s; @@ -161,6 +172,7 @@ glm_quatv(versor q, float angle, vec3 axis) { q[2] = s * k[2]; q[3] = c; } +#endif /*! * @brief creates NEW quaternion with individual axis components @@ -171,12 +183,15 @@ glm_quatv(versor q, float angle, vec3 axis) { * @param[in] y axis.y * @param[in] z axis.z */ -CGLM_INLINE +CGLM_DECL void -glm_quat(versor q, float angle, float x, float y, float z) { +glm_quat(versor q, float angle, float x, float y, float z) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 axis = {x, y, z}; glm_quatv(q, angle, axis); } +#endif /*! * @brief copy quaternion to another one @@ -184,22 +199,28 @@ glm_quat(versor q, float angle, float x, float y, float z) { * @param[in] q quaternion * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_quat_copy(versor q, versor dest) { +glm_quat_copy(versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_copy(q, dest); } +#endif /*! * @brief returns norm (magnitude) of quaternion * * @param[out] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glm_quat_norm(versor q) { +glm_quat_norm(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_norm(q); } +#endif /*! * @brief normalize quaternion and store result in dest @@ -207,9 +228,11 @@ glm_quat_norm(versor q) { * @param[in] q quaternion to normalze * @param[out] dest destination quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_normalize_to(versor q, versor dest) { +glm_quat_normalize_to(versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -237,17 +260,21 @@ glm_quat_normalize_to(versor q, versor dest) { glm_vec4_scale(q, 1.0f / sqrtf(dot), dest); #endif } +#endif /*! * @brief normalize quaternion * * @param[in, out] q quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_normalize(versor q) { +glm_quat_normalize(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_quat_normalize_to(q, q); } +#endif /*! * @brief dot product of two quaternion @@ -255,11 +282,14 @@ glm_quat_normalize(versor q) { * @param[in] p quaternion 1 * @param[in] q quaternion 2 */ -CGLM_INLINE +CGLM_DECL float -glm_quat_dot(versor p, versor q) { +glm_quat_dot(versor p, versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_dot(p, q); } +#endif /*! * @brief conjugate of quaternion @@ -267,12 +297,15 @@ glm_quat_dot(versor p, versor q) { * @param[in] q quaternion * @param[out] dest conjugate */ -CGLM_INLINE +CGLM_DECL void -glm_quat_conjugate(versor q, versor dest) { +glm_quat_conjugate(versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_negate_to(q, dest); dest[3] = -dest[3]; } +#endif /*! * @brief inverse of non-zero quaternion @@ -280,13 +313,16 @@ glm_quat_conjugate(versor q, versor dest) { * @param[in] q quaternion * @param[out] dest inverse quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_inv(versor q, versor dest) { +glm_quat_inv(versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) versor conj; glm_quat_conjugate(q, conj); glm_vec4_scale(conj, 1.0f / glm_vec4_norm2(q), dest); } +#endif /*! * @brief add (componentwise) two quaternions and store result in dest @@ -295,11 +331,14 @@ glm_quat_inv(versor q, versor dest) { * @param[in] q quaternion 2 * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_add(versor p, versor q, versor dest) { +glm_quat_add(versor p, versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_add(p, q, dest); } +#endif /*! * @brief subtract (componentwise) two quaternions and store result in dest @@ -308,22 +347,28 @@ glm_quat_add(versor p, versor q, versor dest) { * @param[in] q quaternion 2 * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_sub(versor p, versor q, versor dest) { +glm_quat_sub(versor p, versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_sub(p, q, dest); } +#endif /*! * @brief returns real part of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glm_quat_real(versor q) { +glm_quat_real(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ return q[3]; } +#endif /*! * @brief returns imaginary part of quaternion @@ -331,44 +376,55 @@ glm_quat_real(versor q) { * @param[in] q quaternion * @param[out] dest imag */ -CGLM_INLINE +CGLM_DECL void -glm_quat_imag(versor q, vec3 dest) { +glm_quat_imag(versor q, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = q[0]; dest[1] = q[1]; dest[2] = q[2]; } +#endif /*! * @brief returns normalized imaginary part of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_imagn(versor q, vec3 dest) { +glm_quat_imagn(versor q, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_normalize_to(q, dest); } +#endif /*! * @brief returns length of imaginary part of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glm_quat_imaglen(versor q) { +glm_quat_imaglen(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_norm(q); } +#endif /*! * @brief returns angle of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glm_quat_angle(versor q) { +glm_quat_angle(versor q) CGLM_ENDD +#ifndef CGLM_LIB +{ /* sin(theta / 2) = length(x*x + y*y + z*z) cos(theta / 2) = w @@ -376,6 +432,7 @@ glm_quat_angle(versor q) { */ return 2.0f * atan2f(glm_quat_imaglen(q), glm_quat_real(q)); } +#endif /*! * @brief axis of quaternion @@ -383,11 +440,14 @@ glm_quat_angle(versor q) { * @param[in] q quaternion * @param[out] dest axis of quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_axis(versor q, vec3 dest) { +glm_quat_axis(versor q, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_quat_imagn(q, dest); } +#endif /*! * @brief multiplies two quaternion and stores result in dest @@ -401,9 +461,11 @@ glm_quat_axis(versor q, vec3 dest) { * @param[in] q quaternion 2 * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_mul(versor p, versor q, versor dest) { +glm_quat_mul(versor p, versor q, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ /* + (a1 b2 + b1 a2 + c1 d2 − d1 c2)i + (a1 c2 − b1 d2 + c1 a2 + d1 b2)j @@ -419,6 +481,7 @@ glm_quat_mul(versor p, versor q, versor dest) { dest[3] = p[3] * q[3] - p[0] * q[0] - p[1] * q[1] - p[2] * q[2]; #endif } +#endif /*! * @brief convert quaternion to mat4 @@ -426,9 +489,11 @@ glm_quat_mul(versor p, versor q, versor dest) { * @param[in] q quaternion * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_quat_mat4(versor q, mat4 dest) { +glm_quat_mat4(versor q, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -466,6 +531,7 @@ glm_quat_mat4(versor q, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief convert quaternion to mat4 (transposed) @@ -473,9 +539,11 @@ glm_quat_mat4(versor q, mat4 dest) { * @param[in] q quaternion * @param[out] dest result matrix as transposed */ -CGLM_INLINE +CGLM_DECL void -glm_quat_mat4t(versor q, mat4 dest) { +glm_quat_mat4t(versor q, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -513,6 +581,7 @@ glm_quat_mat4t(versor q, mat4 dest) { dest[3][2] = 0.0f; dest[3][3] = 1.0f; } +#endif /*! * @brief convert quaternion to mat3 @@ -520,9 +589,11 @@ glm_quat_mat4t(versor q, mat4 dest) { * @param[in] q quaternion * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_quat_mat3(versor q, mat3 dest) { +glm_quat_mat3(versor q, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -552,6 +623,7 @@ glm_quat_mat3(versor q, mat3 dest) { dest[2][1] = yz - wx; dest[0][2] = xz - wy; } +#endif /*! * @brief convert quaternion to mat3 (transposed) @@ -559,9 +631,11 @@ glm_quat_mat3(versor q, mat3 dest) { * @param[in] q quaternion * @param[out] dest result matrix */ -CGLM_INLINE +CGLM_DECL void -glm_quat_mat3t(versor q, mat3 dest) { +glm_quat_mat3t(versor q, mat3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -591,6 +665,7 @@ glm_quat_mat3t(versor q, mat3 dest) { dest[1][2] = yz - wx; dest[2][0] = xz - wy; } +#endif /*! * @brief interpolates between two quaternions @@ -601,11 +676,14 @@ glm_quat_mat3t(versor q, mat3 dest) { * @param[in] t interpolant (amount) * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_lerp(versor from, versor to, float t, versor dest) { +glm_quat_lerp(versor from, versor to, float t, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_lerp(from, to, t, dest); } +#endif /*! * @brief interpolates between two quaternions @@ -616,11 +694,14 @@ glm_quat_lerp(versor from, versor to, float t, versor dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_lerpc(versor from, versor to, float t, versor dest) { +glm_quat_lerpc(versor from, versor to, float t, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_lerpc(from, to, t, dest); } +#endif /*! * @brief interpolates between two quaternions @@ -631,9 +712,11 @@ glm_quat_lerpc(versor from, versor to, float t, versor dest) { * @param[in] t amout * @param[out] dest result quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_slerp(versor from, versor to, float t, versor dest) { +glm_quat_slerp(versor from, versor to, float t, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) vec4 q1, q2; float cosTheta, sinTheta, angle; @@ -666,6 +749,7 @@ glm_quat_slerp(versor from, versor to, float t, versor dest) { glm_vec4_add(q1, q2, q1); glm_vec4_scale(q1, 1.0f / sinTheta, dest); } +#endif /*! * @brief creates view matrix using quaternion as camera orientation @@ -674,9 +758,11 @@ glm_quat_slerp(versor from, versor to, float t, versor dest) { * @param[in] ori orientation in world space as quaternion * @param[out] dest view matrix */ -CGLM_INLINE +CGLM_DECL void -glm_quat_look(vec3 eye, versor ori, mat4 dest) { +glm_quat_look(vec3 eye, versor ori, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ /* orientation */ glm_quat_mat4t(ori, dest); @@ -684,6 +770,7 @@ glm_quat_look(vec3 eye, versor ori, mat4 dest) { glm_mat4_mulv3(dest, eye, 1.0f, dest[3]); glm_vec3_negate(dest[3]); } +#endif /*! * @brief creates look rotation quaternion @@ -692,9 +779,11 @@ glm_quat_look(vec3 eye, versor ori, mat4 dest) { * @param[in] up up vector * @param[out] dest destination quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_for(vec3 dir, vec3 up, versor dest) { +glm_quat_for(vec3 dir, vec3 up, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3 m; glm_vec3_normalize_to(dir, m[2]); @@ -707,6 +796,7 @@ glm_quat_for(vec3 dir, vec3 up, versor dest) { glm_mat3_quat(m, dest); } +#endif /*! * @brief creates look rotation quaternion using source and @@ -717,13 +807,16 @@ glm_quat_for(vec3 dir, vec3 up, versor dest) { * @param[in] up up vector * @param[out] dest destination quaternion */ -CGLM_INLINE +CGLM_DECL void -glm_quat_forp(vec3 from, vec3 to, vec3 up, versor dest) { +glm_quat_forp(vec3 from, vec3 to, vec3 up, versor dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 dir; glm_vec3_sub(to, from, dir); glm_quat_for(dir, up, dest); } +#endif /*! * @brief rotate vector using using quaternion @@ -732,9 +825,11 @@ glm_quat_forp(vec3 from, vec3 to, vec3 up, versor dest) { * @param[in] v vector to rotate * @param[out] dest rotated vector */ -CGLM_INLINE +CGLM_DECL void -glm_quat_rotatev(versor q, vec3 v, vec3 dest) { +glm_quat_rotatev(versor q, vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) versor p; CGLM_ALIGN(8) vec3 u, v1, v2; float s; @@ -752,6 +847,7 @@ glm_quat_rotatev(versor q, vec3 v, vec3 dest) { glm_vec3_add(v1, v2, dest); } +#endif /*! * @brief rotate existing transform matrix using quaternion @@ -760,13 +856,16 @@ glm_quat_rotatev(versor q, vec3 v, vec3 dest) { * @param[in] q quaternion * @param[out] dest rotated matrix/transform */ -CGLM_INLINE +CGLM_DECL void -glm_quat_rotate(mat4 m, versor q, mat4 dest) { +glm_quat_rotate(mat4 m, versor q, mat4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4 rot; glm_quat_mat4(q, rot); glm_mul_rot(m, rot, dest); } +#endif /*! * @brief rotate existing transform matrix using quaternion at pivot point @@ -775,9 +874,11 @@ glm_quat_rotate(mat4 m, versor q, mat4 dest) { * @param[in] q quaternion * @param[out] pivot pivot */ -CGLM_INLINE +CGLM_DECL void -glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { +glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -786,6 +887,7 @@ glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { glm_quat_rotate(m, q, m); glm_translate(m, pivotInv); } +#endif /*! * @brief rotate NEW transform matrix using quaternion at pivot point @@ -799,9 +901,11 @@ glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { * @param[in] q quaternion * @param[in] pivot pivot */ -CGLM_INLINE +CGLM_DECL void -glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { +glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -810,5 +914,6 @@ glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { glm_quat_rotate(m, q, m); glm_translate(m, pivotInv); } +#endif #endif /* cglm_quat_h */ diff --git a/include/cglm/ray.h b/include/cglm/ray.h index f29bbde02..fe693aacb 100644 --- a/include/cglm/ray.h +++ b/include/cglm/ray.h @@ -7,7 +7,7 @@ /* Functions: - CGLM_INLINE bool glm_line_triangle_intersect(vec3 origin, + CGLM_DECL bool glm_line_triangle_intersect(vec3 origin, vec3 direction, vec3 v0, vec3 v1, @@ -32,14 +32,16 @@ * @param[out] intersection whether there is intersection */ -CGLM_INLINE +CGLM_DECL bool glm_ray_triangle(vec3 origin, vec3 direction, vec3 v0, vec3 v1, vec3 v2, - float *d) { + float *d) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 edge1, edge2, p, t, q; float det, inv_det, u, v, dist; const float epsilon = 0.000001f; @@ -77,5 +79,6 @@ glm_ray_triangle(vec3 origin, return dist > epsilon; } +#endif #endif diff --git a/include/cglm/sphere.h b/include/cglm/sphere.h index 334b83ae8..fda21457f 100644 --- a/include/cglm/sphere.h +++ b/include/cglm/sphere.h @@ -25,11 +25,14 @@ * * @return returns radii */ -CGLM_INLINE +CGLM_DECL float -glm_sphere_radii(vec4 s) { +glm_sphere_radii(vec4 s) CGLM_ENDD +#ifndef CGLM_LIB +{ return s[3]; } +#endif /*! * @brief apply transform to sphere, it is just wrapper for glm_mat4_mulv3 @@ -38,12 +41,15 @@ glm_sphere_radii(vec4 s) { * @param[in] m transform matrix * @param[out] dest transformed sphere */ -CGLM_INLINE +CGLM_DECL void -glm_sphere_transform(vec4 s, mat4 m, vec4 dest) { +glm_sphere_transform(vec4 s, mat4 m, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_mulv3(m, s, 1.0f, dest); dest[3] = s[3]; } +#endif /*! * @brief merges two spheres and creates a new one @@ -55,9 +61,11 @@ glm_sphere_transform(vec4 s, mat4 m, vec4 dest) { * @param[in] s2 sphere 2 * @param[out] dest merged/extended sphere */ -CGLM_INLINE +CGLM_DECL void -glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { +glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float dist, radii; dist = glm_vec3_distance(s1, s2); @@ -69,6 +77,7 @@ glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { glm_vec3_center(s1, s2, dest); dest[3] = radii; } +#endif /*! * @brief check if two sphere intersects @@ -76,11 +85,14 @@ glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { * @param[in] s1 sphere * @param[in] s2 other sphere */ -CGLM_INLINE +CGLM_DECL bool -glm_sphere_sphere(vec4 s1, vec4 s2) { +glm_sphere_sphere(vec4 s1, vec4 s2) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_distance2(s1, s2) <= glm_pow2(s1[3] + s2[3]); } +#endif /*! * @brief check if sphere intersects with point @@ -88,12 +100,15 @@ glm_sphere_sphere(vec4 s1, vec4 s2) { * @param[in] s sphere * @param[in] point point */ -CGLM_INLINE +CGLM_DECL bool -glm_sphere_point(vec4 s, vec3 point) { +glm_sphere_point(vec4 s, vec3 point) CGLM_ENDD +#ifndef CGLM_LIB +{ float rr; rr = s[3] * s[3]; return glm_vec3_distance2(point, s) <= rr; } +#endif #endif /* cglm_sphere_h */ diff --git a/include/cglm/struct/affine.h b/include/cglm/struct/affine.h index cd232268b..7b645a6b0 100644 --- a/include/cglm/struct/affine.h +++ b/include/cglm/struct/affine.h @@ -7,26 +7,26 @@ /* Functions: - CGLM_INLINE mat4s glms_translate(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_translate_x(mat4s m, float x); - CGLM_INLINE mat4s glms_translate_y(mat4s m, float y); - CGLM_INLINE mat4s glms_translate_z(mat4s m, float z); - CGLM_INLINE mat4s glms_translate_make(vec3s v); - CGLM_INLINE mat4s glms_scale_to(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_scale_make(vec3s v); - CGLM_INLINE mat4s glms_scale(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_scale_uni(mat4s m, float s); - CGLM_INLINE mat4s glms_rotate_x(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_make(float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); - CGLM_INLINE vec3s glms_decompose_scalev(mat4s m); - CGLM_INLINE bool glms_uniscaled(mat4s m); - CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s); - CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); + CGLM_DECL mat4s glms_translate(mat4s m, vec3s v); + CGLM_DECL mat4s glms_translate_x(mat4s m, float x); + CGLM_DECL mat4s glms_translate_y(mat4s m, float y); + CGLM_DECL mat4s glms_translate_z(mat4s m, float z); + CGLM_DECL mat4s glms_translate_make(vec3s v); + CGLM_DECL mat4s glms_scale_to(mat4s m, vec3s v); + CGLM_DECL mat4s glms_scale_make(vec3s v); + CGLM_DECL mat4s glms_scale(mat4s m, vec3s v); + CGLM_DECL mat4s glms_scale_uni(mat4s m, float s); + CGLM_DECL mat4s glms_rotate_x(mat4s m, float angle); + CGLM_DECL mat4s glms_rotate_y(mat4s m, float angle); + CGLM_DECL mat4s glms_rotate_z(mat4s m, float angle); + CGLM_DECL mat4s glms_rotate_make(float angle, vec3s axis); + CGLM_DECL mat4s glms_rotate(mat4s m, float angle, vec3s axis); + CGLM_DECL mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_DECL mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_DECL vec3s glms_decompose_scalev(mat4s m); + CGLM_DECL bool glms_uniscaled(mat4s m); + CGLM_DECL void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s); + CGLM_DECL void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); */ #ifndef cglms_affines_h @@ -47,12 +47,15 @@ * @param[in] v translate vector [x, y, z] * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_translate(mat4s m, vec3s v) { +glms_translate(mat4s m, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_translate(m.raw, v.raw); return m; } +#endif /*! * @brief translate existing transform matrix by x factor @@ -61,12 +64,15 @@ glms_translate(mat4s m, vec3s v) { * @param[in] x x factor * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_translate_x(mat4s m, float x) { +glms_translate_x(mat4s m, float x) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_translate_x(m.raw, x); return m; } +#endif /*! * @brief translate existing transform matrix by y factor @@ -75,12 +81,15 @@ glms_translate_x(mat4s m, float x) { * @param[in] y y factor * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_translate_y(mat4s m, float y) { +glms_translate_y(mat4s m, float y) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_translate_y(m.raw, y); return m; } +#endif /*! * @brief translate existing transform matrix by z factor @@ -89,12 +98,15 @@ glms_translate_y(mat4s m, float y) { * @param[in] z z factor * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_translate_z(mat4s m, float z) { +glms_translate_z(mat4s m, float z) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_translate_z(m.raw, z); return m; } +#endif /*! * @brief creates NEW translate transform matrix by v vector @@ -102,13 +114,16 @@ glms_translate_z(mat4s m, float z) { * @param[in] v translate vector [x, y, z] * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_translate_make(vec3s v) { +glms_translate_make(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s m; glm_translate_make(m.raw, v.raw); return m; } +#endif /*! * @brief creates NEW scale matrix by v vector @@ -116,13 +131,16 @@ glms_translate_make(vec3s v) { * @param[in] v scale vector [x, y, z] * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_scale_make(vec3s v) { +glms_scale_make(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s m; glm_scale_make(m.raw, v.raw); return m; } +#endif /*! * @brief scales existing transform matrix by v vector @@ -132,13 +150,16 @@ glms_scale_make(vec3s v) { * @param[in] v scale vector [x, y, z] * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_scale(mat4s m, vec3s v) { +glms_scale(mat4s m, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_scale_to(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief applies uniform scale to existing transform matrix v = [s, s, s] @@ -148,12 +169,15 @@ glms_scale(mat4s m, vec3s v) { * @param[in] s scale factor * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_scale_uni(mat4s m, float s) { +glms_scale_uni(mat4s m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_scale_uni(m.raw, s); return m; } +#endif /*! * @brief rotate existing transform matrix around X axis by angle @@ -163,13 +187,16 @@ glms_scale_uni(mat4s m, float s) { * @param[in] angle angle (radians) * @returns rotated matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_x(mat4s m, float angle) { +glms_rotate_x(mat4s m, float angle) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_rotate_x(m.raw, angle, r.raw); return r; } +#endif /*! * @brief rotate existing transform matrix around Y axis by angle @@ -179,13 +206,16 @@ glms_rotate_x(mat4s m, float angle) { * @param[in] angle angle (radians) * @returns rotated matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_y(mat4s m, float angle) { +glms_rotate_y(mat4s m, float angle) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_rotate_y(m.raw, angle, r.raw); return r; } +#endif /*! * @brief rotate existing transform matrix around Z axis by angle @@ -195,13 +225,16 @@ glms_rotate_y(mat4s m, float angle) { * @param[in] angle angle (radians) * @returns rotated matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_z(mat4s m, float angle) { +glms_rotate_z(mat4s m, float angle) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_rotate_z(m.raw, angle, r.raw); return r; } +#endif /*! * @brief creates NEW rotation matrix by angle and axis @@ -212,13 +245,16 @@ glms_rotate_z(mat4s m, float angle) { * @param[in] axis axis * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_make(float angle, vec3s axis) { +glms_rotate_make(float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s m; glm_rotate_make(m.raw, angle, axis.raw); return m; } +#endif /*! * @brief rotate existing transform matrix around given axis by angle @@ -228,12 +264,15 @@ glms_rotate_make(float angle, vec3s axis) { * @param[in] axis axis * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate(mat4s m, float angle, vec3s axis) { +glms_rotate(mat4s m, float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_rotate(m.raw, angle, axis.raw); return m; } +#endif /*! * @brief rotate existing transform @@ -245,12 +284,15 @@ glms_rotate(mat4s m, float angle, vec3s axis) { * @param[in] axis axis * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) { +glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_rotate_at(m.raw, pivot.raw, angle, axis.raw); return m; } +#endif /*! * @brief creates NEW rotation matrix by angle and axis at given point @@ -266,12 +308,15 @@ glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) { * @param[in] axis axis * @returns affine transfrom */ -CGLM_INLINE +CGLM_DECL mat4s -glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) { +glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_rotate_atm(m.raw, pivot.raw, angle, axis.raw); return m; } +#endif /*! * @brief decompose scale vector @@ -279,13 +324,16 @@ glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) { * @param[in] m affine transform * @returns scale vector (Sx, Sy, Sz) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_decompose_scalev(mat4s m) { +glms_decompose_scalev(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_decompose_scalev(m.raw, r.raw); return r; } +#endif /*! * @brief returns true if matrix is uniform scaled. This is helpful for @@ -295,11 +343,14 @@ glms_decompose_scalev(mat4s m) { * * @return boolean */ -CGLM_INLINE +CGLM_DECL bool -glms_uniscaled(mat4s m) { +glms_uniscaled(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_uniscaled(m.raw); } +#endif /*! * @brief decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz] @@ -309,11 +360,14 @@ glms_uniscaled(mat4s m) { * @param[out] r rotation matrix * @param[out] s scale matrix */ -CGLM_INLINE +CGLM_DECL void -glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) { +glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_decompose_rs(m.raw, r->raw, s->raw); } +#endif /*! * @brief decompose affine transform, TODO: extract shear factors. @@ -324,10 +378,13 @@ glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) { * @param[out] r rotation matrix (mat4) * @param[out] s scaling vector [X, Y, Z] */ -CGLM_INLINE +CGLM_DECL void -glms_decompose(mat4s m, vec4s * __restrict t, mat4s * __restrict r, vec3s * __restrict s) { +glms_decompose(mat4s m, vec4s * __restrict t, mat4s * __restrict r, vec3s * __restrict s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_decompose(m.raw, t->raw, r->raw, s->raw); } +#endif #endif /* cglms_affines_h */ diff --git a/include/cglm/struct/box.h b/include/cglm/struct/box.h index a55884fbd..d96c80be2 100644 --- a/include/cglm/struct/box.h +++ b/include/cglm/struct/box.h @@ -22,9 +22,11 @@ * @param[in] m transform matrix * @param[out] dest transformed bounding box */ -CGLM_INLINE +CGLM_DECL void -glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { +glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; vec3 rawDest[2]; @@ -32,6 +34,7 @@ glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { glm_aabb_transform(rawBox, m.raw, rawDest); glms_vec3_pack(dest, rawDest, 2); } +#endif /*! * @brief merges two AABB bounding box and creates new one @@ -43,9 +46,11 @@ glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { * @param[in] box2 bounding box 2 * @param[out] dest merged bounding box */ -CGLM_INLINE +CGLM_DECL void -glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { +glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox1[2]; vec3 rawBox2[2]; vec3 rawDest[2]; @@ -55,6 +60,7 @@ glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { glm_aabb_merge(rawBox1, rawBox2, rawDest); glms_vec3_pack(dest, rawDest, 2); } +#endif /*! * @brief crops a bounding box with another one. @@ -67,9 +73,11 @@ glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { * @param[in] cropBox crop box * @param[out] dest cropped bounding box */ -CGLM_INLINE +CGLM_DECL void -glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { +glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; vec3 rawCropBox[2]; vec3 rawDest[2]; @@ -79,6 +87,7 @@ glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { glm_aabb_crop(rawBox, rawCropBox, rawDest); glms_vec3_pack(dest, rawDest, 2); } +#endif /*! * @brief crops a bounding box with another one. @@ -92,15 +101,18 @@ glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { * @param[in] clampBox miniumum box * @param[out] dest cropped bounding box */ -CGLM_INLINE +CGLM_DECL void glms_aabb_crop_until(vec3s box[2], vec3s cropBox[2], vec3s clampBox[2], - vec3s dest[2]) { + vec3s dest[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ glms_aabb_crop(box, cropBox, dest); glms_aabb_merge(clampBox, dest, dest); } +#endif /*! * @brief check if AABB intersects with frustum planes @@ -116,9 +128,11 @@ glms_aabb_crop_until(vec3s box[2], * @param[in] box bounding box * @param[in] planes frustum planes */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { +glms_aabb_frustum(vec3s box[2], vec4s planes[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; vec4 rawPlanes[6]; @@ -126,53 +140,66 @@ glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { glms_vec4_unpack(rawPlanes, planes, 6); return glm_aabb_frustum(rawBox, rawPlanes); } +#endif /*! * @brief invalidate AABB min and max values * * @param[in, out] box bounding box */ -CGLM_INLINE +CGLM_DECL void -glms_aabb_invalidate(vec3s box[2]) { +glms_aabb_invalidate(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ box[0] = glms_vec3_broadcast(FLT_MAX); box[1] = glms_vec3_broadcast(-FLT_MAX); } +#endif /*! * @brief check if AABB is valid or not * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_isvalid(vec3s box[2]) { +glms_aabb_isvalid(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; glms_vec3_unpack(rawBox, box, 2); return glm_aabb_isvalid(rawBox); } +#endif /*! * @brief distance between of min and max * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL float -glms_aabb_size(vec3s box[2]) { +glms_aabb_size(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_distance(box[0].raw, box[1].raw); } +#endif /*! * @brief radius of sphere which surrounds AABB * * @param[in] box bounding box */ -CGLM_INLINE +CGLM_DECL float -glms_aabb_radius(vec3s box[2]) { +glms_aabb_radius(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glms_aabb_size(box) * 0.5f; } +#endif /*! * @brief computes center point of AABB @@ -180,11 +207,14 @@ glms_aabb_radius(vec3s box[2]) { * @param[in] box bounding box * @returns center of bounding box */ -CGLM_INLINE +CGLM_DECL vec3s -glms_aabb_center(vec3s box[2]) { +glms_aabb_center(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ return glms_vec3_center(box[0], box[1]); } +#endif /*! * @brief check if two AABB intersects @@ -192,9 +222,11 @@ glms_aabb_center(vec3s box[2]) { * @param[in] box bounding box * @param[in] other other bounding box */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_aabb(vec3s box[2], vec3s other[2]) { +glms_aabb_aabb(vec3s box[2], vec3s other[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; vec3 rawOther[2]; @@ -202,6 +234,7 @@ glms_aabb_aabb(vec3s box[2], vec3s other[2]) { glms_vec3_unpack(rawOther, other, 2); return glm_aabb_aabb(rawBox, rawOther); } +#endif /*! * @brief check if AABB intersects with sphere @@ -212,14 +245,17 @@ glms_aabb_aabb(vec3s box[2], vec3s other[2]) { * @param[in] box solid bounding box * @param[in] s solid sphere */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_sphere(vec3s box[2], vec4s s) { +glms_aabb_sphere(vec3s box[2], vec4s s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; glms_vec3_unpack(rawBox, box, 2); return glm_aabb_sphere(rawBox, s.raw); } +#endif /*! * @brief check if point is inside of AABB @@ -227,14 +263,17 @@ glms_aabb_sphere(vec3s box[2], vec4s s) { * @param[in] box bounding box * @param[in] point point */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_point(vec3s box[2], vec3s point) { +glms_aabb_point(vec3s box[2], vec3s point) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; glms_vec3_unpack(rawBox, box, 2); return glm_aabb_point(rawBox, point.raw); } +#endif /*! * @brief check if AABB contains other AABB @@ -242,9 +281,11 @@ glms_aabb_point(vec3s box[2], vec3s point) { * @param[in] box bounding box * @param[in] other other bounding box */ -CGLM_INLINE +CGLM_DECL bool -glms_aabb_contains(vec3s box[2], vec3s other[2]) { +glms_aabb_contains(vec3s box[2], vec3s other[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBox[2]; vec3 rawOther[2]; @@ -252,5 +293,6 @@ glms_aabb_contains(vec3s box[2], vec3s other[2]) { glms_vec3_unpack(rawOther, other, 2); return glm_aabb_contains(rawBox, rawOther); } +#endif #endif /* cglms_boxs_h */ diff --git a/include/cglm/struct/cam.h b/include/cglm/struct/cam.h index dc2427f26..1c1680c2e 100644 --- a/include/cglm/struct/cam.h +++ b/include/cglm/struct/cam.h @@ -7,40 +7,40 @@ /* Functions: - CGLM_INLINE mat4s glms_frustum(float left, float right, + CGLM_DECL mat4s glms_frustum(float left, float right, float bottom, float top, float nearVal, float farVal) - CGLM_INLINE mat4s glms_ortho(float left, float right, + CGLM_DECL mat4s glms_ortho(float left, float right, float bottom, float top, float nearVal, float farVal) - CGLM_INLINE mat4s glms_ortho_aabb(vec3s box[2]); - CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding); - CGLM_INLINE mat4s glms_ortho_aabb_pz(vec3s box[2], float padding); - CGLM_INLINE mat4s glms_ortho_default(float aspect) - CGLM_INLINE mat4s glms_ortho_default_s(float aspect, float size) - CGLM_INLINE mat4s glms_perspective(float fovy, + CGLM_DECL mat4s glms_ortho_aabb(vec3s box[2]); + CGLM_DECL mat4s glms_ortho_aabb_p(vec3s box[2], float padding); + CGLM_DECL mat4s glms_ortho_aabb_pz(vec3s box[2], float padding); + CGLM_DECL mat4s glms_ortho_default(float aspect) + CGLM_DECL mat4s glms_ortho_default_s(float aspect, float size) + CGLM_DECL mat4s glms_perspective(float fovy, float aspect, float nearVal, float farVal) - CGLM_INLINE void glms_persp_move_far(mat4s proj, float deltaFar) - CGLM_INLINE mat4s glms_perspective_default(float aspect) - CGLM_INLINE void glms_perspective_resize(mat4s proj, float aspect) - CGLM_INLINE mat4s glms_lookat(vec3s eye, vec3s center, vec3s up) - CGLM_INLINE mat4s glms_look(vec3s eye, vec3s dir, vec3s up) - CGLM_INLINE mat4s glms_look_anyup(vec3s eye, vec3s dir) - CGLM_INLINE void glms_persp_decomp(mat4s proj, + CGLM_DECL void glms_persp_move_far(mat4s proj, float deltaFar) + CGLM_DECL mat4s glms_perspective_default(float aspect) + CGLM_DECL void glms_perspective_resize(mat4s proj, float aspect) + CGLM_DECL mat4s glms_lookat(vec3s eye, vec3s center, vec3s up) + CGLM_DECL mat4s glms_look(vec3s eye, vec3s dir, vec3s up) + CGLM_DECL mat4s glms_look_anyup(vec3s eye, vec3s dir) + CGLM_DECL void glms_persp_decomp(mat4s proj, float *nearv, float *farv, float *top, float *bottom, float *left, float *right) - CGLM_INLINE void glms_persp_decompv(mat4s proj, float dest[6]) - CGLM_INLINE void glms_persp_decomp_x(mat4s proj, float *left, float *right) - CGLM_INLINE void glms_persp_decomp_y(mat4s proj, float *top, float *bottom) - CGLM_INLINE void glms_persp_decomp_z(mat4s proj, float *nearv, float *farv) - CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farVal) - CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearVal) - CGLM_INLINE float glms_persp_fovy(mat4s proj) - CGLM_INLINE float glms_persp_aspect(mat4s proj) - CGLM_INLINE vec4s glms_persp_sizes(mat4s proj, float fovy) + CGLM_DECL void glms_persp_decompv(mat4s proj, float dest[6]) + CGLM_DECL void glms_persp_decomp_x(mat4s proj, float *left, float *right) + CGLM_DECL void glms_persp_decomp_y(mat4s proj, float *top, float *bottom) + CGLM_DECL void glms_persp_decomp_z(mat4s proj, float *nearv, float *farv) + CGLM_DECL void glms_persp_decomp_far(mat4s proj, float *farVal) + CGLM_DECL void glms_persp_decomp_near(mat4s proj, float *nearVal) + CGLM_DECL float glms_persp_fovy(mat4s proj) + CGLM_DECL float glms_persp_aspect(mat4s proj) + CGLM_DECL vec4s glms_persp_sizes(mat4s proj, float fovy) */ #ifndef cglms_cam_h @@ -62,15 +62,18 @@ * @param[in] farVal far clipping plane * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s glms_frustum(float left, float right, float bottom, float top, - float nearVal, float farVal) { + float nearVal, float farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_frustum(left, right, bottom, top, nearVal, farVal, dest.raw); return dest; } +#endif /*! * @brief set up orthographic projection matrix @@ -83,15 +86,18 @@ glms_frustum(float left, float right, * @param[in] farVal far clipping plane * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s glms_ortho(float left, float right, float bottom, float top, - float nearVal, float farVal) { + float nearVal, float farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_ortho(left, right, bottom, top, nearVal, farVal, dest.raw); return dest; } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -101,9 +107,11 @@ glms_ortho(float left, float right, * @param[in] box AABB * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_ortho_aabb(vec3s box[2]) { +glms_ortho_aabb(vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; vec3 rawBox[2]; @@ -112,6 +120,7 @@ glms_ortho_aabb(vec3s box[2]) { return dest; } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -122,9 +131,11 @@ glms_ortho_aabb(vec3s box[2]) { * @param[in] padding padding * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_ortho_aabb_p(vec3s box[2], float padding) { +glms_ortho_aabb_p(vec3s box[2], float padding) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; vec3 rawBox[2]; @@ -133,6 +144,7 @@ glms_ortho_aabb_p(vec3s box[2], float padding) { return dest; } +#endif /*! * @brief set up orthographic projection matrix using bounding box @@ -143,9 +155,11 @@ glms_ortho_aabb_p(vec3s box[2], float padding) { * @param[in] padding padding for near and far * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_ortho_aabb_pz(vec3s box[2], float padding) { +glms_ortho_aabb_pz(vec3s box[2], float padding) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; vec3 rawBox[2]; @@ -154,6 +168,7 @@ glms_ortho_aabb_pz(vec3s box[2], float padding) { return dest; } +#endif /*! * @brief set up unit orthographic projection matrix @@ -161,13 +176,16 @@ glms_ortho_aabb_pz(vec3s box[2], float padding) { * @param[in] aspect aspect ration ( width / height ) * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_ortho_default(float aspect) { +glms_ortho_default(float aspect) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_ortho_default(aspect, dest.raw); return dest; } +#endif /*! * @brief set up orthographic projection matrix with given CUBE size @@ -176,13 +194,16 @@ glms_ortho_default(float aspect) { * @param[in] size cube size * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_ortho_default_s(float aspect, float size) { +glms_ortho_default_s(float aspect, float size) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_ortho_default_s(aspect, size, dest.raw); return dest; } +#endif /*! * @brief set up perspective projection matrix @@ -193,13 +214,16 @@ glms_ortho_default_s(float aspect, float size) { * @param[in] farVal far clipping planes * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_perspective(float fovy, float aspect, float nearVal, float farVal) { +glms_perspective(float fovy, float aspect, float nearVal, float farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_perspective(fovy, aspect, nearVal, farVal, dest.raw); return dest; } +#endif /*! * @brief extend perspective projection matrix's far distance @@ -209,11 +233,14 @@ glms_perspective(float fovy, float aspect, float nearVal, float farVal) { * @param[in, out] proj projection matrix to extend * @param[in] deltaFar distance from existing far (negative to shink) */ -CGLM_INLINE +CGLM_DECL void -glms_persp_move_far(mat4s proj, float deltaFar) { +glms_persp_move_far(mat4s proj, float deltaFar) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_move_far(proj.raw, deltaFar); } +#endif /*! * @brief set up perspective projection matrix with default near/far @@ -222,13 +249,16 @@ glms_persp_move_far(mat4s proj, float deltaFar) { * @param[in] aspect aspect ratio ( width / height ) * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_perspective_default(float aspect) { +glms_perspective_default(float aspect) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_perspective_default(aspect, dest.raw); return dest; } +#endif /*! * @brief resize perspective matrix by aspect ratio ( width / height ) @@ -238,11 +268,14 @@ glms_perspective_default(float aspect) { * @param[in, out] proj perspective projection matrix * @param[in] aspect aspect ratio ( width / height ) */ -CGLM_INLINE +CGLM_DECL void -glms_perspective_resize(mat4s proj, float aspect) { +glms_perspective_resize(mat4s proj, float aspect) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_perspective_resize(aspect, proj.raw); } +#endif /*! * @brief set up view matrix @@ -255,13 +288,16 @@ glms_perspective_resize(mat4s proj, float aspect) { * @param[in] up up vector * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_lookat(vec3s eye, vec3s center, vec3s up) { +glms_lookat(vec3s eye, vec3s center, vec3s up) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_lookat(eye.raw, center.raw, up.raw, dest.raw); return dest; } +#endif /*! * @brief set up view matrix @@ -277,13 +313,16 @@ glms_lookat(vec3s eye, vec3s center, vec3s up) { * @param[in] up up vector * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_look(vec3s eye, vec3s dir, vec3s up) { +glms_look(vec3s eye, vec3s dir, vec3s up) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_look(eye.raw, dir.raw, up.raw, dest.raw); return dest; } +#endif /*! * @brief set up view matrix @@ -295,13 +334,16 @@ glms_look(vec3s eye, vec3s dir, vec3s up) { * @param[in] dir direction vector * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_look_anyup(vec3s eye, vec3s dir) { +glms_look_anyup(vec3s eye, vec3s dir) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_look_anyup(eye.raw, dir.raw, dest.raw); return dest; } +#endif /*! * @brief decomposes frustum values of perspective projection. @@ -314,14 +356,17 @@ glms_look_anyup(vec3s eye, vec3s dir) { * @param[out] left left * @param[out] right right */ -CGLM_INLINE +CGLM_DECL void glms_persp_decomp(mat4s proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, float * __restrict bottom, - float * __restrict left, float * __restrict right) { + float * __restrict left, float * __restrict right) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp(proj.raw, nearVal, farVal, top, bottom, left, right); } +#endif /*! * @brief decomposes frustum values of perspective projection. @@ -330,11 +375,14 @@ glms_persp_decomp(mat4s proj, * @param[in] proj perspective projection matrix * @param[out] dest array */ -CGLM_INLINE +CGLM_DECL void -glms_persp_decompv(mat4s proj, float dest[6]) { +glms_persp_decompv(mat4s proj, float dest[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decompv(proj.raw, dest); } +#endif /*! * @brief decomposes left and right values of perspective projection. @@ -344,13 +392,16 @@ glms_persp_decompv(mat4s proj, float dest[6]) { * @param[out] left left * @param[out] right right */ -CGLM_INLINE +CGLM_DECL void glms_persp_decomp_x(mat4s proj, float * __restrict left, - float * __restrict right) { + float * __restrict right) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp_x(proj.raw, left, right); } +#endif /*! * @brief decomposes top and bottom values of perspective projection. @@ -360,13 +411,16 @@ glms_persp_decomp_x(mat4s proj, * @param[out] top top * @param[out] bottom bottom */ -CGLM_INLINE +CGLM_DECL void glms_persp_decomp_y(mat4s proj, float * __restrict top, - float * __restrict bottom) { + float * __restrict bottom) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp_y(proj.raw, top, bottom); } +#endif /*! * @brief decomposes near and far values of perspective projection. @@ -376,13 +430,16 @@ glms_persp_decomp_y(mat4s proj, * @param[out] nearVal near * @param[out] farVal far */ -CGLM_INLINE +CGLM_DECL void glms_persp_decomp_z(mat4s proj, float * __restrict nearVal, - float * __restrict farVal) { + float * __restrict farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp_z(proj.raw, nearVal, farVal); } +#endif /*! * @brief decomposes far value of perspective projection. @@ -390,11 +447,14 @@ glms_persp_decomp_z(mat4s proj, * @param[in] proj perspective projection matrix * @param[out] farVal far */ -CGLM_INLINE +CGLM_DECL void -glms_persp_decomp_far(mat4s proj, float * __restrict farVal) { +glms_persp_decomp_far(mat4s proj, float * __restrict farVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp_far(proj.raw, farVal); } +#endif /*! * @brief decomposes near value of perspective projection. @@ -402,11 +462,14 @@ glms_persp_decomp_far(mat4s proj, float * __restrict farVal) { * @param[in] proj perspective projection matrix * @param[out] nearVal near */ -CGLM_INLINE +CGLM_DECL void -glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) { +glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_persp_decomp_near(proj.raw, nearVal); } +#endif /*! * @brief returns field of view angle along the Y-axis (in radians) @@ -416,22 +479,28 @@ glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) { * * @param[in] proj perspective projection matrix */ -CGLM_INLINE +CGLM_DECL float -glms_persp_fovy(mat4s proj) { +glms_persp_fovy(mat4s proj) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_persp_fovy(proj.raw); } +#endif /*! * @brief returns aspect ratio of perspective projection * * @param[in] proj perspective projection matrix */ -CGLM_INLINE +CGLM_DECL float -glms_persp_aspect(mat4s proj) { +glms_persp_aspect(mat4s proj) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_persp_aspect(proj.raw); } +#endif /*! * @brief returns sizes of near and far planes of perspective projection @@ -440,12 +509,15 @@ glms_persp_aspect(mat4s proj) { * @param[in] fovy fovy (see brief) * @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar] */ -CGLM_INLINE +CGLM_DECL vec4s -glms_persp_sizes(mat4s proj, float fovy) { +glms_persp_sizes(mat4s proj, float fovy) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s dest; glm_persp_sizes(proj.raw, fovy, dest.raw); return dest; } +#endif #endif /* cglms_cam_h */ diff --git a/include/cglm/struct/color.h b/include/cglm/struct/color.h index 3ce78dae4..64e89b16a 100644 --- a/include/cglm/struct/color.h +++ b/include/cglm/struct/color.h @@ -18,10 +18,13 @@ * * @param[in] rgb RGB color */ -CGLM_INLINE +CGLM_DECL float -glms_luminance(vec3s rgb) { +glms_luminance(vec3s rgb) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_luminance(rgb.raw); } +#endif #endif /* cglms_colors_h */ diff --git a/include/cglm/struct/curve.h b/include/cglm/struct/curve.h index 53ea359e1..29074375d 100644 --- a/include/cglm/struct/curve.h +++ b/include/cglm/struct/curve.h @@ -31,10 +31,13 @@ * * @return B(s) */ -CGLM_INLINE +CGLM_DECL float -glms_smc(float s, mat4s m, vec4s c) { +glms_smc(float s, mat4s m, vec4s c) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_smc(s, m.raw, c.raw); } +#endif #endif /* cglms_curves_h */ diff --git a/include/cglm/struct/euler.h b/include/cglm/struct/euler.h index 657593026..dc6b43de4 100644 --- a/include/cglm/struct/euler.h +++ b/include/cglm/struct/euler.h @@ -18,14 +18,14 @@ enum glm_euler_seq Functions: - CGLM_INLINE vec3s glms_euler_angles(mat4s m) - CGLM_INLINE mat4s glms_euler_xyz(vec3s angles) - CGLM_INLINE mat4s glms_euler_xzy(vec3s angles) - CGLM_INLINE mat4s glms_euler_yxz(vec3s angles) - CGLM_INLINE mat4s glms_euler_yzx(vec3s angles) - CGLM_INLINE mat4s glms_euler_zxy(vec3s angles) - CGLM_INLINE mat4s glms_euler_zyx(vec3s angles) - CGLM_INLINE mat4s glms_euler_by_order(vec3s angles, glm_euler_seq ord) + CGLM_DECL vec3s glms_euler_angles(mat4s m) + CGLM_DECL mat4s glms_euler_xyz(vec3s angles) + CGLM_DECL mat4s glms_euler_xzy(vec3s angles) + CGLM_DECL mat4s glms_euler_yxz(vec3s angles) + CGLM_DECL mat4s glms_euler_yzx(vec3s angles) + CGLM_DECL mat4s glms_euler_zxy(vec3s angles) + CGLM_DECL mat4s glms_euler_zyx(vec3s angles) + CGLM_DECL mat4s glms_euler_by_order(vec3s angles, glm_euler_seq ord) */ #ifndef cglms_euler_h @@ -41,13 +41,16 @@ * @param[in] m affine transform * @returns angles vector [x, y, z] */ -CGLM_INLINE +CGLM_DECL vec3s -glms_euler_angles(mat4s m) { +glms_euler_angles(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s dest; glm_euler_angles(m.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -55,13 +58,16 @@ glms_euler_angles(mat4s m) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_xyz(vec3s angles) { +glms_euler_xyz(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_xyz(angles.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -69,13 +75,16 @@ glms_euler_xyz(vec3s angles) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_xzy(vec3s angles) { +glms_euler_xzy(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_xzy(angles.raw, dest.raw); return dest; } +#endif /*! @@ -84,13 +93,16 @@ glms_euler_xzy(vec3s angles) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_yxz(vec3s angles) { +glms_euler_yxz(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_yxz(angles.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -98,13 +110,16 @@ glms_euler_yxz(vec3s angles) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_yzx(vec3s angles) { +glms_euler_yzx(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_yzx(angles.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -112,13 +127,16 @@ glms_euler_yzx(vec3s angles) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_zxy(vec3s angles) { +glms_euler_zxy(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_zxy(angles.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -126,13 +144,16 @@ glms_euler_zxy(vec3s angles) { * @param[in] angles angles as vector [Xangle, Yangle, Zangle] * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_zyx(vec3s angles) { +glms_euler_zyx(vec3s angles) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_zyx(angles.raw, dest.raw); return dest; } +#endif /*! * @brief build rotation matrix from euler angles @@ -141,12 +162,15 @@ glms_euler_zyx(vec3s angles) { * @param[in] ord euler order * @returns rotation matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_euler_by_order(vec3s angles, glm_euler_seq ord) { +glms_euler_by_order(vec3s angles, glm_euler_seq ord) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_euler_by_order(angles.raw, ord, dest.raw); return dest; } +#endif #endif /* cglms_euler_h */ diff --git a/include/cglm/struct/frustum.h b/include/cglm/struct/frustum.h index 2c51d6d65..f15e40567 100644 --- a/include/cglm/struct/frustum.h +++ b/include/cglm/struct/frustum.h @@ -52,13 +52,16 @@ * @param[in] m matrix (see brief) * @param[out] dest extracted view frustum planes (see brief) */ -CGLM_INLINE +CGLM_DECL void -glms_frustum_planes(mat4s m, vec4s dest[6]) { +glms_frustum_planes(mat4s m, vec4s dest[6]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 rawDest[6]; glm_frustum_planes(m.raw, rawDest); glms_vec4_pack(dest, rawDest, 6); } +#endif /*! * @brief extracts view frustum corners using clip-space coordinates @@ -83,13 +86,16 @@ glms_frustum_planes(mat4s m, vec4s dest[6]) { * @param[in] invMat matrix (see brief) * @param[out] dest exracted view frustum corners (see brief) */ -CGLM_INLINE +CGLM_DECL void -glms_frustum_corners(mat4s invMat, vec4s dest[8]) { +glms_frustum_corners(mat4s invMat, vec4s dest[8]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 rawDest[8]; glm_frustum_corners(invMat.raw, rawDest); glms_vec4_pack(dest, rawDest, 8); } +#endif /*! * @brief finds center of view frustum @@ -97,9 +103,11 @@ glms_frustum_corners(mat4s invMat, vec4s dest[8]) { * @param[in] corners view frustum corners * @returns view frustum center */ -CGLM_INLINE +CGLM_DECL vec4s -glms_frustum_center(vec4s corners[8]) { +glms_frustum_center(vec4s corners[8]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 rawCorners[8]; vec4s r; @@ -107,6 +115,7 @@ glms_frustum_center(vec4s corners[8]) { glm_frustum_center(rawCorners, r.raw); return r; } +#endif /*! * @brief finds bounding box of frustum relative to given matrix e.g. view mat @@ -115,9 +124,11 @@ glms_frustum_center(vec4s corners[8]) { * @param[in] m matrix to convert existing conners * @param[out] box bounding box as array [min, max] */ -CGLM_INLINE +CGLM_DECL void -glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { +glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 rawCorners[8]; vec3 rawBox[2]; @@ -125,6 +136,7 @@ glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { glm_frustum_box(rawCorners, m.raw, rawBox); glms_vec3_pack(box, rawBox, 2); } +#endif /*! * @brief finds planes corners which is between near and far planes (parallel) @@ -138,12 +150,14 @@ glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { * @param[in] farDist far distance (zFar) * @param[out] planeCorners plane corners [LB, LT, RT, RB] */ -CGLM_INLINE +CGLM_DECL void glms_frustum_corners_at(vec4s corners[8], float splitDist, float farDist, - vec4s planeCorners[4]) { + vec4s planeCorners[4]) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 rawCorners[8]; vec4 rawPlaneCorners[4]; @@ -151,5 +165,6 @@ glms_frustum_corners_at(vec4s corners[8], glm_frustum_corners_at(rawCorners, splitDist, farDist, rawPlaneCorners); glms_vec4_pack(planeCorners, rawPlaneCorners, 8); } +#endif #endif /* cglms_frustums_h */ diff --git a/include/cglm/struct/io.h b/include/cglm/struct/io.h index ec28129e0..ee36ce108 100644 --- a/include/cglm/struct/io.h +++ b/include/cglm/struct/io.h @@ -7,12 +7,12 @@ /* Functions: - CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream); - CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream); - CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream); - CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream); - CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream); - CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream); + CGLM_DECL void glm_mat4_print(mat4 matrix, FILE *ostream); + CGLM_DECL void glm_mat3_print(mat3 matrix, FILE *ostream); + CGLM_DECL void glm_vec4_print(vec4 vec, FILE *ostream); + CGLM_DECL void glm_vec3_print(vec3 vec, FILE *ostream); + CGLM_DECL void glm_ivec3_print(ivec3 vec, FILE *ostream); + CGLM_DECL void glm_versor_print(versor vec, FILE *ostream); */ #ifndef cglms_ios_h @@ -25,58 +25,78 @@ #include #include -CGLM_INLINE +CGLM_DECL void glms_mat4_print(mat4s matrix, - FILE * __restrict ostream) { - + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_print(matrix.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_mat3_print(mat3s matrix, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat3_print(matrix.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_vec4_print(vec4s vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_print(vec.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_vec3_print(vec3s vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_print(vec.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_ivec3_print(ivec3s vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_ivec3_print(vec.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_versor_print(versors vec, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_versor_print(vec.raw, ostream); } +#endif -CGLM_INLINE +CGLM_DECL void glms_aabb_print(vec3s bbox[2], const char * __restrict tag, - FILE * __restrict ostream) { + FILE * __restrict ostream) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 rawBbox[2]; glms_vec3_unpack(rawBbox, bbox, 2); glm_aabb_print(rawBbox, tag, ostream); } +#endif #endif /* cglms_ios_h */ diff --git a/include/cglm/struct/mat2.h b/include/cglm/struct/mat2.h index c73f13cfa..a818ac6c8 100644 --- a/include/cglm/struct/mat2.h +++ b/include/cglm/struct/mat2.h @@ -13,20 +13,20 @@ GLM_MAT2_ZERO Functions: - CGLM_INLINE void glms_mat2_identity(mat2 mat) - CGLM_INLINE void glms_mat2_identity_array(mat2 * restrict mat, size_t count) - CGLM_INLINE void glms_mat2_zero(mat2 mat) - CGLM_INLINE void glms_mat2_mul(mat2 m1, mat2 m2, mat2 dest) - CGLM_INLINE void glms_mat2_transpose_to(mat2 m, mat2 dest) - CGLM_INLINE void glms_mat2_transpose(mat2 m) - CGLM_INLINE void glms_mat2_mulv(mat2 m, vec2 v, vec2 dest) - CGLM_INLINE float glms_mat2_trace(mat2 m) - CGLM_INLINE void glms_mat2_scale(mat2 m, float s) - CGLM_INLINE float glms_mat2_det(mat2 mat) - CGLM_INLINE void glms_mat2_inv(mat2 mat, mat2 dest) - CGLM_INLINE void glms_mat2_swap_col(mat2 mat, int col1, int col2) - CGLM_INLINE void glms_mat2_swap_row(mat2 mat, int row1, int row2) - CGLM_INLINE float glms_mat2_rmc(vec2 r, mat2 m, vec2 c) + CGLM_DECL void glms_mat2_identity(mat2 mat) + CGLM_DECL void glms_mat2_identity_array(mat2 * restrict mat, size_t count) + CGLM_DECL void glms_mat2_zero(mat2 mat) + CGLM_DECL void glms_mat2_mul(mat2 m1, mat2 m2, mat2 dest) + CGLM_DECL void glms_mat2_transpose_to(mat2 m, mat2 dest) + CGLM_DECL void glms_mat2_transpose(mat2 m) + CGLM_DECL void glms_mat2_mulv(mat2 m, vec2 v, vec2 dest) + CGLM_DECL float glms_mat2_trace(mat2 m) + CGLM_DECL void glms_mat2_scale(mat2 m, float s) + CGLM_DECL float glms_mat2_det(mat2 mat) + CGLM_DECL void glms_mat2_inv(mat2 mat, mat2 dest) + CGLM_DECL void glms_mat2_swap_col(mat2 mat, int col1, int col2) + CGLM_DECL void glms_mat2_swap_row(mat2 mat, int row1, int row2) + CGLM_DECL float glms_mat2_rmc(vec2 r, mat2 m, vec2 c) */ #ifndef cglms_mat2_h @@ -57,13 +57,16 @@ * * @returns identity matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_identity(void) { +glms_mat2_identity(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat2s r; glm_mat2_identity(r.raw); return r; } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -73,9 +76,11 @@ glms_mat2_identity(void) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glms_mat2_identity_array(mat2s * __restrict mat, size_t count) { +glms_mat2_identity_array(mat2s * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat2s t = GLMS_MAT2_IDENTITY_INIT; size_t i; @@ -83,19 +88,23 @@ glms_mat2_identity_array(mat2s * __restrict mat, size_t count) { glm_mat2_copy(t.raw, mat[i].raw); } } +#endif /*! * @brief make given matrix zero. * * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_zero(void) { +glms_mat2_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat2s r; glm_mat2_zero(r.raw); return r; } +#endif /*! * @brief multiply m1 and m2 to dest @@ -112,13 +121,16 @@ glms_mat2_zero(void) { * * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_mul(mat2s m1, mat2s m2) { +glms_mat2_mul(mat2s m1, mat2s m2) CGLM_ENDD +#ifndef CGLM_LIB +{ mat2s r; glm_mat2_mul(m1.raw, m2.raw, r.raw); return r; } +#endif /*! * @brief transpose mat2 @@ -127,12 +139,15 @@ glms_mat2_mul(mat2s m1, mat2s m2) { * * @returns transposed matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_transpose(mat2s m) { +glms_mat2_transpose(mat2s m) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat2_transpose(m.raw); return m; } +#endif /*! * @brief multiply mat2 with vec2 (column vector) and store in dest vector @@ -141,13 +156,16 @@ glms_mat2_transpose(mat2s m) { * @param[in] v vec2 (right, column vector) * @returns vec2 (result, column vector) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_mat2_mulv(mat2s m, vec2s v) { +glms_mat2_mulv(mat2s m, vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_mat2_mulv(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief trace of matrix @@ -156,11 +174,14 @@ glms_mat2_mulv(mat2s m, vec2s v) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glms_mat2_trace(mat2s m) { +glms_mat2_trace(mat2s m) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat2_trace(m.raw); } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -171,12 +192,15 @@ glms_mat2_trace(mat2s m) { * @param[in] s scalar * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_scale(mat2s m, float s) { +glms_mat2_scale(mat2s m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat2_scale(m.raw, s); return m; } +#endif /*! * @brief mat2 determinant @@ -185,11 +209,14 @@ glms_mat2_scale(mat2s m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glms_mat2_det(mat2s mat) { +glms_mat2_det(mat2s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat2_det(mat.raw); } +#endif /*! * @brief inverse mat2 and store in dest @@ -197,13 +224,16 @@ glms_mat2_det(mat2s mat) { * @param[in] mat matrix * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_inv(mat2s mat) { +glms_mat2_inv(mat2s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat2s r; glm_mat2_inv(mat.raw, r.raw); return r; } +#endif /*! * @brief swap two matrix columns @@ -213,12 +243,15 @@ glms_mat2_inv(mat2s mat) { * @param[in] col2 col2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_swap_col(mat2s mat, int col1, int col2) { +glms_mat2_swap_col(mat2s mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat2_swap_col(mat.raw, col1, col2); return mat; } +#endif /*! * @brief swap two matrix rows @@ -228,12 +261,15 @@ glms_mat2_swap_col(mat2s mat, int col1, int col2) { * @param[in] row2 row2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat2s -glms_mat2_swap_row(mat2s mat, int row1, int row2) { +glms_mat2_swap_row(mat2s mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat2_swap_row(mat.raw, row1, row2); return mat; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -249,10 +285,13 @@ glms_mat2_swap_row(mat2s mat, int row1, int row2) { * * @return scalar value e.g. Matrix1x1 */ -CGLM_INLINE +CGLM_DECL float -glms_mat2_rmc(vec2s r, mat2s m, vec2s c) { +glms_mat2_rmc(vec2s r, mat2s m, vec2s c) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat2_rmc(r.raw, m.raw, c.raw); } +#endif #endif /* cglms_mat2_h */ diff --git a/include/cglm/struct/mat3.h b/include/cglm/struct/mat3.h index 53a727338..4d99476f8 100644 --- a/include/cglm/struct/mat3.h +++ b/include/cglm/struct/mat3.h @@ -13,21 +13,21 @@ GLMS_MAT3_ZERO Functions: - CGLM_INLINE mat3s glms_mat3_copy(mat3s mat); - CGLM_INLINE mat3s glms_mat3_identity(void); - CGLM_INLINE void glms_mat3_identity_array(mat3s * __restrict mat, size_t count); - CGLM_INLINE mat3s glms_mat3_zero(void); - CGLM_INLINE mat3s glms_mat3_mul(mat3s m1, mat3s m2); - CGLM_INLINE ma3s glms_mat3_transpose(mat3s m); - CGLM_INLINE vec3s glms_mat3_mulv(mat3s m, vec3s v); - CGLM_INLINE float glms_mat3_trace(mat3s m); - CGLM_INLINE versor glms_mat3_quat(mat3s m); - CGLM_INLINE mat3s glms_mat3_scale(mat3s m, float s); - CGLM_INLINE float glms_mat3_det(mat3s mat); - CGLM_INLINE mat3s glms_mat3_inv(mat3s mat); - CGLM_INLINE mat3s glms_mat3_swap_col(mat3s mat, int col1, int col2); - CGLM_INLINE mat3s glms_mat3_swap_row(mat3s mat, int row1, int row2); - CGLM_INLINE float glms_mat3_rmc(vec3s r, mat3s m, vec3s c); + CGLM_DECL mat3s glms_mat3_copy(mat3s mat); + CGLM_DECL mat3s glms_mat3_identity(void); + CGLM_DECL void glms_mat3_identity_array(mat3s * __restrict mat, size_t count); + CGLM_DECL mat3s glms_mat3_zero(void); + CGLM_DECL mat3s glms_mat3_mul(mat3s m1, mat3s m2); + CGLM_DECL ma3s glms_mat3_transpose(mat3s m); + CGLM_DECL vec3s glms_mat3_mulv(mat3s m, vec3s v); + CGLM_DECL float glms_mat3_trace(mat3s m); + CGLM_DECL versor glms_mat3_quat(mat3s m); + CGLM_DECL mat3s glms_mat3_scale(mat3s m, float s); + CGLM_DECL float glms_mat3_det(mat3s mat); + CGLM_DECL mat3s glms_mat3_inv(mat3s mat); + CGLM_DECL mat3s glms_mat3_swap_col(mat3s mat, int col1, int col2); + CGLM_DECL mat3s glms_mat3_swap_row(mat3s mat, int row1, int row2); + CGLM_DECL float glms_mat3_rmc(vec3s r, mat3s m, vec3s c); */ #ifndef cglms_mat3s_h @@ -51,13 +51,16 @@ * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_copy(mat3s mat) { +glms_mat3_copy(mat3s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat3_copy(mat.raw, r.raw); return r; } +#endif /*! * @brief make given matrix identity. It is identical with below, @@ -73,13 +76,16 @@ glms_mat3_copy(mat3s mat) { * * @returns destination */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_identity(void) { +glms_mat3_identity(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat3_identity(r.raw); return r; } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -89,9 +95,11 @@ glms_mat3_identity(void) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glms_mat3_identity_array(mat3s * __restrict mat, size_t count) { +glms_mat3_identity_array(mat3s * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat3s t = GLMS_MAT3_IDENTITY_INIT; size_t i; @@ -99,19 +107,23 @@ glms_mat3_identity_array(mat3s * __restrict mat, size_t count) { glm_mat3_copy(t.raw, mat[i].raw); } } +#endif /*! * @brief make given matrix zero. * * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_zero(void) { +glms_mat3_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat3_zero(r.raw); return r; } +#endif /*! * @brief multiply m1 and m2 to dest @@ -127,25 +139,31 @@ glms_mat3_zero(void) { * @param[in] m2 right matrix * @returns destination matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_mul(mat3s m1, mat3s m2) { +glms_mat3_mul(mat3s m1, mat3s m2) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat3_mul(m1.raw, m2.raw, r.raw); return r; } +#endif /*! * @brief tranpose mat3 and store result in same matrix * * @param[in, out] m source and dest */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_transpose(mat3s m) { +glms_mat3_transpose(mat3s m) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat3_transpose(m.raw); return m; } +#endif /*! * @brief multiply mat3 with vec3 (column vector) and store in dest vector @@ -154,13 +172,16 @@ glms_mat3_transpose(mat3s m) { * @param[in] v vec3 (right, column vector) * @returns vec3 (result, column vector) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_mat3_mulv(mat3s m, vec3s v) { +glms_mat3_mulv(mat3s m, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_mat3_mulv(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief trace of matrix @@ -169,11 +190,14 @@ glms_mat3_mulv(mat3s m, vec3s v) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glms_mat3_trace(mat3s m) { +glms_mat3_trace(mat3s m) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat3_trace(m.raw); } +#endif /*! * @brief convert mat3 to quaternion @@ -181,13 +205,16 @@ glms_mat3_trace(mat3s m) { * @param[in] m rotation matrix * @returns destination quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_mat3_quat(mat3s m) { +glms_mat3_quat(mat3s m) CGLM_ENDD +#ifndef CGLM_LIB +{ versors r; glm_mat3_quat(m.raw, r.raw); return r; } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -198,12 +225,15 @@ glms_mat3_quat(mat3s m) { * @param[in] s scalar * @returns scaled matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_scale(mat3s m, float s) { +glms_mat3_scale(mat3s m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat3_scale(m.raw, s); return m; } +#endif /*! * @brief mat3 determinant @@ -212,11 +242,14 @@ glms_mat3_scale(mat3s m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glms_mat3_det(mat3s mat) { +glms_mat3_det(mat3s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat3_det(mat.raw); } +#endif /*! * @brief inverse mat3 and store in dest @@ -224,13 +257,16 @@ glms_mat3_det(mat3s mat) { * @param[in] mat matrix * @returns inverse matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_inv(mat3s mat) { +glms_mat3_inv(mat3s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat3_inv(mat.raw, r.raw); return r; } +#endif /*! * @brief swap two matrix columns @@ -240,12 +276,15 @@ glms_mat3_inv(mat3s mat) { * @param[in] col2 col2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_swap_col(mat3s mat, int col1, int col2) { +glms_mat3_swap_col(mat3s mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat3_swap_col(mat.raw, col1, col2); return mat; } +#endif /*! * @brief swap two matrix rows @@ -255,12 +294,15 @@ glms_mat3_swap_col(mat3s mat, int col1, int col2) { * @param[in] row2 row2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat3_swap_row(mat3s mat, int row1, int row2) { +glms_mat3_swap_row(mat3s mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat3_swap_row(mat.raw, row1, row2); return mat; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -276,10 +318,13 @@ glms_mat3_swap_row(mat3s mat, int row1, int row2) { * * @return scalar value e.g. Matrix1x1 */ -CGLM_INLINE +CGLM_DECL float -glms_mat3_rmc(vec3s r, mat3s m, vec3s c) { +glms_mat3_rmc(vec3s r, mat3s m, vec3s c) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat3_rmc(r.raw, m.raw, c.raw); } +#endif #endif /* cglms_mat3s_h */ diff --git a/include/cglm/struct/mat4.h b/include/cglm/struct/mat4.h index 28f80a360..b3ad50633 100644 --- a/include/cglm/struct/mat4.h +++ b/include/cglm/struct/mat4.h @@ -18,30 +18,30 @@ GLMS_MAT4_ZERO Functions: - CGLM_INLINE mat4s glms_mat4_ucopy(mat4s mat); - CGLM_INLINE mat4s glms_mat4_copy(mat4s mat); - CGLM_INLINE mat4s glms_mat4_identity(void); - CGLM_INLINE void glms_mat4_identity_array(mat4s * __restrict mat, size_t count); - CGLM_INLINE mat4s glms_mat4_zero(void); - CGLM_INLINE mat3s glms_mat4_pick3(mat4s mat); - CGLM_INLINE mat3s glms_mat4_pick3t(mat4s mat); - CGLM_INLINE mat4s glms_mat4_ins3(mat3s mat); - CGLM_INLINE mat4s glms_mat4_mul(mat4s m1, mat4s m2); - CGLM_INLINE mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len); - CGLM_INLINE vec4s glms_mat4_mulv(mat4s m, vec4s v); - CGLM_INLINE float glms_mat4_trace(mat4s m); - CGLM_INLINE float glms_mat4_trace3(mat4s m); - CGLM_INLINE versors glms_mat4_quat(mat4s m); - CGLM_INLINE vec3s glms_mat4_mulv3(mat4s m, vec3s v, float last); - CGLM_INLINE mat4s glms_mat4_transpose(mat4s m); - CGLM_INLINE mat4s glms_mat4_scale_p(mat4s m, float s); - CGLM_INLINE mat4s glms_mat4_scale(mat4s m, float s); - CGLM_INLINE float glms_mat4_det(mat4s mat); - CGLM_INLINE mat4s glms_mat4_inv(mat4s mat); - CGLM_INLINE mat4s glms_mat4_inv_fast(mat4s mat); - CGLM_INLINE mat4s glms_mat4_swap_col(mat4s mat, int col1, int col2); - CGLM_INLINE mat4s glms_mat4_swap_row(mat4s mat, int row1, int row2); - CGLM_INLINE float glms_mat4_rmc(vec4s r, mat4s m, vec4s c); + CGLM_DECL mat4s glms_mat4_ucopy(mat4s mat); + CGLM_DECL mat4s glms_mat4_copy(mat4s mat); + CGLM_DECL mat4s glms_mat4_identity(void); + CGLM_DECL void glms_mat4_identity_array(mat4s * __restrict mat, size_t count); + CGLM_DECL mat4s glms_mat4_zero(void); + CGLM_DECL mat3s glms_mat4_pick3(mat4s mat); + CGLM_DECL mat3s glms_mat4_pick3t(mat4s mat); + CGLM_DECL mat4s glms_mat4_ins3(mat3s mat); + CGLM_DECL mat4s glms_mat4_mul(mat4s m1, mat4s m2); + CGLM_DECL mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len); + CGLM_DECL vec4s glms_mat4_mulv(mat4s m, vec4s v); + CGLM_DECL float glms_mat4_trace(mat4s m); + CGLM_DECL float glms_mat4_trace3(mat4s m); + CGLM_DECL versors glms_mat4_quat(mat4s m); + CGLM_DECL vec3s glms_mat4_mulv3(mat4s m, vec3s v, float last); + CGLM_DECL mat4s glms_mat4_transpose(mat4s m); + CGLM_DECL mat4s glms_mat4_scale_p(mat4s m, float s); + CGLM_DECL mat4s glms_mat4_scale(mat4s m, float s); + CGLM_DECL float glms_mat4_det(mat4s mat); + CGLM_DECL mat4s glms_mat4_inv(mat4s mat); + CGLM_DECL mat4s glms_mat4_inv_fast(mat4s mat); + CGLM_DECL mat4s glms_mat4_swap_col(mat4s mat, int col1, int col2); + CGLM_DECL mat4s glms_mat4_swap_row(mat4s mat, int row1, int row2); + CGLM_DECL float glms_mat4_rmc(vec4s r, mat4s m, vec4s c); */ #ifndef cglms_mat4s_h @@ -69,13 +69,16 @@ * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_ucopy(mat4s mat) { +glms_mat4_ucopy(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_ucopy(mat.raw, r.raw); return r; } +#endif /*! * @brief copy all members of [mat] to [dest] @@ -83,13 +86,16 @@ glms_mat4_ucopy(mat4s mat) { * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_copy(mat4s mat) { +glms_mat4_copy(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_copy(mat.raw, r.raw); return r; } +#endif /*! * @brief make given matrix identity. It is identical with below, @@ -105,13 +111,16 @@ glms_mat4_copy(mat4s mat) { * * @retuns destination */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_identity(void) { +glms_mat4_identity(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_identity(r.raw); return r; } +#endif /*! * @brief make given matrix array's each element identity matrix @@ -121,9 +130,11 @@ glms_mat4_identity(void) { * * @param[in] count count of matrices */ -CGLM_INLINE +CGLM_DECL void -glms_mat4_identity_array(mat4s * __restrict mat, size_t count) { +glms_mat4_identity_array(mat4s * __restrict mat, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4s t = GLMS_MAT4_IDENTITY_INIT; size_t i; @@ -131,19 +142,23 @@ glms_mat4_identity_array(mat4s * __restrict mat, size_t count) { glm_mat4_copy(t.raw, mat[i].raw); } } +#endif /*! * @brief make given matrix zero. * * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_zero(void) { +glms_mat4_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_zero(r.raw); return r; } +#endif /*! * @brief copy upper-left of mat4 to mat3 @@ -151,13 +166,16 @@ glms_mat4_zero(void) { * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat4_pick3(mat4s mat) { +glms_mat4_pick3(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat4_pick3(mat.raw, r.raw); return r; } +#endif /*! * @brief copy upper-left of mat4 to mat3 (transposed) @@ -167,13 +185,16 @@ glms_mat4_pick3(mat4s mat) { * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat3s -glms_mat4_pick3t(mat4s mat) { +glms_mat4_pick3t(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s r; glm_mat4_pick3t(mat.raw, r.raw); return r; } +#endif /*! * @brief copy mat3 to mat4's upper-left @@ -181,13 +202,16 @@ glms_mat4_pick3t(mat4s mat) { * @param[in] mat source * @returns destination */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_ins3(mat3s mat) { +glms_mat4_ins3(mat3s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_ins3(mat.raw, r.raw); return r; } +#endif /*! * @brief multiply m1 and m2 to dest @@ -203,13 +227,16 @@ glms_mat4_ins3(mat3s mat) { * @param[in] m2 right matrix * @returns destination matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_mul(mat4s m1, mat4s m2) { +glms_mat4_mul(mat4s m1, mat4s m2) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_mul(m1.raw, m2.raw, r.raw); return r; } +#endif /*! * @brief mupliply N mat4 matrices and store result in dest @@ -230,9 +257,11 @@ glms_mat4_mul(mat4s m1, mat4s m2) { * @param[in] len matrices count * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { +glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN_MAT mat4s r = GLMS_MAT4_IDENTITY_INIT; size_t i; @@ -242,6 +271,7 @@ glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { return r; } +#endif /*! * @brief multiply mat4 with vec4 (column vector) and store in dest vector @@ -250,13 +280,16 @@ glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { * @param[in] v vec4 (right, column vector) * @returns vec4 (result, column vector) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_mat4_mulv(mat4s m, vec4s v) { +glms_mat4_mulv(mat4s m, vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_mat4_mulv(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief trace of matrix @@ -265,11 +298,14 @@ glms_mat4_mulv(mat4s m, vec4s v) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glms_mat4_trace(mat4s m) { +glms_mat4_trace(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat4_trace(m.raw); } +#endif /*! * @brief trace of matrix (rotation part) @@ -278,11 +314,14 @@ glms_mat4_trace(mat4s m) { * * @param[in] m matrix */ -CGLM_INLINE +CGLM_DECL float -glms_mat4_trace3(mat4s m) { +glms_mat4_trace3(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat4_trace3(m.raw); } +#endif /*! * @brief convert mat4's rotation part to quaternion @@ -290,13 +329,16 @@ glms_mat4_trace3(mat4s m) { * @param[in] m affine matrix * @returns destination quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_mat4_quat(mat4s m) { +glms_mat4_quat(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ versors r; glm_mat4_quat(m.raw, r.raw); return r; } +#endif /*! * @brief multiply vector with mat4 @@ -306,13 +348,16 @@ glms_mat4_quat(mat4s m) { * @param[in] last 4th item to make it vec4 * @returns result vector (vec3) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_mat4_mulv3(mat4s m, vec3s v, float last) { +glms_mat4_mulv3(mat4s m, vec3s v, float last) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_mat4_mulv3(m.raw, v.raw, last, r.raw); return r; } +#endif /*! * @brief tranpose mat4 and store result in same matrix @@ -320,12 +365,15 @@ glms_mat4_mulv3(mat4s m, vec3s v, float last) { * @param[in] m source * @returns result */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_transpose(mat4s m) { +glms_mat4_transpose(mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_transpose(m.raw); return m; } +#endif /*! * @brief scale (multiply with scalar) matrix without simd optimization @@ -336,12 +384,15 @@ glms_mat4_transpose(mat4s m) { * @param[in] s scalar * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_scale_p(mat4s m, float s) { +glms_mat4_scale_p(mat4s m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_scale_p(m.raw, s); return m; } +#endif /*! * @brief scale (multiply with scalar) matrix @@ -352,12 +403,15 @@ glms_mat4_scale_p(mat4s m, float s) { * @param[in] s scalar * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_scale(mat4s m, float s) { +glms_mat4_scale(mat4s m, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_scale(m.raw, s); return m; } +#endif /*! * @brief mat4 determinant @@ -366,11 +420,14 @@ glms_mat4_scale(mat4s m, float s) { * * @return determinant */ -CGLM_INLINE +CGLM_DECL float -glms_mat4_det(mat4s mat) { +glms_mat4_det(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat4_det(mat.raw); } +#endif /*! * @brief inverse mat4 and store in dest @@ -378,13 +435,16 @@ glms_mat4_det(mat4s mat) { * @param[in] mat matrix * @returns inverse matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_inv(mat4s mat) { +glms_mat4_inv(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_inv(mat.raw, r.raw); return r; } +#endif /*! * @brief inverse mat4 and store in dest @@ -398,13 +458,16 @@ glms_mat4_inv(mat4s mat) { * @param[in] mat matrix * @returns inverse matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_inv_fast(mat4s mat) { +glms_mat4_inv_fast(mat4s mat) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s r; glm_mat4_inv_fast(mat.raw, r.raw); return r; } +#endif /*! * @brief swap two matrix columns @@ -414,12 +477,15 @@ glms_mat4_inv_fast(mat4s mat) { * @param[in] col2 col2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_swap_col(mat4s mat, int col1, int col2) { +glms_mat4_swap_col(mat4s mat, int col1, int col2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_swap_col(mat.raw, col1, col2); return mat; } +#endif /*! * @brief swap two matrix rows @@ -429,12 +495,15 @@ glms_mat4_swap_col(mat4s mat, int col1, int col2) { * @param[in] row2 row2 * @returns matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_mat4_swap_row(mat4s mat, int row1, int row2) { +glms_mat4_swap_row(mat4s mat, int row1, int row2) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_mat4_swap_row(mat.raw, row1, row2); return mat; } +#endif /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) @@ -450,10 +519,13 @@ glms_mat4_swap_row(mat4s mat, int row1, int row2) { * * @return scalar value e.g. B(s) */ -CGLM_INLINE +CGLM_DECL float -glms_mat4_rmc(vec4s r, mat4s m, vec4s c) { +glms_mat4_rmc(vec4s r, mat4s m, vec4s c) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_mat4_rmc(r.raw, m.raw, c.raw); } +#endif #endif /* cglms_mat4s_h */ diff --git a/include/cglm/struct/plane.h b/include/cglm/struct/plane.h index 6a84ac787..423b5a770 100644 --- a/include/cglm/struct/plane.h +++ b/include/cglm/struct/plane.h @@ -21,7 +21,7 @@ /* Functions: - CGLM_INLINE vec4s glms_plane_normalize(vec4s plane); + CGLM_DECL vec4s glms_plane_normalize(vec4s plane); */ /*! @@ -30,11 +30,14 @@ * @param[in] plane plane to normalize * @returns normalized plane */ -CGLM_INLINE +CGLM_DECL vec4s -glms_plane_normalize(vec4s plane) { +glms_plane_normalize(vec4s plane) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_plane_normalize(plane.raw); return plane; } +#endif #endif /* cglms_planes_h */ diff --git a/include/cglm/struct/project.h b/include/cglm/struct/project.h index 8a2635fc8..76823409b 100644 --- a/include/cglm/struct/project.h +++ b/include/cglm/struct/project.h @@ -41,13 +41,16 @@ * @param[in] vp viewport as [x, y, width, height] * @returns unprojected coordinates */ -CGLM_INLINE +CGLM_DECL vec3s -glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) { +glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_unprojecti(pos.raw, invMat.raw, vp.raw, r.raw); return r; } +#endif /*! * @brief maps the specified viewport coordinates into specified space [1] @@ -73,13 +76,16 @@ glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) { * @param[in] vp viewport as [x, y, width, height] * @returns unprojected coordinates */ -CGLM_INLINE +CGLM_DECL vec3s -glms_unproject(vec3s pos, mat4s m, vec4s vp) { +glms_unproject(vec3s pos, mat4s m, vec4s vp) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_unproject(pos.raw, m.raw, vp.raw, r.raw); return r; } +#endif /*! * @brief map object coordinates to window coordinates @@ -93,12 +99,15 @@ glms_unproject(vec3s pos, mat4s m, vec4s vp) { * @param[in] vp viewport as [x, y, width, height] * @returns projected coordinates */ -CGLM_INLINE +CGLM_DECL vec3s -glms_project(vec3s pos, mat4s m, vec4s vp) { +glms_project(vec3s pos, mat4s m, vec4s vp) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_project(pos.raw, m.raw, vp.raw, r.raw); return r; } +#endif #endif /* cglms_projects_h */ diff --git a/include/cglm/struct/quat.h b/include/cglm/struct/quat.h index 8b3774acd..899589635 100644 --- a/include/cglm/struct/quat.h +++ b/include/cglm/struct/quat.h @@ -11,37 +11,37 @@ GLMS_QUAT_IDENTITY Functions: - CGLM_INLINE versors glms_quat_identity(void) - CGLM_INLINE void glms_quat_identity_array(versor *q, size_t count) - CGLM_INLINE versors glms_quat_init(float x, float y, float z, float w) - CGLM_INLINE versors glms_quatv(float angle, vec3s axis) - CGLM_INLINE versors glms_quat(float angle, float x, float y, float z) - CGLM_INLINE float glms_quat_norm(versors q) - CGLM_INLINE versors glms_quat_normalize(versors q) - CGLM_INLINE float glms_quat_dot(versors p, versors q) - CGLM_INLINE versors glms_quat_conjugate(versors q) - CGLM_INLINE versors glms_quat_inv(versors q) - CGLM_INLINE versors glms_quat_add(versors p, versors q) - CGLM_INLINE versors glms_quat_sub(versors p, versors q) - CGLM_INLINE vec3s glms_quat_imagn(versors q) - CGLM_INLINE float glms_quat_imaglen(versors q) - CGLM_INLINE float glms_quat_angle(versors q) - CGLM_INLINE vec3s glms_quat_axis(versors q) - CGLM_INLINE versors glms_quat_mul(versors p, versors q) - CGLM_INLINE mat4s glms_quat_mat4(versors q) - CGLM_INLINE mat4s glms_quat_mat4t(versors q) - CGLM_INLINE mat3s glms_quat_mat3(versors q) - CGLM_INLINE mat3s glms_quat_mat3t(versors q) - CGLM_INLINE versors glms_quat_lerp(versors from, versors to, float t) - CGLM_INLINE versors glms_quat_lerpc(versors from, versors to, float t) - CGLM_INLINE versors glms_quat_slerp(versors from, versors to, float t) - CGLM_INLINE mat4s. glms_quat_look(vec3s eye, versors ori) - CGLM_INLINE versors glms_quat_for(vec3s dir, vec3s fwd, vec3s up) - CGLM_INLINE versors glms_quat_forp(vec3s from, vec3s to, vec3s fwd, vec3s up) - CGLM_INLINE vec3s glms_quat_rotatev(versors q, vec3s v) - CGLM_INLINE mat4s glms_quat_rotate(mat4s m, versors q) - CGLM_INLINE mat4s glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) - CGLM_INLINE mat4s glms_quat_rotate_atm(versors q, vec3s pivot) + CGLM_DECL versors glms_quat_identity(void) + CGLM_DECL void glms_quat_identity_array(versor *q, size_t count) + CGLM_DECL versors glms_quat_init(float x, float y, float z, float w) + CGLM_DECL versors glms_quatv(float angle, vec3s axis) + CGLM_DECL versors glms_quat(float angle, float x, float y, float z) + CGLM_DECL float glms_quat_norm(versors q) + CGLM_DECL versors glms_quat_normalize(versors q) + CGLM_DECL float glms_quat_dot(versors p, versors q) + CGLM_DECL versors glms_quat_conjugate(versors q) + CGLM_DECL versors glms_quat_inv(versors q) + CGLM_DECL versors glms_quat_add(versors p, versors q) + CGLM_DECL versors glms_quat_sub(versors p, versors q) + CGLM_DECL vec3s glms_quat_imagn(versors q) + CGLM_DECL float glms_quat_imaglen(versors q) + CGLM_DECL float glms_quat_angle(versors q) + CGLM_DECL vec3s glms_quat_axis(versors q) + CGLM_DECL versors glms_quat_mul(versors p, versors q) + CGLM_DECL mat4s glms_quat_mat4(versors q) + CGLM_DECL mat4s glms_quat_mat4t(versors q) + CGLM_DECL mat3s glms_quat_mat3(versors q) + CGLM_DECL mat3s glms_quat_mat3t(versors q) + CGLM_DECL versors glms_quat_lerp(versors from, versors to, float t) + CGLM_DECL versors glms_quat_lerpc(versors from, versors to, float t) + CGLM_DECL versors glms_quat_slerp(versors from, versors to, float t) + CGLM_DECL mat4s. glms_quat_look(vec3s eye, versors ori) + CGLM_DECL versors glms_quat_for(vec3s dir, vec3s fwd, vec3s up) + CGLM_DECL versors glms_quat_forp(vec3s from, vec3s to, vec3s fwd, vec3s up) + CGLM_DECL vec3s glms_quat_rotatev(versors q, vec3s v) + CGLM_DECL mat4s glms_quat_rotate(mat4s m, versors q) + CGLM_DECL mat4s glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) + CGLM_DECL mat4s glms_quat_rotate_atm(versors q, vec3s pivot) */ #ifndef cglms_quat_h @@ -70,13 +70,16 @@ * * @returns identity quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_identity(void) { +glms_quat_identity(void) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_identity(dest.raw); return dest; } +#endif /*! * @brief make given quaternion array's each element identity quaternion @@ -86,9 +89,11 @@ glms_quat_identity(void) { * * @param[in] count count of quaternions */ -CGLM_INLINE +CGLM_DECL void -glms_quat_identity_array(versors * __restrict q, size_t count) { +glms_quat_identity_array(versors * __restrict q, size_t count) CGLM_ENDD +#ifndef CGLM_LIB +{ CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; size_t i; @@ -96,6 +101,7 @@ glms_quat_identity_array(versors * __restrict q, size_t count) { glm_vec4_copy(v, q[i].raw); } } +#endif /*! * @brief inits quaterion with raw values @@ -106,13 +112,16 @@ glms_quat_identity_array(versors * __restrict q, size_t count) { * @param[in] w w (real part) * @returns quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_init(float x, float y, float z, float w) { +glms_quat_init(float x, float y, float z, float w) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_init(dest.raw, x, y, z, w); return dest; } +#endif /*! * @brief creates NEW quaternion with axis vector @@ -121,13 +130,16 @@ glms_quat_init(float x, float y, float z, float w) { * @param[in] axis axis * @returns quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quatv(float angle, vec3s axis) { +glms_quatv(float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quatv(dest.raw, angle, axis.raw); return dest; } +#endif /*! * @brief creates NEW quaternion with individual axis components @@ -138,24 +150,30 @@ glms_quatv(float angle, vec3s axis) { * @param[in] z axis.z * @returns quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat(float angle, float x, float y, float z) { +glms_quat(float angle, float x, float y, float z) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat(dest.raw, angle, x, y, z); return dest; } +#endif /*! * @brief returns norm (magnitude) of quaternion * * @param[out] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glms_quat_norm(versors q) { +glms_quat_norm(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_quat_norm(q.raw); } +#endif /*! * @brief normalize quaternion @@ -163,13 +181,16 @@ glms_quat_norm(versors q) { * @param[in] q quaternion * @returns quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_normalize(versors q) { +glms_quat_normalize(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_normalize_to(q.raw, dest.raw); return dest; } +#endif /*! * @brief dot product of two quaternion @@ -178,11 +199,14 @@ glms_quat_normalize(versors q) { * @param[in] q quaternion 2 * @returns dot product */ -CGLM_INLINE +CGLM_DECL float -glms_quat_dot(versors p, versors q) { +glms_quat_dot(versors p, versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_quat_dot(p.raw, q.raw); } +#endif /*! * @brief conjugate of quaternion @@ -190,13 +214,16 @@ glms_quat_dot(versors p, versors q) { * @param[in] q quaternion * @returns conjugate */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_conjugate(versors q) { +glms_quat_conjugate(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_conjugate(q.raw, dest.raw); return dest; } +#endif /*! * @brief inverse of non-zero quaternion @@ -204,13 +231,16 @@ glms_quat_conjugate(versors q) { * @param[in] q quaternion * @returns inverse quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_inv(versors q) { +glms_quat_inv(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_inv(q.raw, dest.raw); return dest; } +#endif /*! * @brief add (componentwise) two quaternions and store result in dest @@ -219,13 +249,16 @@ glms_quat_inv(versors q) { * @param[in] q quaternion 2 * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_add(versors p, versors q) { +glms_quat_add(versors p, versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_add(p.raw, q.raw, dest.raw); return dest; } +#endif /*! * @brief subtract (componentwise) two quaternions and store result in dest @@ -234,48 +267,60 @@ glms_quat_add(versors p, versors q) { * @param[in] q quaternion 2 * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_sub(versors p, versors q) { +glms_quat_sub(versors p, versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_sub(p.raw, q.raw, dest.raw); return dest; } +#endif /*! * @brief returns normalized imaginary part of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL vec3s -glms_quat_imagn(versors q) { +glms_quat_imagn(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s dest; glm_normalize_to(q.raw, dest.raw); return dest; } +#endif /*! * @brief returns length of imaginary part of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glms_quat_imaglen(versors q) { +glms_quat_imaglen(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_quat_imaglen(q.raw); } +#endif /*! * @brief returns angle of quaternion * * @param[in] q quaternion */ -CGLM_INLINE +CGLM_DECL float -glms_quat_angle(versors q) { +glms_quat_angle(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_quat_angle(q.raw); } +#endif /*! * @brief axis of quaternion @@ -283,13 +328,16 @@ glms_quat_angle(versors q) { * @param[in] q quaternion * @returns axis of quaternion */ -CGLM_INLINE +CGLM_DECL vec3s -glms_quat_axis(versors q) { +glms_quat_axis(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s dest; glm_quat_axis(q.raw, dest.raw); return dest; } +#endif /*! * @brief multiplies two quaternion and stores result in dest @@ -303,13 +351,16 @@ glms_quat_axis(versors q) { * @param[in] q quaternion 2 * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_mul(versors p, versors q) { +glms_quat_mul(versors p, versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_mul(p.raw, q.raw, dest.raw); return dest; } +#endif /*! * @brief convert quaternion to mat4 @@ -317,13 +368,16 @@ glms_quat_mul(versors p, versors q) { * @param[in] q quaternion * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_mat4(versors q) { +glms_quat_mat4(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_quat_mat4(q.raw, dest.raw); return dest; } +#endif /*! * @brief convert quaternion to mat4 (transposed) @@ -331,13 +385,16 @@ glms_quat_mat4(versors q) { * @param[in] q quaternion * @returns result matrix as transposed */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_mat4t(versors q) { +glms_quat_mat4t(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_quat_mat4t(q.raw, dest.raw); return dest; } +#endif /*! * @brief convert quaternion to mat3 @@ -345,13 +402,16 @@ glms_quat_mat4t(versors q) { * @param[in] q quaternion * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_quat_mat3(versors q) { +glms_quat_mat3(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s dest; glm_quat_mat3(q.raw, dest.raw); return dest; } +#endif /*! * @brief convert quaternion to mat3 (transposed) @@ -359,13 +419,16 @@ glms_quat_mat3(versors q) { * @param[in] q quaternion * @returns result matrix */ -CGLM_INLINE +CGLM_DECL mat3s -glms_quat_mat3t(versors q) { +glms_quat_mat3t(versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ mat3s dest; glm_quat_mat3t(q.raw, dest.raw); return dest; } +#endif /*! * @brief interpolates between two quaternions @@ -376,13 +439,16 @@ glms_quat_mat3t(versors q) { * @param[in] t interpolant (amount) * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_lerp(versors from, versors to, float t) { +glms_quat_lerp(versors from, versors to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_lerp(from.raw, to.raw, t, dest.raw); return dest; } +#endif /*! * @brief interpolates between two quaternions @@ -393,13 +459,16 @@ glms_quat_lerp(versors from, versors to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_lerpc(versors from, versors to, float t) { +glms_quat_lerpc(versors from, versors to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_lerpc(from.raw, to.raw, t, dest.raw); return dest; } +#endif /*! * @brief interpolates between two quaternions @@ -410,13 +479,16 @@ glms_quat_lerpc(versors from, versors to, float t) { * @param[in] t amout * @returns result quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_slerp(versors from, versors to, float t) { +glms_quat_slerp(versors from, versors to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_slerp(from.raw, to.raw, t, dest.raw); return dest; } +#endif /*! * @brief creates view matrix using quaternion as camera orientation @@ -425,13 +497,16 @@ glms_quat_slerp(versors from, versors to, float t) { * @param[in] ori orientation in world space as quaternion * @returns view matrix */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_look(vec3s eye, versors ori) { +glms_quat_look(vec3s eye, versors ori) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_quat_look(eye.raw, ori.raw, dest.raw); return dest; } +#endif /*! * @brief creates look rotation quaternion @@ -440,13 +515,16 @@ glms_quat_look(vec3s eye, versors ori) { * @param[in] up up vector * @returns destination quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_for(vec3s dir, vec3s up) { +glms_quat_for(vec3s dir, vec3s up) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_for(dir.raw, up.raw, dest.raw); return dest; } +#endif /*! * @brief creates look rotation quaternion using source and @@ -457,13 +535,16 @@ glms_quat_for(vec3s dir, vec3s up) { * @param[in] up up vector * @returns destination quaternion */ -CGLM_INLINE +CGLM_DECL versors -glms_quat_forp(vec3s from, vec3s to, vec3s up) { +glms_quat_forp(vec3s from, vec3s to, vec3s up) CGLM_ENDD +#ifndef CGLM_LIB +{ versors dest; glm_quat_forp(from.raw, to.raw, up.raw, dest.raw); return dest; } +#endif /*! * @brief rotate vector using using quaternion @@ -472,13 +553,16 @@ glms_quat_forp(vec3s from, vec3s to, vec3s up) { * @param[in] v vector to rotate * @returns rotated vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_quat_rotatev(versors q, vec3s v) { +glms_quat_rotatev(versors q, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s dest; glm_quat_rotatev(q.raw, v.raw, dest.raw); return dest; } +#endif /*! * @brief rotate existing transform matrix using quaternion @@ -487,12 +571,15 @@ glms_quat_rotatev(versors q, vec3s v) { * @param[in] q quaternion * @returns rotated matrix/transform */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_rotate(mat4s m, versors q) { +glms_quat_rotate(mat4s m, versors q) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_quat_rotate(m.raw, q.raw, m.raw); return m; } +#endif /*! * @brief rotate existing transform matrix using quaternion at pivot point @@ -501,12 +588,15 @@ glms_quat_rotate(mat4s m, versors q) { * @param[in] q quaternion * @returns pivot */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) { +glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_quat_rotate_at(m.raw, q.raw, pivot.raw); return m; } +#endif /*! * @brief rotate NEW transform matrix using quaternion at pivot point @@ -519,12 +609,15 @@ glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) { * @param[in] q quaternion * @returns pivot */ -CGLM_INLINE +CGLM_DECL mat4s -glms_quat_rotate_atm(versors q, vec3s pivot) { +glms_quat_rotate_atm(versors q, vec3s pivot) CGLM_ENDD +#ifndef CGLM_LIB +{ mat4s dest; glm_quat_rotate_atm(dest.raw, q.raw, pivot.raw); return dest; } +#endif #endif /* cglms_quat_h */ diff --git a/include/cglm/struct/sphere.h b/include/cglm/struct/sphere.h index 9859c7236..1272fb4a5 100644 --- a/include/cglm/struct/sphere.h +++ b/include/cglm/struct/sphere.h @@ -27,11 +27,14 @@ * * @return returns radii */ -CGLM_INLINE +CGLM_DECL float -glms_sphere_radii(vec4s s) { +glms_sphere_radii(vec4s s) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_sphere_radii(s.raw); } +#endif /*! * @brief apply transform to sphere, it is just wrapper for glm_mat4_mulv3 @@ -40,13 +43,16 @@ glms_sphere_radii(vec4s s) { * @param[in] m transform matrix * @returns transformed sphere */ -CGLM_INLINE +CGLM_DECL vec4s -glms_sphere_transform(vec4s s, mat4s m) { +glms_sphere_transform(vec4s s, mat4s m) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_sphere_transform(s.raw, m.raw, r.raw); return r; } +#endif /*! * @brief merges two spheres and creates a new one @@ -58,13 +64,16 @@ glms_sphere_transform(vec4s s, mat4s m) { * @param[in] s2 sphere 2 * returns merged/extended sphere */ -CGLM_INLINE +CGLM_DECL vec4s -glms_sphere_merge(vec4s s1, vec4s s2) { +glms_sphere_merge(vec4s s1, vec4s s2) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_sphere_merge(s1.raw, s2.raw, r.raw); return r; } +#endif /*! * @brief check if two sphere intersects @@ -72,11 +81,14 @@ glms_sphere_merge(vec4s s1, vec4s s2) { * @param[in] s1 sphere * @param[in] s2 other sphere */ -CGLM_INLINE +CGLM_DECL bool -glms_sphere_sphere(vec4s s1, vec4s s2) { +glms_sphere_sphere(vec4s s1, vec4s s2) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_sphere_sphere(s1.raw, s2.raw); } +#endif /*! * @brief check if sphere intersects with point @@ -84,10 +96,13 @@ glms_sphere_sphere(vec4s s1, vec4s s2) { * @param[in] s sphere * @param[in] point point */ -CGLM_INLINE +CGLM_DECL bool -glms_sphere_point(vec4s s, vec3s point) { +glms_sphere_point(vec4s s, vec3s point) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_sphere_point(s.raw, point.raw); } +#endif #endif /* cglms_spheres_h */ diff --git a/include/cglm/struct/vec2-ext.h b/include/cglm/struct/vec2-ext.h index d77debe6a..edd23d65c 100644 --- a/include/cglm/struct/vec2-ext.h +++ b/include/cglm/struct/vec2-ext.h @@ -11,19 +11,19 @@ /* Functions: - CGLM_INLINE vec2s glms_vec2_fill(float val) - CGLM_INLINE bool glms_vec2_eq(vec2s v, float val) - CGLM_INLINE bool glms_vec2_eq_eps(vec2s v, float val) - CGLM_INLINE bool glms_vec2_eq_all(vec2s v) - CGLM_INLINE bool glms_vec2_eqv(vec2s a, vec2s b) - CGLM_INLINE bool glms_vec2_eqv_eps(vec2s a, vec2s b) - CGLM_INLINE float glms_vec2_max(vec2s v) - CGLM_INLINE float glms_vec2_min(vec2s v) - CGLM_INLINE bool glms_vec2_isnan(vec2s v) - CGLM_INLINE bool glms_vec2_isinf(vec2s v) - CGLM_INLINE bool glms_vec2_isvalid(vec2s v) - CGLM_INLINE vec2s glms_vec2_sign(vec2s v) - CGLM_INLINE vec2s glms_vec2_sqrt(vec2s v) + CGLM_DECL vec2s glms_vec2_fill(float val) + CGLM_DECL bool glms_vec2_eq(vec2s v, float val) + CGLM_DECL bool glms_vec2_eq_eps(vec2s v, float val) + CGLM_DECL bool glms_vec2_eq_all(vec2s v) + CGLM_DECL bool glms_vec2_eqv(vec2s a, vec2s b) + CGLM_DECL bool glms_vec2_eqv_eps(vec2s a, vec2s b) + CGLM_DECL float glms_vec2_max(vec2s v) + CGLM_DECL float glms_vec2_min(vec2s v) + CGLM_DECL bool glms_vec2_isnan(vec2s v) + CGLM_DECL bool glms_vec2_isinf(vec2s v) + CGLM_DECL bool glms_vec2_isvalid(vec2s v) + CGLM_DECL vec2s glms_vec2_sign(vec2s v) + CGLM_DECL vec2s glms_vec2_sqrt(vec2s v) */ #ifndef cglms_vec2s_ext_h @@ -40,13 +40,16 @@ * @param[in] val value * @returns dest */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_fill(float val) { +glms_vec2_fill(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_fill(r.raw, val); return r; } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -54,11 +57,14 @@ glms_vec2_fill(float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_eq(vec2s v, float val) { +glms_vec2_eq(vec2s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_eq(v.raw, val); } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -66,22 +72,28 @@ glms_vec2_eq(vec2s v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_eq_eps(vec2s v, float val) { +glms_vec2_eq_eps(vec2s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_eq_eps(v.raw, val); } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_eq_all(vec2s v) { +glms_vec2_eq_all(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_eq_all(v.raw); } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -89,11 +101,14 @@ glms_vec2_eq_all(vec2s v) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_eqv(vec2s a, vec2s b) { +glms_vec2_eqv(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_eqv(a.raw, b.raw); } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -101,33 +116,42 @@ glms_vec2_eqv(vec2s a, vec2s b) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_eqv_eps(vec2s a, vec2s b) { +glms_vec2_eqv_eps(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_eqv_eps(a.raw, b.raw); } +#endif /*! * @brief max value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_max(vec2s v) { +glms_vec2_max(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_max(v.raw); } +#endif /*! * @brief min value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_min(vec2s v) { +glms_vec2_min(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_min(v.raw); } +#endif /*! * @brief check if all items are NaN (not a number) @@ -135,11 +159,14 @@ glms_vec2_min(vec2s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_isnan(vec2s v) { +glms_vec2_isnan(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_isnan(v.raw); } +#endif /*! * @brief check if all items are INFINITY @@ -147,11 +174,14 @@ glms_vec2_isnan(vec2s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_isinf(vec2s v) { +glms_vec2_isinf(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_isinf(v.raw); } +#endif /*! * @brief check if all items are valid number @@ -159,11 +189,14 @@ glms_vec2_isinf(vec2s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec2_isvalid(vec2s v) { +glms_vec2_isvalid(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_isvalid(v.raw); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -173,13 +206,16 @@ glms_vec2_isvalid(vec2s v) { * @param v vector * @returns sign vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_sign(vec2s v) { +glms_vec2_sign(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_sign(v.raw, r.raw); return r; } +#endif /*! * @brief square root of each vector item @@ -187,12 +223,15 @@ glms_vec2_sign(vec2s v) { * @param[in] v vector * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_sqrt(vec2s v) { +glms_vec2_sqrt(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_sqrt(v.raw, r.raw); return r; } +#endif #endif /* cglms_vec2s_ext_h */ diff --git a/include/cglm/struct/vec2.h b/include/cglm/struct/vec2.h index 60f66d328..3c9c19834 100644 --- a/include/cglm/struct/vec2.h +++ b/include/cglm/struct/vec2.h @@ -13,39 +13,39 @@ GLMS_VEC2_ZERO Functions: - CGLM_INLINE vec2s glms_vec2(vec3s v3) - CGLM_INLINE void glms_vec2_pack(vec2s dst[], vec2 src[], size_t len) - CGLM_INLINE void glms_vec2_unpack(vec2 dst[], vec2s src[], size_t len) - CGLM_INLINE vec2s glms_vec2_zero(void) - CGLM_INLINE vec2s glms_vec2_one(void) - CGLM_INLINE float glms_vec2_dot(vec2s a, vec2s b) - CGLM_INLINE float glms_vec2_cross(vec2s a, vec2s b) - CGLM_INLINE float glms_vec2_norm2(vec2s v) - CGLM_INLINE float glms_vec2_norm(vec2s v) - CGLM_INLINE vec2s glms_vec2_add(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_adds(vec2s a, float s) - CGLM_INLINE vec2s glms_vec2_sub(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_subs(vec2s a, float s) - CGLM_INLINE vec2s glms_vec2_mul(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_scale(vec2s v, float s) - CGLM_INLINE vec2s glms_vec2_scale_as(vec2s v, float s) - CGLM_INLINE vec2s glms_vec2_div(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_divs(vec2s a, float s) - CGLM_INLINE vec2s glms_vec2_addadd(vec2s a, vec2s b, vec2s dest) - CGLM_INLINE vec2s glms_vec2_subadd(vec2s a, vec2s b, vec2s dest) - CGLM_INLINE vec2s glms_vec2_muladd(vec2s a, vec2s b, vec2s dest) - CGLM_INLINE vec2s glms_vec2_muladds(vec2s a, float s, vec2s dest) - CGLM_INLINE vec2s glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest) - CGLM_INLINE vec2s glms_vec2_minadd(vec2s a, vec2s b, vec2s dest) - CGLM_INLINE vec2s glms_vec2_negate(vec2s v) - CGLM_INLINE vec2s glms_vec2_normalize(vec2s v) - CGLM_INLINE vec2s glms_vec2_rotate(vec2s v, float angle, vec2s axis) - CGLM_INLINE float glms_vec2_distance(vec2s a, vec2s b) - CGLM_INLINE float glms_vec2_distance2(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_maxv(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_minv(vec2s a, vec2s b) - CGLM_INLINE vec2s glms_vec2_clamp(vec2s v, float minVal, float maxVal) - CGLM_INLINE vec2s glms_vec2_lerp(vec2s from, vec2s to, float t) + CGLM_DECL vec2s glms_vec2(vec3s v3) + CGLM_DECL void glms_vec2_pack(vec2s dst[], vec2 src[], size_t len) + CGLM_DECL void glms_vec2_unpack(vec2 dst[], vec2s src[], size_t len) + CGLM_DECL vec2s glms_vec2_zero(void) + CGLM_DECL vec2s glms_vec2_one(void) + CGLM_DECL float glms_vec2_dot(vec2s a, vec2s b) + CGLM_DECL float glms_vec2_cross(vec2s a, vec2s b) + CGLM_DECL float glms_vec2_norm2(vec2s v) + CGLM_DECL float glms_vec2_norm(vec2s v) + CGLM_DECL vec2s glms_vec2_add(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_adds(vec2s a, float s) + CGLM_DECL vec2s glms_vec2_sub(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_subs(vec2s a, float s) + CGLM_DECL vec2s glms_vec2_mul(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_scale(vec2s v, float s) + CGLM_DECL vec2s glms_vec2_scale_as(vec2s v, float s) + CGLM_DECL vec2s glms_vec2_div(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_divs(vec2s a, float s) + CGLM_DECL vec2s glms_vec2_addadd(vec2s a, vec2s b, vec2s dest) + CGLM_DECL vec2s glms_vec2_subadd(vec2s a, vec2s b, vec2s dest) + CGLM_DECL vec2s glms_vec2_muladd(vec2s a, vec2s b, vec2s dest) + CGLM_DECL vec2s glms_vec2_muladds(vec2s a, float s, vec2s dest) + CGLM_DECL vec2s glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest) + CGLM_DECL vec2s glms_vec2_minadd(vec2s a, vec2s b, vec2s dest) + CGLM_DECL vec2s glms_vec2_negate(vec2s v) + CGLM_DECL vec2s glms_vec2_normalize(vec2s v) + CGLM_DECL vec2s glms_vec2_rotate(vec2s v, float angle, vec2s axis) + CGLM_DECL float glms_vec2_distance(vec2s a, vec2s b) + CGLM_DECL float glms_vec2_distance2(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_maxv(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_minv(vec2s a, vec2s b) + CGLM_DECL vec2s glms_vec2_clamp(vec2s v, float minVal, float maxVal) + CGLM_DECL vec2s glms_vec2_lerp(vec2s from, vec2s to, float t) */ #ifndef cglms_vec2s_h @@ -69,13 +69,16 @@ * @param[in] v3 vector3 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2(vec3s v3) { +glms_vec2(vec3s v3) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2(v3.raw, r.raw); return r; } +#endif /*! * @brief pack an array of vec2 into an array of vec2s @@ -84,15 +87,18 @@ glms_vec2(vec3s v3) { * @param[in] src array of vec2s * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec2_pack(vec2s dst[], vec2 src[], size_t len) { +glms_vec2_pack(vec2s dst[], vec2 src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec2_copy(src[i], dst[i].raw); } } +#endif /*! * @brief unpack an array of vec2s into an array of vec2 @@ -101,41 +107,50 @@ glms_vec2_pack(vec2s dst[], vec2 src[], size_t len) { * @param[in] src array of vec2 * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec2_unpack(vec2 dst[], vec2s src[], size_t len) { +glms_vec2_unpack(vec2 dst[], vec2s src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec2_copy(src[i].raw, dst[i]); } } +#endif /*! * @brief make vector zero * * @returns zero vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_zero(void) { +glms_vec2_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_zero(r.raw); return r; } +#endif /*! * @brief make vector one * * @returns one vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_one(void) { +glms_vec2_one(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_one(r.raw); return r; } +#endif /*! * @brief vec2 dot product @@ -145,11 +160,14 @@ glms_vec2_one(void) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_dot(vec2s a, vec2s b) { +glms_vec2_dot(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_dot(a.raw, b.raw); } +#endif /*! * @brief vec2 cross product @@ -161,11 +179,14 @@ glms_vec2_dot(vec2s a, vec2s b) { * * @return Z component of cross product */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_cross(vec2s a, vec2s b) { +glms_vec2_cross(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_cross(a.raw, b.raw); } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -178,11 +199,14 @@ glms_vec2_cross(vec2s a, vec2s b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_norm2(vec2s v) { +glms_vec2_norm2(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_norm2(v.raw); } +#endif /*! * @brief norm (magnitude) of vec2 @@ -191,11 +215,14 @@ glms_vec2_norm2(vec2s v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_norm(vec2s v) { +glms_vec2_norm(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_norm(v.raw); } +#endif /*! * @brief add a vector to b vector store result in dest @@ -204,13 +231,16 @@ glms_vec2_norm(vec2s v) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_add(vec2s a, vec2s b) { +glms_vec2_add(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_add(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + s) @@ -219,13 +249,16 @@ glms_vec2_add(vec2s a, vec2s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_adds(vec2s a, float s) { +glms_vec2_adds(vec2s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_adds(a.raw, s, r.raw); return r; } +#endif /*! * @brief subtract b vector from a vector store result in dest @@ -234,13 +267,16 @@ glms_vec2_adds(vec2s a, float s) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_sub(vec2s a, vec2s b) { +glms_vec2_sub(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_sub(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - s) @@ -249,13 +285,16 @@ glms_vec2_sub(vec2s a, vec2s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_subs(vec2s a, float s) { +glms_vec2_subs(vec2s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_subs(a.raw, s, r.raw); return r; } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -264,13 +303,16 @@ glms_vec2_subs(vec2s a, float s) { * @param b vector2 * @returns v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_mul(vec2s a, vec2s b) { +glms_vec2_mul(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_mul(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief multiply/scale vec2 vector with scalar: result = v * s @@ -279,13 +321,16 @@ glms_vec2_mul(vec2s a, vec2s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_scale(vec2s v, float s) { +glms_vec2_scale(vec2s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_scale(v.raw, s, r.raw); return r; } +#endif /*! * @brief make vec2 vector scale as specified: result = unit(v) * s @@ -294,13 +339,16 @@ glms_vec2_scale(vec2s v, float s) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_scale_as(vec2s v, float s) { +glms_vec2_scale_as(vec2s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_scale_as(v.raw, s, r.raw); return r; } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -309,13 +357,16 @@ glms_vec2_scale_as(vec2s v, float s) { * @param[in] b vector 2 * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_div(vec2s a, vec2s b) { +glms_vec2_div(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_div(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief div vector with scalar: d = v / s @@ -324,13 +375,16 @@ glms_vec2_div(vec2s a, vec2s b) { * @param[in] s scalar * @returns result = (a[0]/s, a[1]/s, a[2]/s) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_divs(vec2s a, float s) { +glms_vec2_divs(vec2s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_divs(a.raw, s, r.raw); return r; } +#endif /*! * @brief add two vectors and add result to sum @@ -341,12 +395,15 @@ glms_vec2_divs(vec2s a, float s) { * @param[in] b vector 2 * @returns dest += (a + b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_addadd(vec2s a, vec2s b, vec2s dest) { +glms_vec2_addadd(vec2s a, vec2s b, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_addadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief sub two vectors and add result to dest @@ -357,12 +414,15 @@ glms_vec2_addadd(vec2s a, vec2s b, vec2s dest) { * @param[in] b vector 2 * @returns dest += (a + b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_subadd(vec2s a, vec2s b, vec2s dest) { +glms_vec2_subadd(vec2s a, vec2s b, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_subadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul two vectors and add result to dest @@ -373,12 +433,15 @@ glms_vec2_subadd(vec2s a, vec2s b, vec2s dest) { * @param[in] b vector 2 * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_muladd(vec2s a, vec2s b, vec2s dest) { +glms_vec2_muladd(vec2s a, vec2s b, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_muladd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -389,12 +452,15 @@ glms_vec2_muladd(vec2s a, vec2s b, vec2s dest) { * @param[in] s scalar * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_muladds(vec2s a, float s, vec2s dest) { +glms_vec2_muladds(vec2s a, float s, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_muladds(a.raw, s, dest.raw); return dest; } +#endif /*! * @brief add max of two vector to result/dest @@ -405,12 +471,15 @@ glms_vec2_muladds(vec2s a, float s, vec2s dest) { * @param[in] b vector 2 * @returns dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest) { +glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_maxadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief add min of two vector to result/dest @@ -421,12 +490,15 @@ glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest) { * @param[in] b vector 2 * @returns dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_minadd(vec2s a, vec2s b, vec2s dest) { +glms_vec2_minadd(vec2s a, vec2s b, vec2s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_minadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief negate vector components @@ -434,12 +506,15 @@ glms_vec2_minadd(vec2s a, vec2s b, vec2s dest) { * @param[in] v vector * @returns negated vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_negate(vec2s v) { +glms_vec2_negate(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_negate(v.raw); return v; } +#endif /*! * @brief normalize vec2 and store result in same vec @@ -447,12 +522,15 @@ glms_vec2_negate(vec2s v) { * @param[in] v vector * @returns normalized vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_normalize(vec2s v) { +glms_vec2_normalize(vec2s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_normalize(v.raw); return v; } +#endif /*! * @brief rotate vec2 by angle using Rodrigues' rotation formula @@ -461,13 +539,16 @@ glms_vec2_normalize(vec2s v) { * @param[in] angle angle by radians * @returns rotated vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_rotate(vec2s v, float angle) { +glms_vec2_rotate(vec2s v, float angle) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_rotate(v.raw, angle, r.raw); return r; } +#endif /** * @brief distance between two vectors @@ -476,11 +557,14 @@ glms_vec2_rotate(vec2s v, float angle) { * @param[in] b vector2 * @return distance */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_distance(vec2s a, vec2s b) { +glms_vec2_distance(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_distance(a.raw, b.raw); } +#endif /** * @brief squared distance between two vectors @@ -489,11 +573,14 @@ glms_vec2_distance(vec2s a, vec2s b) { * @param[in] b vector2 * @return squared distance (distance * distance) */ -CGLM_INLINE +CGLM_DECL float -glms_vec2_distance2(vec2s a, vec2s b) { +glms_vec2_distance2(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_distance2(a.raw, b.raw); } +#endif /*! * @brief max values of vectors @@ -502,13 +589,16 @@ glms_vec2_distance2(vec2s a, vec2s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_maxv(vec2s a, vec2s b) { +glms_vec2_maxv(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_maxv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief min values of vectors @@ -517,13 +607,16 @@ glms_vec2_maxv(vec2s a, vec2s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_minv(vec2s a, vec2s b) { +glms_vec2_minv(vec2s a, vec2s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_minv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -533,12 +626,15 @@ glms_vec2_minv(vec2s a, vec2s b) { * @param[in] maxVal maximum value * @returns clamped vector */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_clamp(vec2s v, float minVal, float maxVal) { +glms_vec2_clamp(vec2s v, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_clamp(v.raw, minVal, maxVal); return v; } +#endif /*! * @brief linear interpolation between two vectors @@ -550,12 +646,15 @@ glms_vec2_clamp(vec2s v, float minVal, float maxVal) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec2s -glms_vec2_lerp(vec2s from, vec2s to, float t) { +glms_vec2_lerp(vec2s from, vec2s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2s r; glm_vec2_lerp(from.raw, to.raw, t, r.raw); return r; } +#endif #endif /* cglms_vec2s_h */ diff --git a/include/cglm/struct/vec3-ext.h b/include/cglm/struct/vec3-ext.h index 8e5ca704c..1b2594f27 100644 --- a/include/cglm/struct/vec3-ext.h +++ b/include/cglm/struct/vec3-ext.h @@ -11,23 +11,23 @@ /* Functions: - CGLM_INLINE vec3s glms_vec3_broadcast(float val); - CGLM_INLINE vec3s glms_vec3_fill(float val); - CGLM_INLINE bool glms_vec3_eq(vec3s v, float val); - CGLM_INLINE bool glms_vec3_eq_eps(vec3s v, float val); - CGLM_INLINE bool glms_vec3_eq_all(vec3s v); - CGLM_INLINE bool glms_vec3_eqv(vec3s a, vec3s b); - CGLM_INLINE bool glms_vec3_eqv_eps(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_max(vec3s v); - CGLM_INLINE float glms_vec3_min(vec3s v); - CGLM_INLINE bool glms_vec3_isnan(vec3s v); - CGLM_INLINE bool glms_vec3_isinf(vec3s v); - CGLM_INLINE bool glms_vec3_isvalid(vec3s v); - CGLM_INLINE vec3s glms_vec3_sign(vec3s v); - CGLM_INLINE vec3s glms_vec3_abs(vec3s v); - CGLM_INLINE vec3s glms_vec3_fract(vec3s v); - CGLM_INLINE float glms_vec3_hadd(vec3s v); - CGLM_INLINE vec3s glms_vec3_sqrt(vec3s v); + CGLM_DECL vec3s glms_vec3_broadcast(float val); + CGLM_DECL vec3s glms_vec3_fill(float val); + CGLM_DECL bool glms_vec3_eq(vec3s v, float val); + CGLM_DECL bool glms_vec3_eq_eps(vec3s v, float val); + CGLM_DECL bool glms_vec3_eq_all(vec3s v); + CGLM_DECL bool glms_vec3_eqv(vec3s a, vec3s b); + CGLM_DECL bool glms_vec3_eqv_eps(vec3s a, vec3s b); + CGLM_DECL float glms_vec3_max(vec3s v); + CGLM_DECL float glms_vec3_min(vec3s v); + CGLM_DECL bool glms_vec3_isnan(vec3s v); + CGLM_DECL bool glms_vec3_isinf(vec3s v); + CGLM_DECL bool glms_vec3_isvalid(vec3s v); + CGLM_DECL vec3s glms_vec3_sign(vec3s v); + CGLM_DECL vec3s glms_vec3_abs(vec3s v); + CGLM_DECL vec3s glms_vec3_fract(vec3s v); + CGLM_DECL float glms_vec3_hadd(vec3s v); + CGLM_DECL vec3s glms_vec3_sqrt(vec3s v); */ #ifndef cglms_vec3s_ext_h @@ -44,13 +44,16 @@ * @param[in] val value * @returns dest */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_broadcast(float val) { +glms_vec3_broadcast(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_broadcast(val, r.raw); return r; } +#endif /*! * @brief fill a vector with specified value @@ -58,13 +61,16 @@ glms_vec3_broadcast(float val) { * @param[in] val value * @returns dest */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_fill(float val) { +glms_vec3_fill(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_fill(r.raw, val); return r; } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -72,11 +78,14 @@ glms_vec3_fill(float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_eq(vec3s v, float val) { +glms_vec3_eq(vec3s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_eq(v.raw, val); } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -84,22 +93,28 @@ glms_vec3_eq(vec3s v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_eq_eps(vec3s v, float val) { +glms_vec3_eq_eps(vec3s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_eq_eps(v.raw, val); } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_eq_all(vec3s v) { +glms_vec3_eq_all(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_eq_all(v.raw); } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -107,11 +122,14 @@ glms_vec3_eq_all(vec3s v) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_eqv(vec3s a, vec3s b) { +glms_vec3_eqv(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_eqv(a.raw, b.raw); } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -119,33 +137,42 @@ glms_vec3_eqv(vec3s a, vec3s b) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_eqv_eps(vec3s a, vec3s b) { +glms_vec3_eqv_eps(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_eqv_eps(a.raw, b.raw); } +#endif /*! * @brief max value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_max(vec3s v) { +glms_vec3_max(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_max(v.raw); } +#endif /*! * @brief min value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_min(vec3s v) { +glms_vec3_min(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_min(v.raw); } +#endif /*! * @brief check if all items are NaN (not a number) @@ -153,11 +180,14 @@ glms_vec3_min(vec3s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_isnan(vec3s v) { +glms_vec3_isnan(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_isnan(v.raw); } +#endif /*! * @brief check if all items are INFINITY @@ -165,11 +195,14 @@ glms_vec3_isnan(vec3s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_isinf(vec3s v) { +glms_vec3_isinf(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_isinf(v.raw); } +#endif /*! * @brief check if all items are valid number @@ -177,11 +210,14 @@ glms_vec3_isinf(vec3s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec3_isvalid(vec3s v) { +glms_vec3_isvalid(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_isvalid(v.raw); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -191,13 +227,16 @@ glms_vec3_isvalid(vec3s v) { * @param v vector * @returns sign vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_sign(vec3s v) { +glms_vec3_sign(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_sign(v.raw, r.raw); return r; } +#endif /*! * @brief absolute value of each vector item @@ -205,13 +244,16 @@ glms_vec3_sign(vec3s v) { * @param[in] v vector * @return destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_abs(vec3s v) { +glms_vec3_abs(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_abs(v.raw, r.raw); return r; } +#endif /*! * @brief fractional part of each vector item @@ -219,13 +261,16 @@ glms_vec3_abs(vec3s v) { * @param[in] v vector * @return dest destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_fract(vec3s v) { +glms_vec3_fract(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_fract(v.raw, r.raw); return r; } +#endif /*! * @brief vector reduction by summation @@ -234,11 +279,14 @@ glms_vec3_fract(vec3s v) { * @param[in] v vector * @return sum of all vector's elements */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_hadd(vec3s v) { +glms_vec3_hadd(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_hadd(v.raw); } +#endif /*! * @brief square root of each vector item @@ -246,12 +294,15 @@ glms_vec3_hadd(vec3s v) { * @param[in] v vector * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_sqrt(vec3s v) { +glms_vec3_sqrt(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_sqrt(v.raw, r.raw); return r; } +#endif #endif /* cglms_vec3s_ext_h */ diff --git a/include/cglm/struct/vec3.h b/include/cglm/struct/vec3.h index 7fa5b062c..26433a3a3 100644 --- a/include/cglm/struct/vec3.h +++ b/include/cglm/struct/vec3.h @@ -16,65 +16,65 @@ GLMS_XUP Functions: - CGLM_INLINE vec3s glms_vec3(vec4s v4); - CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); - CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); - CGLM_INLINE vec3s glms_vec3_zero(void); - CGLM_INLINE vec3s glms_vec3_one(void); - CGLM_INLINE float glms_vec3_dot(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_norm2(vec3s v); - CGLM_INLINE float glms_vec3_norm(vec3s v); - CGLM_INLINE float glms_vec3_norm_one(vec3s v); - CGLM_INLINE float glms_vec3_norm_inf(vec3s v); - CGLM_INLINE vec3s glms_vec3_add(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_adds(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_sub(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_subs(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_mul(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_scale(vec3s v, float s); - CGLM_INLINE vec3s glms_vec3_scale_as(vec3s v, float s); - CGLM_INLINE vec3s glms_vec3_div(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_divs(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest); - CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v); - CGLM_INLINE vec3s glms_vec3_negate(vec3s v); - CGLM_INLINE vec3s glms_vec3_inv(vec3s v); - CGLM_INLINE vec3s glms_vec3_normalize(vec3s v); - CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_crossn(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_angle(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis); - CGLM_INLINE vec3s glms_vec3_rotate_m4(mat4s m, vec3s v); - CGLM_INLINE vec3s glms_vec3_rotate_m3(mat3s m, vec3s v); - CGLM_INLINE vec3s glms_vec3_proj(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_center(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_distance(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_distance2(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_maxv(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_minv(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_ortho(vec3s v); - CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); - CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_lerpc(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_mix(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_mixc(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_step_uni(float edge, vec3s x); - CGLM_INLINE vec3s glms_vec3_step(vec3s edge, vec3s x); - CGLM_INLINE vec3s glms_vec3_smoothstep_uni(float edge0, float edge1, vec3s x); - CGLM_INLINE vec3s glms_vec3_smoothstep(vec3s edge0, vec3s edge1, vec3s x); - CGLM_INLINE vec3s glms_vec3_smoothinterp(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_smoothinterpc(vec3s from, vec3s to, float t); - CGLM_INLINE vec3s glms_vec3_swizzle(vec3s v, int mask); + CGLM_DECL vec3s glms_vec3(vec4s v4); + CGLM_DECL void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); + CGLM_DECL void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); + CGLM_DECL vec3s glms_vec3_zero(void); + CGLM_DECL vec3s glms_vec3_one(void); + CGLM_DECL float glms_vec3_dot(vec3s a, vec3s b); + CGLM_DECL float glms_vec3_norm2(vec3s v); + CGLM_DECL float glms_vec3_norm(vec3s v); + CGLM_DECL float glms_vec3_norm_one(vec3s v); + CGLM_DECL float glms_vec3_norm_inf(vec3s v); + CGLM_DECL vec3s glms_vec3_add(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_adds(vec3s a, float s); + CGLM_DECL vec3s glms_vec3_sub(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_subs(vec3s a, float s); + CGLM_DECL vec3s glms_vec3_mul(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_scale(vec3s v, float s); + CGLM_DECL vec3s glms_vec3_scale_as(vec3s v, float s); + CGLM_DECL vec3s glms_vec3_div(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_divs(vec3s a, float s); + CGLM_DECL vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest); + CGLM_DECL vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest); + CGLM_DECL vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest); + CGLM_DECL vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest); + CGLM_DECL vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest); + CGLM_DECL vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest); + CGLM_DECL vec3s glms_vec3_flipsign(vec3s v); + CGLM_DECL vec3s glms_vec3_negate(vec3s v); + CGLM_DECL vec3s glms_vec3_inv(vec3s v); + CGLM_DECL vec3s glms_vec3_normalize(vec3s v); + CGLM_DECL vec3s glms_vec3_cross(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_crossn(vec3s a, vec3s b); + CGLM_DECL float glms_vec3_angle(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis); + CGLM_DECL vec3s glms_vec3_rotate_m4(mat4s m, vec3s v); + CGLM_DECL vec3s glms_vec3_rotate_m3(mat3s m, vec3s v); + CGLM_DECL vec3s glms_vec3_proj(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_center(vec3s a, vec3s b); + CGLM_DECL float glms_vec3_distance(vec3s a, vec3s b); + CGLM_DECL float glms_vec3_distance2(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_maxv(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_minv(vec3s a, vec3s b); + CGLM_DECL vec3s glms_vec3_ortho(vec3s v); + CGLM_DECL vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); + CGLM_DECL vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_lerpc(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_mix(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_mixc(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_step_uni(float edge, vec3s x); + CGLM_DECL vec3s glms_vec3_step(vec3s edge, vec3s x); + CGLM_DECL vec3s glms_vec3_smoothstep_uni(float edge0, float edge1, vec3s x); + CGLM_DECL vec3s glms_vec3_smoothstep(vec3s edge0, vec3s edge1, vec3s x); + CGLM_DECL vec3s glms_vec3_smoothinterp(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_smoothinterpc(vec3s from, vec3s to, float t); + CGLM_DECL vec3s glms_vec3_swizzle(vec3s v, int mask); Convenient: - CGLM_INLINE vec3s glms_cross(vec3s a, vec3s b); - CGLM_INLINE float glms_dot(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_normalize(vec3s v); + CGLM_DECL vec3s glms_cross(vec3s a, vec3s b); + CGLM_DECL float glms_dot(vec3s a, vec3s b); + CGLM_DECL vec3s glms_normalize(vec3s v); */ #ifndef cglms_vec3s_h @@ -102,13 +102,16 @@ * @param[in] v4 vector4 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3(vec4s v4) { +glms_vec3(vec4s v4) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3(v4.raw, r.raw); return r; } +#endif /*! * @brief pack an array of vec3 into an array of vec3s @@ -117,15 +120,18 @@ glms_vec3(vec4s v4) { * @param[in] src array of vec3s * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { +glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec3_copy(src[i], dst[i].raw); } } +#endif /*! * @brief unpack an array of vec3s into an array of vec3 @@ -134,41 +140,50 @@ glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { * @param[in] src array of vec3 * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { +glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec3_copy(src[i].raw, dst[i]); } } +#endif /*! * @brief make vector zero * * @returns zero vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_zero(void) { +glms_vec3_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_zero(r.raw); return r; } +#endif /*! * @brief make vector one * * @returns one vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_one(void) { +glms_vec3_one(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_one(r.raw); return r; } +#endif /*! * @brief vec3 dot product @@ -178,11 +193,14 @@ glms_vec3_one(void) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_dot(vec3s a, vec3s b) { +glms_vec3_dot(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_dot(a.raw, b.raw); } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -195,11 +213,14 @@ glms_vec3_dot(vec3s a, vec3s b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_norm2(vec3s v) { +glms_vec3_norm2(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_norm2(v.raw); } +#endif /*! * @brief norm (magnitude) of vec3 @@ -208,11 +229,14 @@ glms_vec3_norm2(vec3s v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_norm(vec3s v) { +glms_vec3_norm(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_norm(v.raw); } +#endif /*! * @brief L1 norm of vec3 @@ -228,11 +252,14 @@ glms_vec3_norm(vec3s v) { * * @return L1 norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_norm_one(vec3s v) { +glms_vec3_norm_one(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_norm_one(v.raw); } +#endif /*! * @brief Infinity norm of vec3 @@ -247,11 +274,14 @@ glms_vec3_norm_one(vec3s v) { * * @return Infinity norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_norm_inf(vec3s v) { +glms_vec3_norm_inf(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_norm_inf(v.raw); } +#endif /*! * @brief add a vector to b vector store result in dest @@ -260,13 +290,16 @@ glms_vec3_norm_inf(vec3s v) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_add(vec3s a, vec3s b) { +glms_vec3_add(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_add(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + s) @@ -275,13 +308,16 @@ glms_vec3_add(vec3s a, vec3s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_adds(vec3s a, float s) { +glms_vec3_adds(vec3s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_adds(a.raw, s, r.raw); return r; } +#endif /*! * @brief subtract b vector from a vector store result in dest @@ -290,13 +326,16 @@ glms_vec3_adds(vec3s a, float s) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_sub(vec3s a, vec3s b) { +glms_vec3_sub(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_sub(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - s) @@ -305,13 +344,16 @@ glms_vec3_sub(vec3s a, vec3s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_subs(vec3s a, float s) { +glms_vec3_subs(vec3s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_subs(a.raw, s, r.raw); return r; } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -320,13 +362,16 @@ glms_vec3_subs(vec3s a, float s) { * @param b vector2 * @returns v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_mul(vec3s a, vec3s b) { +glms_vec3_mul(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_mul(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief multiply/scale vec3 vector with scalar: result = v * s @@ -335,13 +380,16 @@ glms_vec3_mul(vec3s a, vec3s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_scale(vec3s v, float s) { +glms_vec3_scale(vec3s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_scale(v.raw, s, r.raw); return r; } +#endif /*! * @brief make vec3 vector scale as specified: result = unit(v) * s @@ -350,13 +398,16 @@ glms_vec3_scale(vec3s v, float s) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_scale_as(vec3s v, float s) { +glms_vec3_scale_as(vec3s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_scale_as(v.raw, s, r.raw); return r; } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -365,13 +416,16 @@ glms_vec3_scale_as(vec3s v, float s) { * @param[in] b vector 2 * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_div(vec3s a, vec3s b) { +glms_vec3_div(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_div(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief div vector with scalar: d = v / s @@ -380,13 +434,16 @@ glms_vec3_div(vec3s a, vec3s b) { * @param[in] s scalar * @returns result = (a[0]/s, a[1]/s, a[2]/s) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_divs(vec3s a, float s) { +glms_vec3_divs(vec3s a, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_divs(a.raw, s, r.raw); return r; } +#endif /*! * @brief add two vectors and add result to sum @@ -397,12 +454,15 @@ glms_vec3_divs(vec3s a, float s) { * @param[in] b vector 2 * @returns dest += (a + b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { +glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_addadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief sub two vectors and add result to dest @@ -413,12 +473,15 @@ glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { * @param[in] b vector 2 * @returns dest += (a + b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { +glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_subadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul two vectors and add result to dest @@ -429,12 +492,15 @@ glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { * @param[in] b vector 2 * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { +glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_muladd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -445,12 +511,15 @@ glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { * @param[in] s scalar * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_muladds(vec3s a, float s, vec3s dest) { +glms_vec3_muladds(vec3s a, float s, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_muladds(a.raw, s, dest.raw); return dest; } +#endif /*! * @brief add max of two vector to result/dest @@ -461,12 +530,15 @@ glms_vec3_muladds(vec3s a, float s, vec3s dest) { * @param[in] b vector 2 * @returns dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { +glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_maxadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief add min of two vector to result/dest @@ -477,12 +549,15 @@ glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { * @param[in] b vector 2 * @returns dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { +glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_minadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief negate vector components and store result in dest @@ -490,12 +565,15 @@ glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { * @param[in] v vector * @returns result vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_flipsign(vec3s v) { +glms_vec3_flipsign(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_flipsign(v.raw); return v; } +#endif /*! * @brief negate vector components @@ -503,12 +581,15 @@ glms_vec3_flipsign(vec3s v) { * @param[in] v vector * @returns negated vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_negate(vec3s v) { +glms_vec3_negate(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_negate(v.raw); return v; } +#endif /*! * @brief normalize vec3 and store result in same vec @@ -516,12 +597,15 @@ glms_vec3_negate(vec3s v) { * @param[in] v vector * @returns normalized vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_normalize(vec3s v) { +glms_vec3_normalize(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_normalize(v.raw); return v; } +#endif /*! * @brief cross product of two vector (RH) @@ -530,13 +614,16 @@ glms_vec3_normalize(vec3s v) { * @param[in] b vector 2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_cross(vec3s a, vec3s b) { +glms_vec3_cross(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_cross(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief cross product of two vector (RH) and normalize the result @@ -545,13 +632,16 @@ glms_vec3_cross(vec3s a, vec3s b) { * @param[in] b vector 2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_crossn(vec3s a, vec3s b) { +glms_vec3_crossn(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_crossn(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief angle betwen two vector @@ -561,11 +651,14 @@ glms_vec3_crossn(vec3s a, vec3s b) { * * @return angle as radians */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_angle(vec3s a, vec3s b) { +glms_vec3_angle(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_angle(a.raw, b.raw); } +#endif /*! * @brief rotate vec3 around axis by angle using Rodrigues' rotation formula @@ -575,12 +668,15 @@ glms_vec3_angle(vec3s a, vec3s b) { * @param[in] angle angle by radians * @returns rotated vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_rotate(vec3s v, float angle, vec3s axis) { +glms_vec3_rotate(vec3s v, float angle, vec3s axis) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_rotate(v.raw, angle, axis.raw); return v; } +#endif /*! * @brief apply rotation matrix to vector @@ -595,13 +691,16 @@ glms_vec3_rotate(vec3s v, float angle, vec3s axis) { * @param[in] v vector * @returns rotated vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_rotate_m4(mat4s m, vec3s v) { +glms_vec3_rotate_m4(mat4s m, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_rotate_m4(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief apply rotation matrix to vector @@ -610,13 +709,16 @@ glms_vec3_rotate_m4(mat4s m, vec3s v) { * @param[in] v vector * @returns rotated vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_rotate_m3(mat3s m, vec3s v) { +glms_vec3_rotate_m3(mat3s m, vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_rotate_m3(m.raw, v.raw, r.raw); return r; } +#endif /*! * @brief project a vector onto b vector @@ -625,13 +727,16 @@ glms_vec3_rotate_m3(mat3s m, vec3s v) { * @param[in] b vector2 * @returns projected vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_proj(vec3s a, vec3s b) { +glms_vec3_proj(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_proj(a.raw, b.raw, r.raw); return r; } +#endif /** * @brief find center point of two vector @@ -640,13 +745,16 @@ glms_vec3_proj(vec3s a, vec3s b) { * @param[in] b vector2 * @returns center point */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_center(vec3s a, vec3s b) { +glms_vec3_center(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_center(a.raw, b.raw, r.raw); return r; } +#endif /** * @brief distance between two vectors @@ -655,11 +763,14 @@ glms_vec3_center(vec3s a, vec3s b) { * @param[in] b vector2 * @return distance */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_distance(vec3s a, vec3s b) { +glms_vec3_distance(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_distance(a.raw, b.raw); } +#endif /** * @brief squared distance between two vectors @@ -668,11 +779,14 @@ glms_vec3_distance(vec3s a, vec3s b) { * @param[in] b vector2 * @return squared distance (distance * distance) */ -CGLM_INLINE +CGLM_DECL float -glms_vec3_distance2(vec3s a, vec3s b) { +glms_vec3_distance2(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_distance2(a.raw, b.raw); } +#endif /*! * @brief max values of vectors @@ -681,13 +795,16 @@ glms_vec3_distance2(vec3s a, vec3s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_maxv(vec3s a, vec3s b) { +glms_vec3_maxv(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_maxv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief min values of vectors @@ -696,13 +813,16 @@ glms_vec3_maxv(vec3s a, vec3s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_minv(vec3s a, vec3s b) { +glms_vec3_minv(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_minv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief possible orthogonal/perpendicular vector @@ -710,13 +830,16 @@ glms_vec3_minv(vec3s a, vec3s b) { * @param[in] v vector * @returns orthogonal/perpendicular vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_ortho(vec3s v) { +glms_vec3_ortho(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_ortho(v.raw, r.raw); return r; } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -726,12 +849,15 @@ glms_vec3_ortho(vec3s v) { * @param[in] maxVal maximum value * @returns clamped vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_clamp(vec3s v, float minVal, float maxVal) { +glms_vec3_clamp(vec3s v, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_clamp(v.raw, minVal, maxVal); return v; } +#endif /*! * @brief linear interpolation between two vectors @@ -743,13 +869,16 @@ glms_vec3_clamp(vec3s v, float minVal, float maxVal) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_lerp(vec3s from, vec3s to, float t) { +glms_vec3_lerp(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_lerp(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -761,13 +890,16 @@ glms_vec3_lerp(vec3s from, vec3s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_lerpc(vec3s from, vec3s to, float t) { +glms_vec3_lerpc(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_lerpc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors @@ -779,13 +911,16 @@ glms_vec3_lerpc(vec3s from, vec3s to, float t) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_mix(vec3s from, vec3s to, float t) { +glms_vec3_mix(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_mix(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -797,13 +932,16 @@ glms_vec3_mix(vec3s from, vec3s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_mixc(vec3s from, vec3s to, float t) { +glms_vec3_mixc(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_mixc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief threshold function (unidimensional) @@ -812,13 +950,16 @@ glms_vec3_mixc(vec3s from, vec3s to, float t) { * @param[in] x value to test against threshold * @returns 0.0 if x < edge, else 1.0 */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_step_uni(float edge, vec3s x) { +glms_vec3_step_uni(float edge, vec3s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_step_uni(edge, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function @@ -827,13 +968,16 @@ glms_vec3_step_uni(float edge, vec3s x) { * @param[in] x value to test against threshold * @returns 0.0 if x < edge, else 1.0 */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_step(vec3s edge, vec3s x) { +glms_vec3_step(vec3s edge, vec3s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_step(edge.raw, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function with a smooth transition (unidimensional) @@ -843,13 +987,16 @@ glms_vec3_step(vec3s edge, vec3s x) { * @param[in] x value to test against threshold * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_smoothstep_uni(float edge0, float edge1, vec3s x) { +glms_vec3_smoothstep_uni(float edge0, float edge1, vec3s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_smoothstep_uni(edge0, edge1, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function with a smooth transition @@ -859,13 +1006,16 @@ glms_vec3_smoothstep_uni(float edge0, float edge1, vec3s x) { * @param[in] x value to test against threshold * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_smoothstep(vec3s edge0, vec3s edge1, vec3s x) { +glms_vec3_smoothstep(vec3s edge0, vec3s edge1, vec3s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_smoothstep(edge0.raw, edge1.raw, x.raw, r.raw); return r; } +#endif /*! * @brief smooth Hermite interpolation between two vectors @@ -877,13 +1027,16 @@ glms_vec3_smoothstep(vec3s edge0, vec3s edge1, vec3s x) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_smoothinterp(vec3s from, vec3s to, float t) { +glms_vec3_smoothinterp(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_smoothinterp(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief smooth Hermite interpolation between two vectors (clamped) @@ -895,13 +1048,16 @@ glms_vec3_smoothinterp(vec3s from, vec3s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_smoothinterpc(vec3s from, vec3s to, float t) { +glms_vec3_smoothinterpc(vec3s from, vec3s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec3_smoothinterpc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief vec3 cross product @@ -912,13 +1068,16 @@ glms_vec3_smoothinterpc(vec3s from, vec3s to, float t) { * @param[in] b source 2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec3s -glms_cross(vec3s a, vec3s b) { +glms_cross(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_cross(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief vec3 dot product @@ -929,11 +1088,14 @@ glms_cross(vec3s a, vec3s b) { * @param[in] b vector2 * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glms_dot(vec3s a, vec3s b) { +glms_dot(vec3s a, vec3s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_dot(a.raw, b.raw); } +#endif /*! * @brief normalize vec3 and store result in same vec @@ -943,12 +1105,15 @@ glms_dot(vec3s a, vec3s b) { * @param[in] v vector * @returns normalized vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_normalize(vec3s v) { +glms_normalize(vec3s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_normalize(v.raw); return v; } +#endif /*! * @brief swizzle vector components @@ -959,12 +1124,15 @@ glms_normalize(vec3s v) { * @param[in] mask mask * @returns swizzled vector */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec3_swizzle(vec3s v, int mask) { +glms_vec3_swizzle(vec3s v, int mask) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s dest; glm_vec3_swizzle(v.raw, mask, dest.raw); return dest; } +#endif #endif /* cglms_vec3s_h */ diff --git a/include/cglm/struct/vec4-ext.h b/include/cglm/struct/vec4-ext.h index d5cddec44..485430c68 100644 --- a/include/cglm/struct/vec4-ext.h +++ b/include/cglm/struct/vec4-ext.h @@ -11,23 +11,23 @@ /* Functions: - CGLM_INLINE vec4s glms_vec4_broadcast(float val); - CGLM_INLINE vec4s glms_vec4_fill(float val); - CGLM_INLINE bool glms_vec4_eq(vec4s v, float val); - CGLM_INLINE bool glms_vec4_eq_eps(vec4s v, float val); - CGLM_INLINE bool glms_vec4_eq_all(vec4s v); - CGLM_INLINE bool glms_vec4_eqv(vec4s a, vec4s b); - CGLM_INLINE bool glms_vec4_eqv_eps(vec4s a, vec4s b); - CGLM_INLINE float glms_vec4_max(vec4s v); - CGLM_INLINE float glms_vec4_min(vec4s v); - CGLM_INLINE bool glms_vec4_isnan(vec4s v); - CGLM_INLINE bool glms_vec4_isinf(vec4s v); - CGLM_INLINE bool glms_vec4_isvalid(vec4s v); - CGLM_INLINE vec4s glms_vec4_sign(vec4s v); - CGLM_INLINE vec4s glms_vec4_abs(vec4s v); - CGLM_INLINE vec4s glms_vec4_fract(vec4s v); - CGLM_INLINE float glms_vec4_hadd(vec4s v); - CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v); + CGLM_DECL vec4s glms_vec4_broadcast(float val); + CGLM_DECL vec4s glms_vec4_fill(float val); + CGLM_DECL bool glms_vec4_eq(vec4s v, float val); + CGLM_DECL bool glms_vec4_eq_eps(vec4s v, float val); + CGLM_DECL bool glms_vec4_eq_all(vec4s v); + CGLM_DECL bool glms_vec4_eqv(vec4s a, vec4s b); + CGLM_DECL bool glms_vec4_eqv_eps(vec4s a, vec4s b); + CGLM_DECL float glms_vec4_max(vec4s v); + CGLM_DECL float glms_vec4_min(vec4s v); + CGLM_DECL bool glms_vec4_isnan(vec4s v); + CGLM_DECL bool glms_vec4_isinf(vec4s v); + CGLM_DECL bool glms_vec4_isvalid(vec4s v); + CGLM_DECL vec4s glms_vec4_sign(vec4s v); + CGLM_DECL vec4s glms_vec4_abs(vec4s v); + CGLM_DECL vec4s glms_vec4_fract(vec4s v); + CGLM_DECL float glms_vec4_hadd(vec4s v); + CGLM_DECL vec4s glms_vec4_sqrt(vec4s v); */ #ifndef cglms_vec4s_ext_h @@ -44,13 +44,16 @@ * @param val value * @returns dest */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_broadcast(float val) { +glms_vec4_broadcast(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_broadcast(val, r.raw); return r; } +#endif /*! * @brief fill a vector with specified value @@ -58,13 +61,16 @@ glms_vec4_broadcast(float val) { * @param val value * @returns dest */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_fill(float val) { +glms_vec4_fill(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_fill(r.raw, val); return r; } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -72,11 +78,14 @@ glms_vec4_fill(float val) { * @param v vector * @param val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_eq(vec4s v, float val) { +glms_vec4_eq(vec4s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_eq(v.raw, val); } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -84,22 +93,28 @@ glms_vec4_eq(vec4s v, float val) { * @param v vector * @param val value */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_eq_eps(vec4s v, float val) { +glms_vec4_eq_eps(vec4s v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_eq_eps(v.raw, val); } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_eq_all(vec4s v) { +glms_vec4_eq_all(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_eq_all(v.raw); } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -107,11 +122,14 @@ glms_vec4_eq_all(vec4s v) { * @param a vector * @param b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_eqv(vec4s a, vec4s b) { +glms_vec4_eqv(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_eqv(a.raw, b.raw); } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -119,33 +137,42 @@ glms_vec4_eqv(vec4s a, vec4s b) { * @param a vector * @param b vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_eqv_eps(vec4s a, vec4s b) { +glms_vec4_eqv_eps(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_eqv_eps(a.raw, b.raw); } +#endif /*! * @brief max value of vector * * @param v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_max(vec4s v) { +glms_vec4_max(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_max(v.raw); } +#endif /*! * @brief min value of vector * * @param v vector */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_min(vec4s v) { +glms_vec4_min(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_min(v.raw); } +#endif /*! * @brief check if one of items is NaN (not a number) @@ -153,11 +180,14 @@ glms_vec4_min(vec4s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_isnan(vec4s v) { +glms_vec4_isnan(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_isnan(v.raw); } +#endif /*! * @brief check if one of items is INFINITY @@ -165,11 +195,14 @@ glms_vec4_isnan(vec4s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_isinf(vec4s v) { +glms_vec4_isinf(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_isinf(v.raw); } +#endif /*! * @brief check if all items are valid number @@ -177,11 +210,14 @@ glms_vec4_isinf(vec4s v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glms_vec4_isvalid(vec4s v) { +glms_vec4_isvalid(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_isvalid(v.raw); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -191,13 +227,16 @@ glms_vec4_isvalid(vec4s v) { * @param v vector * @returns sign vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_sign(vec4s v) { +glms_vec4_sign(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_sign(v.raw, r.raw); return r; } +#endif /*! * @brief absolute value of each vector item @@ -205,13 +244,16 @@ glms_vec4_sign(vec4s v) { * @param[in] v vector * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_abs(vec4s v) { +glms_vec4_abs(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_abs(v.raw, r.raw); return r; } +#endif /*! * @brief fractional part of each vector item @@ -219,13 +261,16 @@ glms_vec4_abs(vec4s v) { * @param[in] v vector * @returns dest destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_fract(vec4s v) { +glms_vec4_fract(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_fract(v.raw, r.raw); return r; } +#endif /*! * @brief vector reduction by summation @@ -234,11 +279,14 @@ glms_vec4_fract(vec4s v) { * @param[in] v vector * @return sum of all vector's elements */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_hadd(vec4s v) { +glms_vec4_hadd(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_hadd(v.raw); } +#endif /*! * @brief square root of each vector item @@ -246,12 +294,15 @@ glms_vec4_hadd(vec4s v) { * @param[in] v vector * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_sqrt(vec4s v) { +glms_vec4_sqrt(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_sqrt(v.raw, r.raw); return r; } +#endif #endif /* cglms_vec4s_ext_h */ diff --git a/include/cglm/struct/vec4.h b/include/cglm/struct/vec4.h index 4469cb259..c539adb83 100644 --- a/include/cglm/struct/vec4.h +++ b/include/cglm/struct/vec4.h @@ -15,52 +15,52 @@ GLMS_VEC4_ZERO Functions: - CGLM_INLINE vec4s glms_vec4(vec3s v3, float last); - CGLM_INLINE vec3s glms_vec4_copy3(vec4s v); - CGLM_INLINE vec4s glms_vec4_copy(vec4s v); - CGLM_INLINE vec4s glms_vec4_ucopy(vec4s v); - CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len); - CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len); - CGLM_INLINE float glms_vec4_dot(vec4s a, vec4s b); - CGLM_INLINE float glms_vec4_norm2(vec4s v); - CGLM_INLINE float glms_vec4_norm(vec4s v); - CGLM_INLINE float glms_vec4_norm_one(vec4s v); - CGLM_INLINE float glms_vec4_norm_inf(vec4s v); - CGLM_INLINE vec4s glms_vec4_add(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_adds(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_sub(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_subs(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_mul(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_scale(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_scale_as(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_div(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_divs(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest); - CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_negate(vec4s v); - CGLM_INLINE vec4s glms_vec4_inv(vec4s v); - CGLM_INLINE vec4s glms_vec4_normalize(vec4s v); - CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b); - CGLM_INLINE float glms_vec4_distance2(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_maxv(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_minv(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); - CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_lerpc(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_mix(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_mixc(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_step_uni(float edge, vec4s x); - CGLM_INLINE vec4s glms_vec4_step(vec4s edge, vec4s x); - CGLM_INLINE vec4s glms_vec4_smoothstep_uni(float edge0, float edge1, vec4s x); - CGLM_INLINE vec4s glms_vec4_smoothstep(vec4s edge0, vec4s edge1, vec4s x); - CGLM_INLINE vec4s glms_vec4_smoothinterp(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_smoothinterpc(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_cubic(float s); - CGLM_INLINE vec4s glms_vec4_swizzle(vec4s v, int mask); + CGLM_DECL vec4s glms_vec4(vec3s v3, float last); + CGLM_DECL vec3s glms_vec4_copy3(vec4s v); + CGLM_DECL vec4s glms_vec4_copy(vec4s v); + CGLM_DECL vec4s glms_vec4_ucopy(vec4s v); + CGLM_DECL void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len); + CGLM_DECL void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len); + CGLM_DECL float glms_vec4_dot(vec4s a, vec4s b); + CGLM_DECL float glms_vec4_norm2(vec4s v); + CGLM_DECL float glms_vec4_norm(vec4s v); + CGLM_DECL float glms_vec4_norm_one(vec4s v); + CGLM_DECL float glms_vec4_norm_inf(vec4s v); + CGLM_DECL vec4s glms_vec4_add(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_adds(vec4s v, float s); + CGLM_DECL vec4s glms_vec4_sub(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_subs(vec4s v, float s); + CGLM_DECL vec4s glms_vec4_mul(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_scale(vec4s v, float s); + CGLM_DECL vec4s glms_vec4_scale_as(vec4s v, float s); + CGLM_DECL vec4s glms_vec4_div(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_divs(vec4s v, float s); + CGLM_DECL vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest); + CGLM_DECL vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest); + CGLM_DECL vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest); + CGLM_DECL vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest); + CGLM_DECL vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest); + CGLM_DECL vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest); + CGLM_DECL vec4s glms_vec4_negate(vec4s v); + CGLM_DECL vec4s glms_vec4_inv(vec4s v); + CGLM_DECL vec4s glms_vec4_normalize(vec4s v); + CGLM_DECL float glms_vec4_distance(vec4s a, vec4s b); + CGLM_DECL float glms_vec4_distance2(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_maxv(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_minv(vec4s a, vec4s b); + CGLM_DECL vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); + CGLM_DECL vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_lerpc(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_mix(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_mixc(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_step_uni(float edge, vec4s x); + CGLM_DECL vec4s glms_vec4_step(vec4s edge, vec4s x); + CGLM_DECL vec4s glms_vec4_smoothstep_uni(float edge0, float edge1, vec4s x); + CGLM_DECL vec4s glms_vec4_smoothstep(vec4s edge0, vec4s edge1, vec4s x); + CGLM_DECL vec4s glms_vec4_smoothinterp(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_smoothinterpc(vec4s from, vec4s to, float t); + CGLM_DECL vec4s glms_vec4_cubic(float s); + CGLM_DECL vec4s glms_vec4_swizzle(vec4s v, int mask); */ #ifndef cglms_vec4s_h @@ -87,13 +87,16 @@ * @param[in] last last item * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4(vec3s v3, float last) { +glms_vec4(vec3s v3, float last) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4(v3.raw, last, r.raw); return r; } +#endif /*! * @brief copy first 3 members of [a] to [dest] @@ -101,13 +104,16 @@ glms_vec4(vec3s v3, float last) { * @param[in] v source * @returns vec3 */ -CGLM_INLINE +CGLM_DECL vec3s -glms_vec4_copy3(vec4s v) { +glms_vec4_copy3(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3s r; glm_vec4_copy3(v.raw, r.raw); return r; } +#endif /*! * @brief copy all members of [a] to [dest] @@ -115,13 +121,16 @@ glms_vec4_copy3(vec4s v) { * @param[in] v source * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_copy(vec4s v) { +glms_vec4_copy(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_copy(v.raw, r.raw); return r; } +#endif /*! * @brief copy all members of [a] to [dest] @@ -131,13 +140,16 @@ glms_vec4_copy(vec4s v) { * @param[in] v source * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_ucopy(vec4s v) { +glms_vec4_ucopy(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_ucopy(v.raw, r.raw); return r; } +#endif /*! * @brief pack an array of vec4 into an array of vec4s @@ -146,15 +158,18 @@ glms_vec4_ucopy(vec4s v) { * @param[in] src array of vec4s * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { +glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec4_copy(src[i], dst[i].raw); } } +#endif /*! * @brief unpack an array of vec4s into an array of vec4 @@ -163,41 +178,50 @@ glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { * @param[in] src array of vec4 * @param[in] len number of elements */ -CGLM_INLINE +CGLM_DECL void -glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { +glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) CGLM_ENDD +#ifndef CGLM_LIB +{ size_t i; for (i = 0; i < len; i++) { glm_vec4_copy(src[i].raw, dst[i]); } } +#endif /*! * @brief make vector zero * * @returns zero vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_zero(void) { +glms_vec4_zero(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_zero(r.raw); return r; } +#endif /*! * @brief make vector one * * @returns one vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_one(void) { +glms_vec4_one(void) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_one(r.raw); return r; } +#endif /*! * @brief vec4 dot product @@ -207,11 +231,14 @@ glms_vec4_one(void) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_dot(vec4s a, vec4s b) { +glms_vec4_dot(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_dot(a.raw, b.raw); } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -224,11 +251,14 @@ glms_vec4_dot(vec4s a, vec4s b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_norm2(vec4s v) { +glms_vec4_norm2(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_norm2(v.raw); } +#endif /*! * @brief norm (magnitude) of vec4 @@ -237,11 +267,14 @@ glms_vec4_norm2(vec4s v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_norm(vec4s v) { +glms_vec4_norm(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_norm(v.raw); } +#endif /*! * @brief L1 norm of vec4 @@ -257,11 +290,14 @@ glms_vec4_norm(vec4s v) { * * @return L1 norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_norm_one(vec4s v) { +glms_vec4_norm_one(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_norm_one(v.raw); } +#endif /*! * @brief Infinity norm of vec4 @@ -276,11 +312,14 @@ glms_vec4_norm_one(vec4s v) { * * @return Infinity norm */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_norm_inf(vec4s v) { +glms_vec4_norm_inf(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_norm_inf(v.raw); } +#endif /*! * @brief add b vector to a vector store result in dest @@ -289,13 +328,16 @@ glms_vec4_norm_inf(vec4s v) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_add(vec4s a, vec4s b) { +glms_vec4_add(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_add(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + vec(s)) @@ -304,13 +346,16 @@ glms_vec4_add(vec4s a, vec4s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_adds(vec4s v, float s) { +glms_vec4_adds(vec4s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_adds(v.raw, s, r.raw); return r; } +#endif /*! * @brief subtract b vector from a vector store result in dest (d = a - b) @@ -319,13 +364,16 @@ glms_vec4_adds(vec4s v, float s) { * @param[in] b vector2 * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_sub(vec4s a, vec4s b) { +glms_vec4_sub(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_sub(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - vec(s)) @@ -334,13 +382,16 @@ glms_vec4_sub(vec4s a, vec4s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_subs(vec4s v, float s) { +glms_vec4_subs(vec4s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_subs(v.raw, s, r.raw); return r; } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -349,13 +400,16 @@ glms_vec4_subs(vec4s v, float s) { * @param b vector2 * @returns dest = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_mul(vec4s a, vec4s b) { +glms_vec4_mul(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_mul(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief multiply/scale vec4 vector with scalar: result = v * s @@ -364,13 +418,16 @@ glms_vec4_mul(vec4s a, vec4s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_scale(vec4s v, float s) { +glms_vec4_scale(vec4s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_scale(v.raw, s, r.raw); return r; } +#endif /*! * @brief make vec4 vector scale as specified: result = unit(v) * s @@ -379,13 +436,16 @@ glms_vec4_scale(vec4s v, float s) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_scale_as(vec4s v, float s) { +glms_vec4_scale_as(vec4s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_scale_as(v.raw, s, r.raw); return r; } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -394,13 +454,16 @@ glms_vec4_scale_as(vec4s v, float s) { * @param[in] b vector 2 * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_div(vec4s a, vec4s b) { +glms_vec4_div(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_div(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief div vec4 vector with scalar: d = v / s @@ -409,13 +472,16 @@ glms_vec4_div(vec4s a, vec4s b) { * @param[in] s scalar * @returns destination vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_divs(vec4s v, float s) { +glms_vec4_divs(vec4s v, float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_divs(v.raw, s, r.raw); return r; } +#endif /*! * @brief add two vectors and add result to sum @@ -426,12 +492,15 @@ glms_vec4_divs(vec4s v, float s) { * @param[in] b vector 2 * @returns dest += (a + b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { +glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_addadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief sub two vectors and add result to dest @@ -442,12 +511,15 @@ glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { * @param[in] b vector 2 * @returns dest += (a - b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { +glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_subadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul two vectors and add result to dest @@ -458,12 +530,15 @@ glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { * @param[in] b vector 2 * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { +glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_muladd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -474,12 +549,15 @@ glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { * @param[in] s scalar * @returns dest += (a * b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_muladds(vec4s a, float s, vec4s dest) { +glms_vec4_muladds(vec4s a, float s, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_muladds(a.raw, s, dest.raw); return dest; } +#endif /*! * @brief add max of two vector to result/dest @@ -490,12 +568,15 @@ glms_vec4_muladds(vec4s a, float s, vec4s dest) { * @param[in] b vector 2 * @returns dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { +glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_maxadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief add min of two vector to result/dest @@ -506,12 +587,15 @@ glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { * @param[in] b vector 2 * @returns dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { +glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_minadd(a.raw, b.raw, dest.raw); return dest; } +#endif /*! * @brief negate vector components and store result in dest @@ -519,12 +603,15 @@ glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { * @param[in] v vector * @returns result vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_negate(vec4s v) { +glms_vec4_negate(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_negate(v.raw); return v; } +#endif /*! * @brief normalize vec4 and store result in same vec @@ -532,12 +619,15 @@ glms_vec4_negate(vec4s v) { * @param[in] v vector * @returns normalized vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_normalize(vec4s v) { +glms_vec4_normalize(vec4s v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_normalize(v.raw); return v; } +#endif /** * @brief distance between two vectors @@ -546,11 +636,14 @@ glms_vec4_normalize(vec4s v) { * @param[in] b vector2 * @return returns distance */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_distance(vec4s a, vec4s b) { +glms_vec4_distance(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_distance(a.raw, b.raw); } +#endif /** * @brief squared distance between two vectors @@ -559,11 +652,14 @@ glms_vec4_distance(vec4s a, vec4s b) { * @param[in] b vector2 * @return returns squared distance */ -CGLM_INLINE +CGLM_DECL float -glms_vec4_distance2(vec4s a, vec4s b) { +glms_vec4_distance2(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_distance2(a.raw, b.raw); } +#endif /*! * @brief max values of vectors @@ -572,13 +668,16 @@ glms_vec4_distance2(vec4s a, vec4s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_maxv(vec4s a, vec4s b) { +glms_vec4_maxv(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_maxv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief min values of vectors @@ -587,13 +686,16 @@ glms_vec4_maxv(vec4s a, vec4s b) { * @param[in] b vector2 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_minv(vec4s a, vec4s b) { +glms_vec4_minv(vec4s a, vec4s b) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_minv(a.raw, b.raw, r.raw); return r; } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -603,12 +705,15 @@ glms_vec4_minv(vec4s a, vec4s b) { * @param[in] maxVal maximum value * @returns clamped vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_clamp(vec4s v, float minVal, float maxVal) { +glms_vec4_clamp(vec4s v, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_clamp(v.raw, minVal, maxVal); return v; } +#endif /*! * @brief linear interpolation between two vectors @@ -620,13 +725,16 @@ glms_vec4_clamp(vec4s v, float minVal, float maxVal) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_lerp(vec4s from, vec4s to, float t) { +glms_vec4_lerp(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_lerp(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -638,13 +746,16 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_lerpc(vec4s from, vec4s to, float t) { +glms_vec4_lerpc(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_lerpc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors @@ -656,13 +767,16 @@ glms_vec4_lerpc(vec4s from, vec4s to, float t) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_mix(vec4s from, vec4s to, float t) { +glms_vec4_mix(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_mix(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -674,13 +788,16 @@ glms_vec4_mix(vec4s from, vec4s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_mixc(vec4s from, vec4s to, float t) { +glms_vec4_mixc(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_mixc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief threshold function (unidimensional) @@ -689,13 +806,16 @@ glms_vec4_mixc(vec4s from, vec4s to, float t) { * @param[in] x value to test against threshold * @returns 0.0 if x < edge, else 1.0 */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_step_uni(float edge, vec4s x) { +glms_vec4_step_uni(float edge, vec4s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_step_uni(edge, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function @@ -704,13 +824,16 @@ glms_vec4_step_uni(float edge, vec4s x) { * @param[in] x value to test against threshold * @returns 0.0 if x < edge, else 1.0 */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_step(vec4s edge, vec4s x) { +glms_vec4_step(vec4s edge, vec4s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_step(edge.raw, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function with a smooth transition (unidimensional) @@ -720,13 +843,16 @@ glms_vec4_step(vec4s edge, vec4s x) { * @param[in] x value to test against threshold * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_smoothstep_uni(float edge0, float edge1, vec4s x) { +glms_vec4_smoothstep_uni(float edge0, float edge1, vec4s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_smoothstep_uni(edge0, edge1, x.raw, r.raw); return r; } +#endif /*! * @brief threshold function with a smooth transition @@ -736,13 +862,16 @@ glms_vec4_smoothstep_uni(float edge0, float edge1, vec4s x) { * @param[in] x value to test against threshold * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_smoothstep(vec4s edge0, vec4s edge1, vec4s x) { +glms_vec4_smoothstep(vec4s edge0, vec4s edge1, vec4s x) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_smoothstep(edge0.raw, edge1.raw, x.raw, r.raw); return r; } +#endif /*! * @brief smooth Hermite interpolation between two vectors @@ -754,13 +883,16 @@ glms_vec4_smoothstep(vec4s edge0, vec4s edge1, vec4s x) { * @param[in] t interpolant (amount) * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_smoothinterp(vec4s from, vec4s to, float t) { +glms_vec4_smoothinterp(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_smoothinterp(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief smooth Hermite interpolation between two vectors (clamped) @@ -772,13 +904,16 @@ glms_vec4_smoothinterp(vec4s from, vec4s to, float t) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_smoothinterpc(vec4s from, vec4s to, float t) { +glms_vec4_smoothinterpc(vec4s from, vec4s to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_smoothinterpc(from.raw, to.raw, t, r.raw); return r; } +#endif /*! * @brief helper to fill vec4 as [S^3, S^2, S, 1] @@ -786,13 +921,16 @@ glms_vec4_smoothinterpc(vec4s from, vec4s to, float t) { * @param[in] s parameter * @returns destination */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_cubic(float s) { +glms_vec4_cubic(float s) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s r; glm_vec4_cubic(s, r.raw); return r; } +#endif /*! * @brief swizzle vector components @@ -803,12 +941,15 @@ glms_vec4_cubic(float s) { * @param[in] mask mask * @returns swizzled vector */ -CGLM_INLINE +CGLM_DECL vec4s -glms_vec4_swizzle(vec4s v, int mask) { +glms_vec4_swizzle(vec4s v, int mask) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4s dest; glm_vec4_swizzle(v.raw, mask, dest.raw); return dest; } +#endif #endif /* cglms_vec4s_h */ diff --git a/include/cglm/util.h b/include/cglm/util.h index a121a5ce3..72837f93d 100644 --- a/include/cglm/util.h +++ b/include/cglm/util.h @@ -7,27 +7,27 @@ /* Functions: - CGLM_INLINE int glm_sign(int val); - CGLM_INLINE float glm_signf(float val); - CGLM_INLINE float glm_rad(float deg); - CGLM_INLINE float glm_deg(float rad); - CGLM_INLINE void glm_make_rad(float *deg); - CGLM_INLINE void glm_make_deg(float *rad); - CGLM_INLINE float glm_pow2(float x); - CGLM_INLINE float glm_min(float a, float b); - CGLM_INLINE float glm_max(float a, float b); - CGLM_INLINE float glm_clamp(float val, float minVal, float maxVal); - CGLM_INLINE float glm_clamp_zo(float val, float minVal, float maxVal); - CGLM_INLINE float glm_lerp(float from, float to, float t); - CGLM_INLINE float glm_lerpc(float from, float to, float t); - CGLM_INLINE float glm_step(float edge, float x); - CGLM_INLINE float glm_smooth(float t); - CGLM_INLINE float glm_smoothstep(float edge0, float edge1, float x); - CGLM_INLINE float glm_smoothinterp(float from, float to, float t); - CGLM_INLINE float glm_smoothinterpc(float from, float to, float t); - CGLM_INLINE bool glm_eq(float a, float b); - CGLM_INLINE float glm_percent(float from, float to, float current); - CGLM_INLINE float glm_percentc(float from, float to, float current); + CGLM_DECL int glm_sign(int val); + CGLM_DECL float glm_signf(float val); + CGLM_DECL float glm_rad(float deg); + CGLM_DECL float glm_deg(float rad); + CGLM_DECL void glm_make_rad(float *deg); + CGLM_DECL void glm_make_deg(float *rad); + CGLM_DECL float glm_pow2(float x); + CGLM_DECL float glm_min(float a, float b); + CGLM_DECL float glm_max(float a, float b); + CGLM_DECL float glm_clamp(float val, float minVal, float maxVal); + CGLM_DECL float glm_clamp_zo(float val, float minVal, float maxVal); + CGLM_DECL float glm_lerp(float from, float to, float t); + CGLM_DECL float glm_lerpc(float from, float to, float t); + CGLM_DECL float glm_step(float edge, float x); + CGLM_DECL float glm_smooth(float t); + CGLM_DECL float glm_smoothstep(float edge0, float edge1, float x); + CGLM_DECL float glm_smoothinterp(float from, float to, float t); + CGLM_DECL float glm_smoothinterpc(float from, float to, float t); + CGLM_DECL bool glm_eq(float a, float b); + CGLM_DECL float glm_percent(float from, float to, float current); + CGLM_DECL float glm_percentc(float from, float to, float current); */ #ifndef cglm_util_h @@ -45,11 +45,14 @@ * * @param val integer value */ -CGLM_INLINE +CGLM_DECL int -glm_sign(int val) { +glm_sign(int val) CGLM_ENDD +#ifndef CGLM_LIB +{ return ((val >> 31) - (-val >> 31)); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -58,66 +61,84 @@ glm_sign(int val) { * * @param val float value */ -CGLM_INLINE +CGLM_DECL float -glm_signf(float val) { +glm_signf(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return (float)((val > 0.0f) - (val < 0.0f)); } +#endif /*! * @brief convert degree to radians * * @param[in] deg angle in degrees */ -CGLM_INLINE +CGLM_DECL float -glm_rad(float deg) { +glm_rad(float deg) CGLM_ENDD +#ifndef CGLM_LIB +{ return deg * GLM_PIf / 180.0f; } +#endif /*! * @brief convert radians to degree * * @param[in] rad angle in radians */ -CGLM_INLINE +CGLM_DECL float -glm_deg(float rad) { +glm_deg(float rad) CGLM_ENDD +#ifndef CGLM_LIB +{ return rad * 180.0f / GLM_PIf; } +#endif /*! * @brief convert exsisting degree to radians. this will override degrees value * * @param[in, out] deg pointer to angle in degrees */ -CGLM_INLINE +CGLM_DECL void -glm_make_rad(float *deg) { +glm_make_rad(float *deg) CGLM_ENDD +#ifndef CGLM_LIB +{ *deg = *deg * GLM_PIf / 180.0f; } +#endif /*! * @brief convert exsisting radians to degree. this will override radians value * * @param[in, out] rad pointer to angle in radians */ -CGLM_INLINE +CGLM_DECL void -glm_make_deg(float *rad) { +glm_make_deg(float *rad) CGLM_ENDD +#ifndef CGLM_LIB +{ *rad = *rad * 180.0f / GLM_PIf; } +#endif /*! * @brief multiplies given parameter with itself = x * x or powf(x, 2) * * @param[in] x x */ -CGLM_INLINE +CGLM_DECL float -glm_pow2(float x) { +glm_pow2(float x) CGLM_ENDD +#ifndef CGLM_LIB +{ return x * x; } +#endif /*! * @brief find minimum of given two values @@ -125,13 +146,16 @@ glm_pow2(float x) { * @param[in] a number 1 * @param[in] b number 2 */ -CGLM_INLINE +CGLM_DECL float -glm_min(float a, float b) { +glm_min(float a, float b) CGLM_ENDD +#ifndef CGLM_LIB +{ if (a < b) return a; return b; } +#endif /*! * @brief find maximum of given two values @@ -139,13 +163,16 @@ glm_min(float a, float b) { * @param[in] a number 1 * @param[in] b number 2 */ -CGLM_INLINE +CGLM_DECL float -glm_max(float a, float b) { +glm_max(float a, float b) CGLM_ENDD +#ifndef CGLM_LIB +{ if (a > b) return a; return b; } +#endif /*! * @brief clamp a number between min and max @@ -154,22 +181,28 @@ glm_max(float a, float b) { * @param[in] minVal minimum value * @param[in] maxVal maximum value */ -CGLM_INLINE +CGLM_DECL float -glm_clamp(float val, float minVal, float maxVal) { +glm_clamp(float val, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_min(glm_max(val, minVal), maxVal); } +#endif /*! * @brief clamp a number to zero and one * * @param[in] val value to clamp */ -CGLM_INLINE +CGLM_DECL float -glm_clamp_zo(float val) { +glm_clamp_zo(float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_clamp(val, 0.0f, 1.0f); } +#endif /*! * @brief linear interpolation between two numbers @@ -180,11 +213,14 @@ glm_clamp_zo(float val) { * @param[in] to to value * @param[in] t interpolant (amount) */ -CGLM_INLINE +CGLM_DECL float -glm_lerp(float from, float to, float t) { +glm_lerp(float from, float to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return from + t * (to - from); } +#endif /*! * @brief clamped linear interpolation between two numbers @@ -195,11 +231,14 @@ glm_lerp(float from, float to, float t) { * @param[in] to to value * @param[in] t interpolant (amount) clamped between 0 and 1 */ -CGLM_INLINE +CGLM_DECL float -glm_lerpc(float from, float to, float t) { +glm_lerpc(float from, float to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_lerp(from, to, glm_clamp_zo(t)); } +#endif /*! * @brief threshold function @@ -208,9 +247,11 @@ glm_lerpc(float from, float to, float t) { * @param[in] x value to test against threshold * @return returns 0.0 if x < edge, else 1.0 */ -CGLM_INLINE +CGLM_DECL float -glm_step(float edge, float x) { +glm_step(float edge, float x) CGLM_ENDD +#ifndef CGLM_LIB +{ /* branching - no type conversion */ return (x < edge) ? 0.0f : 1.0f; /* @@ -219,6 +260,7 @@ glm_step(float edge, float x) { * return !(x < edge); */ } +#endif /*! * @brief smooth Hermite interpolation @@ -227,11 +269,14 @@ glm_step(float edge, float x) { * * @param[in] t interpolant (amount) */ -CGLM_INLINE +CGLM_DECL float -glm_smooth(float t) { +glm_smooth(float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return t * t * (3.0f - 2.0f * t); } +#endif /*! * @brief threshold function with a smooth transition (according to OpenCL specs) @@ -242,13 +287,16 @@ glm_smooth(float t) { * @param[in] edge1 high threshold * @param[in] x interpolant (amount) */ -CGLM_INLINE +CGLM_DECL float -glm_smoothstep(float edge0, float edge1, float x) { +glm_smoothstep(float edge0, float edge1, float x) CGLM_ENDD +#ifndef CGLM_LIB +{ float t; t = glm_clamp_zo((x - edge0) / (edge1 - edge0)); return glm_smooth(t); } +#endif /*! * @brief smoothstep interpolation between two numbers @@ -259,11 +307,14 @@ glm_smoothstep(float edge0, float edge1, float x) { * @param[in] to to value * @param[in] t interpolant (amount) */ -CGLM_INLINE +CGLM_DECL float -glm_smoothinterp(float from, float to, float t) { +glm_smoothinterp(float from, float to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return from + glm_smooth(t) * (to - from); } +#endif /*! * @brief clamped smoothstep interpolation between two numbers @@ -274,11 +325,14 @@ glm_smoothinterp(float from, float to, float t) { * @param[in] to to value * @param[in] t interpolant (amount) clamped between 0 and 1 */ -CGLM_INLINE +CGLM_DECL float -glm_smoothinterpc(float from, float to, float t) { +glm_smoothinterpc(float from, float to, float t) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_smoothinterp(from, to, glm_clamp_zo(t)); } +#endif /*! * @brief check if two float equal with using EPSILON @@ -286,11 +340,14 @@ glm_smoothinterpc(float from, float to, float t) { * @param[in] a a * @param[in] b b */ -CGLM_INLINE +CGLM_DECL bool -glm_eq(float a, float b) { +glm_eq(float a, float b) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(a - b) <= FLT_EPSILON; } +#endif /*! * @brief percentage of current value between start and end value @@ -301,9 +358,11 @@ glm_eq(float a, float b) { * @param[in] to to value * @param[in] current current value */ -CGLM_INLINE +CGLM_DECL float -glm_percent(float from, float to, float current) { +glm_percent(float from, float to, float current) CGLM_ENDD +#ifndef CGLM_LIB +{ float t; if ((t = to - from) == 0.0f) @@ -311,6 +370,7 @@ glm_percent(float from, float to, float current) { return (current - from) / t; } +#endif /*! * @brief clamped percentage of current value between start and end value @@ -319,11 +379,14 @@ glm_percent(float from, float to, float current) { * @param[in] to to value * @param[in] current current value */ -CGLM_INLINE +CGLM_DECL float -glm_percentc(float from, float to, float current) { +glm_percentc(float from, float to, float current) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_clamp_zo(glm_percent(from, to, current)); } +#endif /*! * @brief swap two float values @@ -331,13 +394,16 @@ glm_percentc(float from, float to, float current) { * @param[in] a float value 1 (pointer) * @param[in] b float value 2 (pointer) */ -CGLM_INLINE +CGLM_DECL void -glm_swapf(float * __restrict a, float * __restrict b) { +glm_swapf(float * __restrict a, float * __restrict b) CGLM_ENDD +#ifndef CGLM_LIB +{ float t; t = *a; *a = *b; *b = t; } +#endif #endif /* cglm_util_h */ diff --git a/include/cglm/vec2-ext.h b/include/cglm/vec2-ext.h index da5ba6545..4c518cbc1 100644 --- a/include/cglm/vec2-ext.h +++ b/include/cglm/vec2-ext.h @@ -7,19 +7,19 @@ /* Functions: - CGLM_INLINE void glm_vec2_fill(vec2 v, float val) - CGLM_INLINE bool glm_vec2_eq(vec2 v, float val); - CGLM_INLINE bool glm_vec2_eq_eps(vec2 v, float val); - CGLM_INLINE bool glm_vec2_eq_all(vec2 v); - CGLM_INLINE bool glm_vec2_eqv(vec2 a, vec2 b); - CGLM_INLINE bool glm_vec2_eqv_eps(vec2 a, vec2 b); - CGLM_INLINE float glm_vec2_max(vec2 v); - CGLM_INLINE float glm_vec2_min(vec2 v); - CGLM_INLINE bool glm_vec2_isnan(vec2 v); - CGLM_INLINE bool glm_vec2_isinf(vec2 v); - CGLM_INLINE bool glm_vec2_isvalid(vec2 v); - CGLM_INLINE void glm_vec2_sign(vec2 v, vec2 dest); - CGLM_INLINE void glm_vec2_sqrt(vec2 v, vec2 dest); + CGLM_DECL void glm_vec2_fill(vec2 v, float val) + CGLM_DECL bool glm_vec2_eq(vec2 v, float val); + CGLM_DECL bool glm_vec2_eq_eps(vec2 v, float val); + CGLM_DECL bool glm_vec2_eq_all(vec2 v); + CGLM_DECL bool glm_vec2_eqv(vec2 a, vec2 b); + CGLM_DECL bool glm_vec2_eqv_eps(vec2 a, vec2 b); + CGLM_DECL float glm_vec2_max(vec2 v); + CGLM_DECL float glm_vec2_min(vec2 v); + CGLM_DECL bool glm_vec2_isnan(vec2 v); + CGLM_DECL bool glm_vec2_isinf(vec2 v); + CGLM_DECL bool glm_vec2_isvalid(vec2 v); + CGLM_DECL void glm_vec2_sign(vec2 v, vec2 dest); + CGLM_DECL void glm_vec2_sqrt(vec2 v, vec2 dest); */ #ifndef cglm_vec2_ext_h @@ -34,11 +34,14 @@ * @param[out] v dest * @param[in] val value */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_fill(vec2 v, float val) { +glm_vec2_fill(vec2 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = val; } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -46,11 +49,14 @@ glm_vec2_fill(vec2 v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_eq(vec2 v, float val) { +glm_vec2_eq(vec2 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == val && v[0] == v[1]; } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -58,23 +64,29 @@ glm_vec2_eq(vec2 v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_eq_eps(vec2 v, float val) { +glm_vec2_eq_eps(vec2 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON; } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_eq_all(vec2 v) { +glm_vec2_eq_all(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == v[1]; } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -82,11 +94,14 @@ glm_vec2_eq_all(vec2 v) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_eqv(vec2 a, vec2 b) { +glm_vec2_eqv(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return a[0] == b[0] && a[1] == b[1]; } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -94,34 +109,43 @@ glm_vec2_eqv(vec2 a, vec2 b) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_eqv_eps(vec2 a, vec2 b) { +glm_vec2_eqv_eps(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON; } +#endif /*! * @brief max value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_max(vec2 v) { +glm_vec2_max(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_max(v[0], v[1]); } +#endif /*! * @brief min value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_min(vec2 v) { +glm_vec2_min(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_min(v[0], v[1]); } +#endif /*! * @brief check if all items are NaN (not a number) @@ -129,11 +153,14 @@ glm_vec2_min(vec2 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_isnan(vec2 v) { +glm_vec2_isnan(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isnan(v[0]) || isnan(v[1]); } +#endif /*! * @brief check if all items are INFINITY @@ -141,11 +168,14 @@ glm_vec2_isnan(vec2 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_isinf(vec2 v) { +glm_vec2_isinf(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isinf(v[0]) || isinf(v[1]); } +#endif /*! * @brief check if all items are valid number @@ -153,11 +183,14 @@ glm_vec2_isinf(vec2 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec2_isvalid(vec2 v) { +glm_vec2_isvalid(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return !glm_vec2_isnan(v) && !glm_vec2_isinf(v); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -166,12 +199,15 @@ glm_vec2_isvalid(vec2 v) { * * @param v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_sign(vec2 v, vec2 dest) { +glm_vec2_sign(vec2 v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_signf(v[0]); dest[1] = glm_signf(v[1]); } +#endif /*! * @brief square root of each vector item @@ -179,11 +215,14 @@ glm_vec2_sign(vec2 v, vec2 dest) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_sqrt(vec2 v, vec2 dest) { +glm_vec2_sqrt(vec2 v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = sqrtf(v[0]); dest[1] = sqrtf(v[1]); } +#endif #endif /* cglm_vec2_ext_h */ diff --git a/include/cglm/vec2.h b/include/cglm/vec2.h index 73ecea954..7a4b59eba 100644 --- a/include/cglm/vec2.h +++ b/include/cglm/vec2.h @@ -13,40 +13,40 @@ GLM_VEC2_ZERO Functions: - CGLM_INLINE void glm_vec2(float * __restrict v, vec2 dest) - CGLM_INLINE void glm_vec2_copy(vec2 a, vec2 dest) - CGLM_INLINE void glm_vec2_zero(vec2 v) - CGLM_INLINE void glm_vec2_one(vec2 v) - CGLM_INLINE float glm_vec2_dot(vec2 a, vec2 b) - CGLM_INLINE float glm_vec2_cross(vec2 a, vec2 b) - CGLM_INLINE float glm_vec2_norm2(vec2 v) - CGLM_INLINE float glm_vec2_norm(vec2 vec) - CGLM_INLINE void glm_vec2_add(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_adds(vec2 v, float s, vec2 dest) - CGLM_INLINE void glm_vec2_sub(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_subs(vec2 v, float s, vec2 dest) - CGLM_INLINE void glm_vec2_mul(vec2 a, vec2 b, vec2 d) - CGLM_INLINE void glm_vec2_scale(vec2 v, float s, vec2 dest) - CGLM_INLINE void glm_vec2_scale_as(vec2 v, float s, vec2 dest) - CGLM_INLINE void glm_vec2_div(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_divs(vec2 v, float s, vec2 dest) - CGLM_INLINE void glm_vec2_addadd(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_subadd(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_muladd(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_muladds(vec2 a, float s, vec2 dest) - CGLM_INLINE void glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) - CGLM_INLINE void glm_vec2_negate_to(vec2 v, vec2 dest) - CGLM_INLINE void glm_vec2_negate(vec2 v) - CGLM_INLINE void glm_vec2_normalize(vec2 v) - CGLM_INLINE void glm_vec2_normalize_to(vec2 vec, vec2 dest) - CGLM_INLINE void glm_vec2_rotate(vec2 v, float angle, vec2 dest) - CGLM_INLINE float glm_vec2_distance2(vec2 a, vec2 b) - CGLM_INLINE float glm_vec2_distance(vec2 a, vec2 b) - CGLM_INLINE void glm_vec2_maxv(vec2 v1, vec2 v2, vec2 dest) - CGLM_INLINE void glm_vec2_minv(vec2 v1, vec2 v2, vec2 dest) - CGLM_INLINE void glm_vec2_clamp(vec2 v, float minVal, float maxVal) - CGLM_INLINE void glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) + CGLM_DECL void glm_vec2(float * __restrict v, vec2 dest) + CGLM_DECL void glm_vec2_copy(vec2 a, vec2 dest) + CGLM_DECL void glm_vec2_zero(vec2 v) + CGLM_DECL void glm_vec2_one(vec2 v) + CGLM_DECL float glm_vec2_dot(vec2 a, vec2 b) + CGLM_DECL float glm_vec2_cross(vec2 a, vec2 b) + CGLM_DECL float glm_vec2_norm2(vec2 v) + CGLM_DECL float glm_vec2_norm(vec2 vec) + CGLM_DECL void glm_vec2_add(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_adds(vec2 v, float s, vec2 dest) + CGLM_DECL void glm_vec2_sub(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_subs(vec2 v, float s, vec2 dest) + CGLM_DECL void glm_vec2_mul(vec2 a, vec2 b, vec2 d) + CGLM_DECL void glm_vec2_scale(vec2 v, float s, vec2 dest) + CGLM_DECL void glm_vec2_scale_as(vec2 v, float s, vec2 dest) + CGLM_DECL void glm_vec2_div(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_divs(vec2 v, float s, vec2 dest) + CGLM_DECL void glm_vec2_addadd(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_subadd(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_muladd(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_muladds(vec2 a, float s, vec2 dest) + CGLM_DECL void glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) + CGLM_DECL void glm_vec2_negate_to(vec2 v, vec2 dest) + CGLM_DECL void glm_vec2_negate(vec2 v) + CGLM_DECL void glm_vec2_normalize(vec2 v) + CGLM_DECL void glm_vec2_normalize_to(vec2 vec, vec2 dest) + CGLM_DECL void glm_vec2_rotate(vec2 v, float angle, vec2 dest) + CGLM_DECL float glm_vec2_distance2(vec2 a, vec2 b) + CGLM_DECL float glm_vec2_distance(vec2 a, vec2 b) + CGLM_DECL void glm_vec2_maxv(vec2 v1, vec2 v2, vec2 dest) + CGLM_DECL void glm_vec2_minv(vec2 v1, vec2 v2, vec2 dest) + CGLM_DECL void glm_vec2_clamp(vec2 v, float minVal, float maxVal) + CGLM_DECL void glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) */ @@ -69,12 +69,15 @@ * @param[in] v a vector * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2(float * __restrict v, vec2 dest) { +glm_vec2(float * __restrict v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0]; dest[1] = v[1]; } +#endif /*! * @brief copy all members of [a] to [dest] @@ -82,34 +85,43 @@ glm_vec2(float * __restrict v, vec2 dest) { * @param[in] a source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_copy(vec2 a, vec2 dest) { +glm_vec2_copy(vec2 a, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0]; dest[1] = a[1]; } +#endif /*! * @brief make vector zero * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_zero(vec2 v) { +glm_vec2_zero(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = 0.0f; } +#endif /*! * @brief make vector one * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_one(vec2 v) { +glm_vec2_one(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = 1.0f; } +#endif /*! * @brief vec2 dot product @@ -119,11 +131,14 @@ glm_vec2_one(vec2 v) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_dot(vec2 a, vec2 b) { +glm_vec2_dot(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return a[0] * b[0] + a[1] * b[1]; } +#endif /*! * @brief vec2 cross product @@ -135,12 +150,15 @@ glm_vec2_dot(vec2 a, vec2 b) { * * @return Z component of cross product */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_cross(vec2 a, vec2 b) { +glm_vec2_cross(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ /* just calculate the z-component */ return a[0] * b[1] - a[1] * b[0]; } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -153,11 +171,14 @@ glm_vec2_cross(vec2 a, vec2 b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_norm2(vec2 v) { +glm_vec2_norm2(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec2_dot(v, v); } +#endif /*! * @brief norm (magnitude) of vec2 @@ -166,11 +187,14 @@ glm_vec2_norm2(vec2 v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_norm(vec2 vec) { +glm_vec2_norm(vec2 vec) CGLM_ENDD +#ifndef CGLM_LIB +{ return sqrtf(glm_vec2_norm2(vec)); } +#endif /*! * @brief add a vector to b vector store result in dest @@ -179,12 +203,15 @@ glm_vec2_norm(vec2 vec) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_add(vec2 a, vec2 b, vec2 dest) { +glm_vec2_add(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] + b[0]; dest[1] = a[1] + b[1]; } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + s) @@ -193,12 +220,15 @@ glm_vec2_add(vec2 a, vec2 b, vec2 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_adds(vec2 v, float s, vec2 dest) { +glm_vec2_adds(vec2 v, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] + s; dest[1] = v[1] + s; } +#endif /*! * @brief subtract b vector from a vector store result in dest @@ -207,12 +237,15 @@ glm_vec2_adds(vec2 v, float s, vec2 dest) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_sub(vec2 a, vec2 b, vec2 dest) { +glm_vec2_sub(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] - b[0]; dest[1] = a[1] - b[1]; } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - s) @@ -221,12 +254,15 @@ glm_vec2_sub(vec2 a, vec2 b, vec2 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_subs(vec2 v, float s, vec2 dest) { +glm_vec2_subs(vec2 v, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] - s; dest[1] = v[1] - s; } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -235,12 +271,15 @@ glm_vec2_subs(vec2 v, float s, vec2 dest) { * @param b v2 * @param dest v3 = (a[0] * b[0], a[1] * b[1]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_mul(vec2 a, vec2 b, vec2 dest) { +glm_vec2_mul(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] * b[0]; dest[1] = a[1] * b[1]; } +#endif /*! * @brief multiply/scale vector with scalar: result = v * s @@ -249,12 +288,15 @@ glm_vec2_mul(vec2 a, vec2 b, vec2 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_scale(vec2 v, float s, vec2 dest) { +glm_vec2_scale(vec2 v, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] * s; dest[1] = v[1] * s; } +#endif /*! * @brief scale as vector specified: result = unit(v) * s @@ -263,9 +305,11 @@ glm_vec2_scale(vec2 v, float s, vec2 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_scale_as(vec2 v, float s, vec2 dest) { +glm_vec2_scale_as(vec2 v, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec2_norm(v); @@ -276,6 +320,7 @@ glm_vec2_scale_as(vec2 v, float s, vec2 dest) { glm_vec2_scale(v, s / norm, dest); } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -284,12 +329,15 @@ glm_vec2_scale_as(vec2 v, float s, vec2 dest) { * @param[in] b vector 2 * @param[out] dest result = (a[0]/b[0], a[1]/b[1]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_div(vec2 a, vec2 b, vec2 dest) { +glm_vec2_div(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] / b[0]; dest[1] = a[1] / b[1]; } +#endif /*! * @brief div vector with scalar: d = v / s @@ -298,12 +346,15 @@ glm_vec2_div(vec2 a, vec2 b, vec2 dest) { * @param[in] s scalar * @param[out] dest result = (a[0]/s, a[1]/s) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_divs(vec2 v, float s, vec2 dest) { +glm_vec2_divs(vec2 v, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] / s; dest[1] = v[1] / s; } +#endif /*! * @brief add two vectors and add result to sum @@ -314,12 +365,15 @@ glm_vec2_divs(vec2 v, float s, vec2 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a + b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_addadd(vec2 a, vec2 b, vec2 dest) { +glm_vec2_addadd(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] + b[0]; dest[1] += a[1] + b[1]; } +#endif /*! * @brief sub two vectors and add result to dest @@ -330,12 +384,15 @@ glm_vec2_addadd(vec2 a, vec2 b, vec2 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a + b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_subadd(vec2 a, vec2 b, vec2 dest) { +glm_vec2_subadd(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] - b[0]; dest[1] += a[1] - b[1]; } +#endif /*! * @brief mul two vectors and add result to dest @@ -346,12 +403,15 @@ glm_vec2_subadd(vec2 a, vec2 b, vec2 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_muladd(vec2 a, vec2 b, vec2 dest) { +glm_vec2_muladd(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] * b[0]; dest[1] += a[1] * b[1]; } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -362,12 +422,15 @@ glm_vec2_muladd(vec2 a, vec2 b, vec2 dest) { * @param[in] s scalar * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_muladds(vec2 a, float s, vec2 dest) { +glm_vec2_muladds(vec2 a, float s, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] * s; dest[1] += a[1] * s; } +#endif /*! * @brief add max of two vector to result/dest @@ -378,12 +441,15 @@ glm_vec2_muladds(vec2 a, float s, vec2 dest) { * @param[in] b vector 2 * @param[out] dest dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest) { +glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += glm_max(a[0], b[0]); dest[1] += glm_max(a[1], b[1]); } +#endif /*! * @brief add min of two vector to result/dest @@ -394,12 +460,15 @@ glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest) { * @param[in] b vector 2 * @param[out] dest dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) { +glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += glm_min(a[0], b[0]); dest[1] += glm_min(a[1], b[1]); } +#endif /*! * @brief negate vector components and store result in dest @@ -407,32 +476,40 @@ glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) { * @param[in] v vector * @param[out] dest result vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_negate_to(vec2 v, vec2 dest) { +glm_vec2_negate_to(vec2 v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = -v[0]; dest[1] = -v[1]; } +#endif /*! * @brief negate vector components * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_negate(vec2 v) { +glm_vec2_negate(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec2_negate_to(v, v); } +#endif /*! * @brief normalize vector and store result in same vec * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_normalize(vec2 v) { +glm_vec2_normalize(vec2 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec2_norm(v); @@ -444,6 +521,7 @@ glm_vec2_normalize(vec2 v) { glm_vec2_scale(v, 1.0f / norm, v); } +#endif /*! * @brief normalize vector to dest @@ -451,9 +529,11 @@ glm_vec2_normalize(vec2 v) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_normalize_to(vec2 v, vec2 dest) { +glm_vec2_normalize_to(vec2 v, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec2_norm(v); @@ -465,6 +545,7 @@ glm_vec2_normalize_to(vec2 v, vec2 dest) { glm_vec2_scale(v, 1.0f / norm, dest); } +#endif /*! * @brief rotate vec2 around origin by angle (CCW: counterclockwise) @@ -477,9 +558,11 @@ glm_vec2_normalize_to(vec2 v, vec2 dest) { * @param[in] angle angle by radians * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_rotate(vec2 v, float angle, vec2 dest) { +glm_vec2_rotate(vec2 v, float angle, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float c, s, x1, y1; c = cosf(angle); @@ -491,6 +574,7 @@ glm_vec2_rotate(vec2 v, float angle, vec2 dest) { dest[0] = c * x1 - s * y1; dest[1] = s * x1 + c * y1; } +#endif /** * @brief squared distance between two vectors @@ -499,11 +583,14 @@ glm_vec2_rotate(vec2 v, float angle, vec2 dest) { * @param[in] b vector2 * @return returns squared distance (distance * distance) */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_distance2(vec2 a, vec2 b) { +glm_vec2_distance2(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_pow2(b[0] - a[0]) + glm_pow2(b[1] - a[1]); } +#endif /** * @brief distance between two vectors @@ -512,11 +599,14 @@ glm_vec2_distance2(vec2 a, vec2 b) { * @param[in] b vector2 * @return returns distance */ -CGLM_INLINE +CGLM_DECL float -glm_vec2_distance(vec2 a, vec2 b) { +glm_vec2_distance(vec2 a, vec2 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return sqrtf(glm_vec2_distance2(a, b)); } +#endif /*! * @brief max values of vectors @@ -525,12 +615,15 @@ glm_vec2_distance(vec2 a, vec2 b) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_maxv(vec2 a, vec2 b, vec2 dest) { +glm_vec2_maxv(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_max(a[0], b[0]); dest[1] = glm_max(a[1], b[1]); } +#endif /*! * @brief min values of vectors @@ -539,12 +632,15 @@ glm_vec2_maxv(vec2 a, vec2 b, vec2 dest) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_minv(vec2 a, vec2 b, vec2 dest) { +glm_vec2_minv(vec2 a, vec2 b, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_min(a[0], b[0]); dest[1] = glm_min(a[1], b[1]); } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -553,12 +649,15 @@ glm_vec2_minv(vec2 a, vec2 b, vec2 dest) { * @param[in] minval minimum value * @param[in] maxval maximum value */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_clamp(vec2 v, float minval, float maxval) { +glm_vec2_clamp(vec2 v, float minval, float maxval) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = glm_clamp(v[0], minval, maxval); v[1] = glm_clamp(v[1], minval, maxval); } +#endif /*! * @brief linear interpolation between two vector @@ -570,9 +669,11 @@ glm_vec2_clamp(vec2 v, float minval, float maxval) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) { +glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec2 s, v; /* from + s * (to - from) */ @@ -581,5 +682,6 @@ glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) { glm_vec2_mul(s, v, v); glm_vec2_add(from, v, dest); } +#endif #endif /* cglm_vec2_h */ diff --git a/include/cglm/vec3-ext.h b/include/cglm/vec3-ext.h index 240c33def..d4df5c1f9 100644 --- a/include/cglm/vec3-ext.h +++ b/include/cglm/vec3-ext.h @@ -11,23 +11,23 @@ /* Functions: - CGLM_INLINE void glm_vec3_broadcast(float val, vec3 d); - CGLM_INLINE void glm_vec3_fill(vec3 v, float val); - CGLM_INLINE bool glm_vec3_eq(vec3 v, float val); - CGLM_INLINE bool glm_vec3_eq_eps(vec3 v, float val); - CGLM_INLINE bool glm_vec3_eq_all(vec3 v); - CGLM_INLINE bool glm_vec3_eqv(vec3 a, vec3 b); - CGLM_INLINE bool glm_vec3_eqv_eps(vec3 a, vec3 b); - CGLM_INLINE float glm_vec3_max(vec3 v); - CGLM_INLINE float glm_vec3_min(vec3 v); - CGLM_INLINE bool glm_vec3_isnan(vec3 v); - CGLM_INLINE bool glm_vec3_isinf(vec3 v); - CGLM_INLINE bool glm_vec3_isvalid(vec3 v); - CGLM_INLINE void glm_vec3_sign(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_abs(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_fract(vec3 v, vec3 dest); - CGLM_INLINE float glm_vec3_hadd(vec3 v); - CGLM_INLINE void glm_vec3_sqrt(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_broadcast(float val, vec3 d); + CGLM_DECL void glm_vec3_fill(vec3 v, float val); + CGLM_DECL bool glm_vec3_eq(vec3 v, float val); + CGLM_DECL bool glm_vec3_eq_eps(vec3 v, float val); + CGLM_DECL bool glm_vec3_eq_all(vec3 v); + CGLM_DECL bool glm_vec3_eqv(vec3 a, vec3 b); + CGLM_DECL bool glm_vec3_eqv_eps(vec3 a, vec3 b); + CGLM_DECL float glm_vec3_max(vec3 v); + CGLM_DECL float glm_vec3_min(vec3 v); + CGLM_DECL bool glm_vec3_isnan(vec3 v); + CGLM_DECL bool glm_vec3_isinf(vec3 v); + CGLM_DECL bool glm_vec3_isvalid(vec3 v); + CGLM_DECL void glm_vec3_sign(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_abs(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_fract(vec3 v, vec3 dest); + CGLM_DECL float glm_vec3_hadd(vec3 v); + CGLM_DECL void glm_vec3_sqrt(vec3 v, vec3 dest); */ #ifndef cglm_vec3_ext_h @@ -42,11 +42,14 @@ * @param[in] val value * @param[out] d dest */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_broadcast(float val, vec3 d) { +glm_vec3_broadcast(float val, vec3 d) CGLM_ENDD +#ifndef CGLM_LIB +{ d[0] = d[1] = d[2] = val; } +#endif /*! * @brief fill a vector with specified value @@ -54,11 +57,14 @@ glm_vec3_broadcast(float val, vec3 d) { * @param[out] v dest * @param[in] val value */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_fill(vec3 v, float val) { +glm_vec3_fill(vec3 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = v[2] = val; } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -66,11 +72,14 @@ glm_vec3_fill(vec3 v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_eq(vec3 v, float val) { +glm_vec3_eq(vec3 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == val && v[0] == v[1] && v[0] == v[2]; } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -78,24 +87,30 @@ glm_vec3_eq(vec3 v, float val) { * @param[in] v vector * @param[in] val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_eq_eps(vec3 v, float val) { +glm_vec3_eq_eps(vec3 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON; } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_eq_all(vec3 v) { +glm_vec3_eq_all(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == v[1] && v[0] == v[2]; } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -103,13 +118,16 @@ glm_vec3_eq_all(vec3 v) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_eqv(vec3 a, vec3 b) { +glm_vec3_eqv(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]; } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -117,22 +135,27 @@ glm_vec3_eqv(vec3 a, vec3 b) { * @param[in] a vector * @param[in] b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_eqv_eps(vec3 a, vec3 b) { +glm_vec3_eqv_eps(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON; } +#endif /*! * @brief max value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_max(vec3 v) { +glm_vec3_max(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float max; max = v[0]; @@ -143,15 +166,18 @@ glm_vec3_max(vec3 v) { return max; } +#endif /*! * @brief min value of vector * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_min(vec3 v) { +glm_vec3_min(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float min; min = v[0]; @@ -162,6 +188,7 @@ glm_vec3_min(vec3 v) { return min; } +#endif /*! * @brief check if all items are NaN (not a number) @@ -169,11 +196,14 @@ glm_vec3_min(vec3 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_isnan(vec3 v) { +glm_vec3_isnan(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isnan(v[0]) || isnan(v[1]) || isnan(v[2]); } +#endif /*! * @brief check if all items are INFINITY @@ -181,11 +211,14 @@ glm_vec3_isnan(vec3 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_isinf(vec3 v) { +glm_vec3_isinf(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isinf(v[0]) || isinf(v[1]) || isinf(v[2]); } +#endif /*! * @brief check if all items are valid number @@ -193,11 +226,14 @@ glm_vec3_isinf(vec3 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec3_isvalid(vec3 v) { +glm_vec3_isvalid(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return !glm_vec3_isnan(v) && !glm_vec3_isinf(v); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -206,13 +242,16 @@ glm_vec3_isvalid(vec3 v) { * * @param v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_sign(vec3 v, vec3 dest) { +glm_vec3_sign(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_signf(v[0]); dest[1] = glm_signf(v[1]); dest[2] = glm_signf(v[2]); } +#endif /*! * @brief absolute value of each vector item @@ -220,13 +259,16 @@ glm_vec3_sign(vec3 v, vec3 dest) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_abs(vec3 v, vec3 dest) { +glm_vec3_abs(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = fabsf(v[0]); dest[1] = fabsf(v[1]); dest[2] = fabsf(v[2]); } +#endif /*! * @brief fractional part of each vector item @@ -234,13 +276,16 @@ glm_vec3_abs(vec3 v, vec3 dest) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_fract(vec3 v, vec3 dest) { +glm_vec3_fract(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = fminf(v[0] - floorf(v[0]), 0x1.fffffep-1f); dest[1] = fminf(v[1] - floorf(v[1]), 0x1.fffffep-1f); dest[2] = fminf(v[2] - floorf(v[2]), 0x1.fffffep-1f); } +#endif /*! * @brief vector reduction by summation @@ -249,11 +294,14 @@ glm_vec3_fract(vec3 v, vec3 dest) { * @param[in] v vector * @return sum of all vector's elements */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_hadd(vec3 v) { +glm_vec3_hadd(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] + v[1] + v[2]; } +#endif /*! * @brief square root of each vector item @@ -261,12 +309,15 @@ glm_vec3_hadd(vec3 v) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_sqrt(vec3 v, vec3 dest) { +glm_vec3_sqrt(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = sqrtf(v[0]); dest[1] = sqrtf(v[1]); dest[2] = sqrtf(v[2]); } +#endif #endif /* cglm_vec3_ext_h */ diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index 7abeaf5f3..28516749b 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -16,69 +16,69 @@ GLM_XUP Functions: - CGLM_INLINE void glm_vec3(vec4 v4, vec3 dest); - CGLM_INLINE void glm_vec3_copy(vec3 a, vec3 dest); - CGLM_INLINE void glm_vec3_zero(vec3 v); - CGLM_INLINE void glm_vec3_one(vec3 v); - CGLM_INLINE float glm_vec3_dot(vec3 a, vec3 b); - CGLM_INLINE float glm_vec3_norm2(vec3 v); - CGLM_INLINE float glm_vec3_norm(vec3 v); - CGLM_INLINE float glm_vec3_norm_one(vec3 v); - CGLM_INLINE float glm_vec3_norm_inf(vec3 v); - CGLM_INLINE void glm_vec3_add(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_adds(vec3 a, float s, vec3 dest); - CGLM_INLINE void glm_vec3_sub(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_subs(vec3 a, float s, vec3 dest); - CGLM_INLINE void glm_vec3_mul(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_scale(vec3 v, float s, vec3 dest); - CGLM_INLINE void glm_vec3_scale_as(vec3 v, float s, vec3 dest); - CGLM_INLINE void glm_vec3_div(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_divs(vec3 a, float s, vec3 dest); - CGLM_INLINE void glm_vec3_addadd(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_subadd(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_muladd(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_muladds(vec3 a, float s, vec3 dest); - CGLM_INLINE void glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_minadd(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_flipsign(vec3 v); - CGLM_INLINE void glm_vec3_flipsign_to(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_negate_to(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_negate(vec3 v); - CGLM_INLINE void glm_vec3_inv(vec3 v); - CGLM_INLINE void glm_vec3_inv_to(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_normalize(vec3 v); - CGLM_INLINE void glm_vec3_normalize_to(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_cross(vec3 a, vec3 b, vec3 d); - CGLM_INLINE void glm_vec3_crossn(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE float glm_vec3_angle(vec3 a, vec3 b); - CGLM_INLINE void glm_vec3_rotate(vec3 v, float angle, vec3 axis); - CGLM_INLINE void glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_proj(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_center(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE float glm_vec3_distance(vec3 a, vec3 b); - CGLM_INLINE float glm_vec3_distance2(vec3 a, vec3 b); - CGLM_INLINE void glm_vec3_maxv(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_minv(vec3 a, vec3 b, vec3 dest); - CGLM_INLINE void glm_vec3_ortho(vec3 v, vec3 dest); - CGLM_INLINE void glm_vec3_clamp(vec3 v, float minVal, float maxVal); - CGLM_INLINE void glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_mix(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_step_uni(float edge, vec3 x, vec3 dest); - CGLM_INLINE void glm_vec3_step(vec3 edge, vec3 x, vec3 dest); - CGLM_INLINE void glm_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest); - CGLM_INLINE void glm_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest); - CGLM_INLINE void glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec3_swizzle(vec3 v, int mask, vec3 dest); + CGLM_DECL void glm_vec3(vec4 v4, vec3 dest); + CGLM_DECL void glm_vec3_copy(vec3 a, vec3 dest); + CGLM_DECL void glm_vec3_zero(vec3 v); + CGLM_DECL void glm_vec3_one(vec3 v); + CGLM_DECL float glm_vec3_dot(vec3 a, vec3 b); + CGLM_DECL float glm_vec3_norm2(vec3 v); + CGLM_DECL float glm_vec3_norm(vec3 v); + CGLM_DECL float glm_vec3_norm_one(vec3 v); + CGLM_DECL float glm_vec3_norm_inf(vec3 v); + CGLM_DECL void glm_vec3_add(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_adds(vec3 a, float s, vec3 dest); + CGLM_DECL void glm_vec3_sub(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_subs(vec3 a, float s, vec3 dest); + CGLM_DECL void glm_vec3_mul(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_scale(vec3 v, float s, vec3 dest); + CGLM_DECL void glm_vec3_scale_as(vec3 v, float s, vec3 dest); + CGLM_DECL void glm_vec3_div(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_divs(vec3 a, float s, vec3 dest); + CGLM_DECL void glm_vec3_addadd(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_subadd(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_muladd(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_muladds(vec3 a, float s, vec3 dest); + CGLM_DECL void glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_minadd(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_flipsign(vec3 v); + CGLM_DECL void glm_vec3_flipsign_to(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_negate_to(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_negate(vec3 v); + CGLM_DECL void glm_vec3_inv(vec3 v); + CGLM_DECL void glm_vec3_inv_to(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_normalize(vec3 v); + CGLM_DECL void glm_vec3_normalize_to(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_cross(vec3 a, vec3 b, vec3 d); + CGLM_DECL void glm_vec3_crossn(vec3 a, vec3 b, vec3 dest); + CGLM_DECL float glm_vec3_angle(vec3 a, vec3 b); + CGLM_DECL void glm_vec3_rotate(vec3 v, float angle, vec3 axis); + CGLM_DECL void glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_proj(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_center(vec3 a, vec3 b, vec3 dest); + CGLM_DECL float glm_vec3_distance(vec3 a, vec3 b); + CGLM_DECL float glm_vec3_distance2(vec3 a, vec3 b); + CGLM_DECL void glm_vec3_maxv(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_minv(vec3 a, vec3 b, vec3 dest); + CGLM_DECL void glm_vec3_ortho(vec3 v, vec3 dest); + CGLM_DECL void glm_vec3_clamp(vec3 v, float minVal, float maxVal); + CGLM_DECL void glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_mix(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_step_uni(float edge, vec3 x, vec3 dest); + CGLM_DECL void glm_vec3_step(vec3 edge, vec3 x, vec3 dest); + CGLM_DECL void glm_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest); + CGLM_DECL void glm_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest); + CGLM_DECL void glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest); + CGLM_DECL void glm_vec3_swizzle(vec3 v, int mask, vec3 dest); Convenient: - CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d); - CGLM_INLINE float glm_dot(vec3 a, vec3 b); - CGLM_INLINE void glm_normalize(vec3 v); - CGLM_INLINE void glm_normalize_to(vec3 v, vec3 dest); + CGLM_DECL void glm_cross(vec3 a, vec3 b, vec3 d); + CGLM_DECL float glm_dot(vec3 a, vec3 b); + CGLM_DECL void glm_normalize(vec3 v); + CGLM_DECL void glm_normalize_to(vec3 v, vec3 dest); DEPRECATED: glm_vec3_dup @@ -127,13 +127,16 @@ * @param[in] v4 vector4 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3(vec4 v4, vec3 dest) { +glm_vec3(vec4 v4, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v4[0]; dest[1] = v4[1]; dest[2] = v4[2]; } +#endif /*! * @brief copy all members of [a] to [dest] @@ -141,35 +144,44 @@ glm_vec3(vec4 v4, vec3 dest) { * @param[in] a source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_copy(vec3 a, vec3 dest) { +glm_vec3_copy(vec3 a, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; } +#endif /*! * @brief make vector zero * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_zero(vec3 v) { +glm_vec3_zero(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = v[2] = 0.0f; } +#endif /*! * @brief make vector one * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_one(vec3 v) { +glm_vec3_one(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = v[1] = v[2] = 1.0f; } +#endif /*! * @brief vec3 dot product @@ -179,11 +191,14 @@ glm_vec3_one(vec3 v) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_dot(vec3 a, vec3 b) { +glm_vec3_dot(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -196,11 +211,14 @@ glm_vec3_dot(vec3 a, vec3 b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_norm2(vec3 v) { +glm_vec3_norm2(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_dot(v, v); } +#endif /*! * @brief euclidean norm (magnitude), also called L2 norm @@ -210,11 +228,14 @@ glm_vec3_norm2(vec3 v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_norm(vec3 v) { +glm_vec3_norm(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return sqrtf(glm_vec3_norm2(v)); } +#endif /*! * @brief L1 norm of vec3 @@ -230,13 +251,16 @@ glm_vec3_norm(vec3 v) { * * @return L1 norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_norm_one(vec3 v) { +glm_vec3_norm_one(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 t; glm_vec3_abs(v, t); return glm_vec3_hadd(t); } +#endif /*! * @brief infinity norm of vec3 @@ -251,13 +275,16 @@ glm_vec3_norm_one(vec3 v) { * * @return infinity norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_norm_inf(vec3 v) { +glm_vec3_norm_inf(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 t; glm_vec3_abs(v, t); return glm_vec3_max(t); } +#endif /*! * @brief add a vector to b vector store result in dest @@ -266,13 +293,16 @@ glm_vec3_norm_inf(vec3 v) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_add(vec3 a, vec3 b, vec3 dest) { +glm_vec3_add(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] + b[0]; dest[1] = a[1] + b[1]; dest[2] = a[2] + b[2]; } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + s) @@ -281,13 +311,16 @@ glm_vec3_add(vec3 a, vec3 b, vec3 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_adds(vec3 v, float s, vec3 dest) { +glm_vec3_adds(vec3 v, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] + s; dest[1] = v[1] + s; dest[2] = v[2] + s; } +#endif /*! * @brief subtract b vector from a vector store result in dest @@ -296,13 +329,16 @@ glm_vec3_adds(vec3 v, float s, vec3 dest) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_sub(vec3 a, vec3 b, vec3 dest) { +glm_vec3_sub(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] - b[0]; dest[1] = a[1] - b[1]; dest[2] = a[2] - b[2]; } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - s) @@ -311,13 +347,16 @@ glm_vec3_sub(vec3 a, vec3 b, vec3 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_subs(vec3 v, float s, vec3 dest) { +glm_vec3_subs(vec3 v, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] - s; dest[1] = v[1] - s; dest[2] = v[2] - s; } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -326,13 +365,16 @@ glm_vec3_subs(vec3 v, float s, vec3 dest) { * @param b vector2 * @param dest v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_mul(vec3 a, vec3 b, vec3 dest) { +glm_vec3_mul(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] * b[0]; dest[1] = a[1] * b[1]; dest[2] = a[2] * b[2]; } +#endif /*! * @brief multiply/scale vec3 vector with scalar: result = v * s @@ -341,13 +383,16 @@ glm_vec3_mul(vec3 a, vec3 b, vec3 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_scale(vec3 v, float s, vec3 dest) { +glm_vec3_scale(vec3 v, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] * s; dest[1] = v[1] * s; dest[2] = v[2] * s; } +#endif /*! * @brief make vec3 vector scale as specified: result = unit(v) * s @@ -356,9 +401,11 @@ glm_vec3_scale(vec3 v, float s, vec3 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_scale_as(vec3 v, float s, vec3 dest) { +glm_vec3_scale_as(vec3 v, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec3_norm(v); @@ -369,6 +416,7 @@ glm_vec3_scale_as(vec3 v, float s, vec3 dest) { glm_vec3_scale(v, s / norm, dest); } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -377,13 +425,16 @@ glm_vec3_scale_as(vec3 v, float s, vec3 dest) { * @param[in] b vector 2 * @param[out] dest result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_div(vec3 a, vec3 b, vec3 dest) { +glm_vec3_div(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0] / b[0]; dest[1] = a[1] / b[1]; dest[2] = a[2] / b[2]; } +#endif /*! * @brief div vector with scalar: d = v / s @@ -392,13 +443,16 @@ glm_vec3_div(vec3 a, vec3 b, vec3 dest) { * @param[in] s scalar * @param[out] dest result = (a[0]/s, a[1]/s, a[2]/s) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_divs(vec3 v, float s, vec3 dest) { +glm_vec3_divs(vec3 v, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0] / s; dest[1] = v[1] / s; dest[2] = v[2] / s; } +#endif /*! * @brief add two vectors and add result to sum @@ -409,13 +463,16 @@ glm_vec3_divs(vec3 v, float s, vec3 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a + b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] + b[0]; dest[1] += a[1] + b[1]; dest[2] += a[2] + b[2]; } +#endif /*! * @brief sub two vectors and add result to dest @@ -426,13 +483,16 @@ glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a + b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] - b[0]; dest[1] += a[1] - b[1]; dest[2] += a[2] - b[2]; } +#endif /*! * @brief mul two vectors and add result to dest @@ -443,13 +503,16 @@ glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] * b[0]; dest[1] += a[1] * b[1]; dest[2] += a[2] * b[2]; } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -460,13 +523,16 @@ glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) { * @param[in] s scalar * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_muladds(vec3 a, float s, vec3 dest) { +glm_vec3_muladds(vec3 a, float s, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += a[0] * s; dest[1] += a[1] * s; dest[2] += a[2] * s; } +#endif /*! * @brief add max of two vector to result/dest @@ -477,13 +543,16 @@ glm_vec3_muladds(vec3 a, float s, vec3 dest) { * @param[in] b vector 2 * @param[out] dest dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += glm_max(a[0], b[0]); dest[1] += glm_max(a[1], b[1]); dest[2] += glm_max(a[2], b[2]); } +#endif /*! * @brief add min of two vector to result/dest @@ -494,13 +563,16 @@ glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector 2 * @param[out] dest dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] += glm_min(a[0], b[0]); dest[1] += glm_min(a[1], b[1]); dest[2] += glm_min(a[2], b[2]); } +#endif /*! * @brief negate vector components and store result in dest @@ -508,33 +580,41 @@ glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) { * @param[in] v vector * @param[out] dest result vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_negate_to(vec3 v, vec3 dest) { +glm_vec3_negate_to(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = -v[0]; dest[1] = -v[1]; dest[2] = -v[2]; } +#endif /*! * @brief negate vector components * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_negate(vec3 v) { +glm_vec3_negate(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_negate_to(v, v); } +#endif /*! * @brief normalize vec3 and store result in same vec * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_normalize(vec3 v) { +glm_vec3_normalize(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec3_norm(v); @@ -546,6 +626,7 @@ glm_vec3_normalize(vec3 v) { glm_vec3_scale(v, 1.0f / norm, v); } +#endif /*! * @brief normalize vec3 to dest @@ -553,9 +634,11 @@ glm_vec3_normalize(vec3 v) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_normalize_to(vec3 v, vec3 dest) { +glm_vec3_normalize_to(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec3_norm(v); @@ -567,6 +650,7 @@ glm_vec3_normalize_to(vec3 v, vec3 dest) { glm_vec3_scale(v, 1.0f / norm, dest); } +#endif /*! * @brief cross product of two vector (RH) @@ -575,14 +659,17 @@ glm_vec3_normalize_to(vec3 v, vec3 dest) { * @param[in] b vector 2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_cross(vec3 a, vec3 b, vec3 dest) { +glm_vec3_cross(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ /* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */ dest[0] = a[1] * b[2] - a[2] * b[1]; dest[1] = a[2] * b[0] - a[0] * b[2]; dest[2] = a[0] * b[1] - a[1] * b[0]; } +#endif /*! * @brief cross product of two vector (RH) and normalize the result @@ -591,12 +678,15 @@ glm_vec3_cross(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector 2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) { +glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_cross(a, b, dest); glm_vec3_normalize(dest); } +#endif /*! * @brief angle betwen two vector @@ -606,9 +696,11 @@ glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) { * * @return angle as radians */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_angle(vec3 a, vec3 b) { +glm_vec3_angle(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm, dot; /* maybe compiler generate approximation instruction (rcp) */ @@ -622,6 +714,7 @@ glm_vec3_angle(vec3 a, vec3 b) { return acosf(dot); } +#endif /*! * @brief rotate vec3 around axis by angle using Rodrigues' rotation formula @@ -630,9 +723,11 @@ glm_vec3_angle(vec3 a, vec3 b) { * @param[in] axis axis vector (must be unit vector) * @param[in] angle angle by radians */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_rotate(vec3 v, float angle, vec3 axis) { +glm_vec3_rotate(vec3 v, float angle, vec3 axis) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 v1, v2, k; float c, s; @@ -654,6 +749,7 @@ glm_vec3_rotate(vec3 v, float angle, vec3 axis) { glm_vec3_scale(k, glm_vec3_dot(k, v) * (1.0f - c), v2); glm_vec3_add(v1, v2, v); } +#endif /*! * @brief apply rotation matrix to vector @@ -668,9 +764,11 @@ glm_vec3_rotate(vec3 v, float angle, vec3 axis) { * @param[in] v vector * @param[out] dest rotated vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { +glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 x, y, z, res; glm_vec4_normalize_to(m[0], x); @@ -683,6 +781,7 @@ glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { glm_vec3(res, dest); } +#endif /*! * @brief apply rotation matrix to vector @@ -691,9 +790,11 @@ glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { * @param[in] v vector * @param[out] dest rotated vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { +glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 res, x, y, z; glm_vec4(m[0], 0.0f, x); @@ -710,6 +811,7 @@ glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { glm_vec3(res, dest); } +#endif /*! * @brief project a vector onto b vector @@ -718,13 +820,16 @@ glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { * @param[in] b vector2 * @param[out] dest projected vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_proj(vec3 a, vec3 b, vec3 dest) { +glm_vec3_proj(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_scale(b, glm_vec3_dot(a, b) / glm_vec3_norm2(b), dest); } +#endif /** * @brief find center point of two vector @@ -733,12 +838,15 @@ glm_vec3_proj(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector2 * @param[out] dest center point */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_center(vec3 a, vec3 b, vec3 dest) { +glm_vec3_center(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_add(a, b, dest); glm_vec3_scale(dest, 0.5f, dest); } +#endif /** * @brief squared distance between two vectors @@ -747,13 +855,16 @@ glm_vec3_center(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector2 * @return returns squared distance (distance * distance) */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_distance2(vec3 a, vec3 b) { +glm_vec3_distance2(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_pow2(a[0] - b[0]) + glm_pow2(a[1] - b[1]) + glm_pow2(a[2] - b[2]); } +#endif /** * @brief distance between two vectors @@ -762,11 +873,14 @@ glm_vec3_distance2(vec3 a, vec3 b) { * @param[in] b vector2 * @return returns distance */ -CGLM_INLINE +CGLM_DECL float -glm_vec3_distance(vec3 a, vec3 b) { +glm_vec3_distance(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return sqrtf(glm_vec3_distance2(a, b)); } +#endif /*! * @brief max values of vectors @@ -775,13 +889,16 @@ glm_vec3_distance(vec3 a, vec3 b) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) { +glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_max(a[0], b[0]); dest[1] = glm_max(a[1], b[1]); dest[2] = glm_max(a[2], b[2]); } +#endif /*! * @brief min values of vectors @@ -790,13 +907,16 @@ glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { +glm_vec3_minv(vec3 a, vec3 b, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_min(a[0], b[0]); dest[1] = glm_min(a[1], b[1]); dest[2] = glm_min(a[2], b[2]); } +#endif /*! * @brief possible orthogonal/perpendicular vector @@ -804,13 +924,16 @@ glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { * @param[in] v vector * @param[out] dest orthogonal/perpendicular vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_ortho(vec3 v, vec3 dest) { +glm_vec3_ortho(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[1] - v[2]; dest[1] = v[2] - v[0]; dest[2] = v[0] - v[1]; } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -819,13 +942,16 @@ glm_vec3_ortho(vec3 v, vec3 dest) { * @param[in] minVal minimum value * @param[in] maxVal maximum value */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_clamp(vec3 v, float minVal, float maxVal) { +glm_vec3_clamp(vec3 v, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ v[0] = glm_clamp(v[0], minVal, maxVal); v[1] = glm_clamp(v[1], minVal, maxVal); v[2] = glm_clamp(v[2], minVal, maxVal); } +#endif /*! * @brief linear interpolation between two vectors @@ -837,9 +963,11 @@ glm_vec3_clamp(vec3 v, float minVal, float maxVal) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 s, v; /* from + s * (to - from) */ @@ -848,6 +976,7 @@ glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { glm_vec3_mul(s, v, v); glm_vec3_add(from, v, dest); } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -859,11 +988,14 @@ glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_lerp(from, to, glm_clamp_zo(t), dest); } +#endif /*! * @brief linear interpolation between two vectors @@ -875,11 +1007,14 @@ glm_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_mix(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_mix(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_lerp(from, to, t, dest); } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -891,11 +1026,14 @@ glm_vec3_mix(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_lerpc(from, to, t, dest); } +#endif /*! * @brief threshold function (unidimensional) @@ -904,13 +1042,16 @@ glm_vec3_mixc(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_step_uni(float edge, vec3 x, vec3 dest) { +glm_vec3_step_uni(float edge, vec3 x, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_step(edge, x[0]); dest[1] = glm_step(edge, x[1]); dest[2] = glm_step(edge, x[2]); } +#endif /*! * @brief threshold function @@ -919,13 +1060,16 @@ glm_vec3_step_uni(float edge, vec3 x, vec3 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_step(vec3 edge, vec3 x, vec3 dest) { +glm_vec3_step(vec3 edge, vec3 x, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_step(edge[0], x[0]); dest[1] = glm_step(edge[1], x[1]); dest[2] = glm_step(edge[2], x[2]); } +#endif /*! * @brief threshold function with a smooth transition (unidimensional) @@ -935,13 +1079,16 @@ glm_vec3_step(vec3 edge, vec3 x, vec3 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest) { +glm_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_smoothstep(edge0, edge1, x[0]); dest[1] = glm_smoothstep(edge0, edge1, x[1]); dest[2] = glm_smoothstep(edge0, edge1, x[2]); } +#endif /*! * @brief threshold function with a smooth transition @@ -951,13 +1098,16 @@ glm_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest) { +glm_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_smoothstep(edge0[0], edge1[0], x[0]); dest[1] = glm_smoothstep(edge0[1], edge1[1], x[1]); dest[2] = glm_smoothstep(edge0[2], edge1[2], x[2]); } +#endif /*! * @brief smooth Hermite interpolation between two vectors @@ -969,9 +1119,11 @@ glm_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 s, v; /* from + s * (to - from) */ @@ -980,6 +1132,7 @@ glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest) { glm_vec3_mul(s, v, v); glm_vec3_add(from, v, dest); } +#endif /*! * @brief smooth Hermite interpolation between two vectors (clamped) @@ -991,11 +1144,14 @@ glm_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_smoothinterp(from, to, glm_clamp_zo(t), dest); } +#endif /*! * @brief swizzle vector components @@ -1006,9 +1162,11 @@ glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest) { * @param[in] mask mask * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec3_swizzle(vec3 v, int mask, vec3 dest) { +glm_vec3_swizzle(vec3 v, int mask, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec3 t; t[0] = v[(mask & (3 << 0))]; @@ -1017,6 +1175,7 @@ glm_vec3_swizzle(vec3 v, int mask, vec3 dest) { glm_vec3_copy(t, dest); } +#endif /*! * @brief vec3 cross product @@ -1027,11 +1186,14 @@ glm_vec3_swizzle(vec3 v, int mask, vec3 dest) { * @param[in] b source 2 * @param[out] d destination */ -CGLM_INLINE +CGLM_DECL void -glm_cross(vec3 a, vec3 b, vec3 d) { +glm_cross(vec3 a, vec3 b, vec3 d) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_cross(a, b, d); } +#endif /*! * @brief vec3 dot product @@ -1043,11 +1205,14 @@ glm_cross(vec3 a, vec3 b, vec3 d) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glm_dot(vec3 a, vec3 b) { +glm_dot(vec3 a, vec3 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec3_dot(a, b); } +#endif /*! * @brief normalize vec3 and store result in same vec @@ -1056,11 +1221,14 @@ glm_dot(vec3 a, vec3 b) { * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_normalize(vec3 v) { +glm_normalize(vec3 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_normalize(v); } +#endif /*! * @brief normalize vec3 to dest @@ -1070,10 +1238,13 @@ glm_normalize(vec3 v) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_normalize_to(vec3 v, vec3 dest) { +glm_normalize_to(vec3 v, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec3_normalize_to(v, dest); } +#endif #endif /* cglm_vec3_h */ diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index 6baa70f9a..e9947f158 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -11,23 +11,23 @@ /* Functions: - CGLM_INLINE void glm_vec4_broadcast(float val, vec4 d); - CGLM_INLINE void glm_vec4_fill(vec4 v, float val); - CGLM_INLINE bool glm_vec4_eq(vec4 v, float val); - CGLM_INLINE bool glm_vec4_eq_eps(vec4 v, float val); - CGLM_INLINE bool glm_vec4_eq_all(vec4 v); - CGLM_INLINE bool glm_vec4_eqv(vec4 a, vec4 b); - CGLM_INLINE bool glm_vec4_eqv_eps(vec4 a, vec4 b); - CGLM_INLINE float glm_vec4_max(vec4 v); - CGLM_INLINE float glm_vec4_min(vec4 v); - CGLM_INLINE bool glm_vec4_isnan(vec4 v); - CGLM_INLINE bool glm_vec4_isinf(vec4 v); - CGLM_INLINE bool glm_vec4_isvalid(vec4 v); - CGLM_INLINE void glm_vec4_sign(vec4 v, vec4 dest); - CGLM_INLINE void glm_vec4_abs(vec4 v, vec4 dest); - CGLM_INLINE void glm_vec4_fract(vec4 v, vec4 dest); - CGLM_INLINE float glm_vec4_hadd(vec4 v); - CGLM_INLINE void glm_vec4_sqrt(vec4 v, vec4 dest); + CGLM_DECL void glm_vec4_broadcast(float val, vec4 d); + CGLM_DECL void glm_vec4_fill(vec4 v, float val); + CGLM_DECL bool glm_vec4_eq(vec4 v, float val); + CGLM_DECL bool glm_vec4_eq_eps(vec4 v, float val); + CGLM_DECL bool glm_vec4_eq_all(vec4 v); + CGLM_DECL bool glm_vec4_eqv(vec4 a, vec4 b); + CGLM_DECL bool glm_vec4_eqv_eps(vec4 a, vec4 b); + CGLM_DECL float glm_vec4_max(vec4 v); + CGLM_DECL float glm_vec4_min(vec4 v); + CGLM_DECL bool glm_vec4_isnan(vec4 v); + CGLM_DECL bool glm_vec4_isinf(vec4 v); + CGLM_DECL bool glm_vec4_isvalid(vec4 v); + CGLM_DECL void glm_vec4_sign(vec4 v, vec4 dest); + CGLM_DECL void glm_vec4_abs(vec4 v, vec4 dest); + CGLM_DECL void glm_vec4_fract(vec4 v, vec4 dest); + CGLM_DECL float glm_vec4_hadd(vec4 v); + CGLM_DECL void glm_vec4_sqrt(vec4 v, vec4 dest); */ #ifndef cglm_vec4_ext_h @@ -42,15 +42,18 @@ * @param val value * @param d dest */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_broadcast(float val, vec4 d) { +glm_vec4_broadcast(float val, vec4 d) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(d, _mm_set1_ps(val)); #else d[0] = d[1] = d[2] = d[3] = val; #endif } +#endif /*! * @brief fill a vector with specified value @@ -58,15 +61,18 @@ glm_vec4_broadcast(float val, vec4 d) { * @param v dest * @param val value */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_fill(vec4 v, float val) { +glm_vec4_fill(vec4 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(v, _mm_set1_ps(val)); #else v[0] = v[1] = v[2] = v[3] = val; #endif } +#endif /*! * @brief check if vector is equal to value (without epsilon) @@ -74,14 +80,17 @@ glm_vec4_fill(vec4 v, float val) { * @param v vector * @param val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_eq(vec4 v, float val) { +glm_vec4_eq(vec4 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == val && v[0] == v[1] && v[0] == v[2] && v[0] == v[3]; } +#endif /*! * @brief check if vector is equal to value (with epsilon) @@ -89,27 +98,33 @@ glm_vec4_eq(vec4 v, float val) { * @param v vector * @param val value */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_eq_eps(vec4 v, float val) { +glm_vec4_eq_eps(vec4 v, float val) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON && fabsf(v[3] - val) <= FLT_EPSILON; } +#endif /*! * @brief check if vectors members are equal (without epsilon) * * @param v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_eq_all(vec4 v) { +glm_vec4_eq_all(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return v[0] == v[1] && v[0] == v[2] && v[0] == v[3]; } +#endif /*! * @brief check if vector is equal to another (without epsilon) @@ -117,14 +132,17 @@ glm_vec4_eq_all(vec4 v) { * @param a vector * @param b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_eqv(vec4 a, vec4 b) { +glm_vec4_eqv(vec4 a, vec4 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3]; } +#endif /*! * @brief check if vector is equal to another (with epsilon) @@ -132,23 +150,28 @@ glm_vec4_eqv(vec4 a, vec4 b) { * @param a vector * @param b vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_eqv_eps(vec4 a, vec4 b) { +glm_vec4_eqv_eps(vec4 a, vec4 b) CGLM_ENDD +#ifndef CGLM_LIB +{ return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON && fabsf(a[3] - b[3]) <= FLT_EPSILON; } +#endif /*! * @brief max value of vector * * @param v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_max(vec4 v) { +glm_vec4_max(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float max; max = glm_vec3_max(v); @@ -157,15 +180,18 @@ glm_vec4_max(vec4 v) { return max; } +#endif /*! * @brief min value of vector * * @param v vector */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_min(vec4 v) { +glm_vec4_min(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ float min; min = glm_vec3_min(v); @@ -174,6 +200,7 @@ glm_vec4_min(vec4 v) { return min; } +#endif /*! * @brief check if one of items is NaN (not a number) @@ -181,11 +208,14 @@ glm_vec4_min(vec4 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_isnan(vec4 v) { +glm_vec4_isnan(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isnan(v[0]) || isnan(v[1]) || isnan(v[2]) || isnan(v[3]); } +#endif /*! * @brief check if one of items is INFINITY @@ -193,11 +223,14 @@ glm_vec4_isnan(vec4 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_isinf(vec4 v) { +glm_vec4_isinf(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return isinf(v[0]) || isinf(v[1]) || isinf(v[2]) || isinf(v[3]); } +#endif /*! * @brief check if all items are valid number @@ -205,11 +238,14 @@ glm_vec4_isinf(vec4 v) { * * @param[in] v vector */ -CGLM_INLINE +CGLM_DECL bool -glm_vec4_isvalid(vec4 v) { +glm_vec4_isvalid(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return !glm_vec4_isnan(v) && !glm_vec4_isinf(v); } +#endif /*! * @brief get sign of 32 bit float as +1, -1, 0 @@ -218,9 +254,11 @@ glm_vec4_isvalid(vec4 v) { * * @param v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_sign(vec4 v, vec4 dest) { +glm_vec4_sign(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 x0, x1, x2, x3, x4; @@ -239,6 +277,7 @@ glm_vec4_sign(vec4 v, vec4 dest) { dest[3] = glm_signf(v[3]); #endif } +#endif /*! * @brief absolute value of each vector item @@ -246,9 +285,11 @@ glm_vec4_sign(vec4 v, vec4 dest) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_abs(vec4 v, vec4 dest) { +glm_vec4_abs(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, glmm_abs(glmm_load(v))); #elif defined(CGLM_NEON_FP) @@ -260,6 +301,7 @@ glm_vec4_abs(vec4 v, vec4 dest) { dest[3] = fabsf(v[3]); #endif } +#endif /*! * @brief fractional part of each vector item @@ -267,14 +309,17 @@ glm_vec4_abs(vec4 v, vec4 dest) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_fract(vec4 v, vec4 dest) { +glm_vec4_fract(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = fminf(v[0] - floorf(v[0]), 0x1.fffffep-1f); dest[1] = fminf(v[1] - floorf(v[1]), 0x1.fffffep-1f); dest[2] = fminf(v[2] - floorf(v[2]), 0x1.fffffep-1f); dest[3] = fminf(v[3] - floorf(v[3]), 0x1.fffffep-1f); } +#endif /*! * @brief vector reduction by summation @@ -283,15 +328,18 @@ glm_vec4_fract(vec4 v, vec4 dest) { * @param[in] v vector * @return sum of all vector's elements */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_hadd(vec4 v) { +glm_vec4_hadd(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) return glmm_hadd(glmm_load(v)); #else return v[0] + v[1] + v[2] + v[3]; #endif } +#endif /*! * @brief square root of each vector item @@ -299,9 +347,11 @@ glm_vec4_hadd(vec4 v) { * @param[in] v vector * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_sqrt(vec4 v, vec4 dest) { +glm_vec4_sqrt(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sqrt_ps(glmm_load(v))); #else @@ -311,5 +361,6 @@ glm_vec4_sqrt(vec4 v, vec4 dest) { dest[3] = sqrtf(v[3]); #endif } +#endif #endif /* cglm_vec4_ext_h */ diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index 34c1057cd..eebed87ec 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -15,49 +15,49 @@ GLM_VEC4_ZERO Functions: - CGLM_INLINE void glm_vec4(vec3 v3, float last, vec4 dest); - CGLM_INLINE void glm_vec4_copy3(vec4 a, vec3 dest); - CGLM_INLINE void glm_vec4_copy(vec4 v, vec4 dest); - CGLM_INLINE void glm_vec4_ucopy(vec4 v, vec4 dest); - CGLM_INLINE float glm_vec4_dot(vec4 a, vec4 b); - CGLM_INLINE float glm_vec4_norm2(vec4 v); - CGLM_INLINE float glm_vec4_norm(vec4 v); - CGLM_INLINE float glm_vec4_norm_one(vec4 v); - CGLM_INLINE float glm_vec4_norm_inf(vec4 v); - CGLM_INLINE void glm_vec4_add(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_adds(vec4 v, float s, vec4 dest); - CGLM_INLINE void glm_vec4_sub(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_subs(vec4 v, float s, vec4 dest); - CGLM_INLINE void glm_vec4_mul(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_scale(vec4 v, float s, vec4 dest); - CGLM_INLINE void glm_vec4_scale_as(vec4 v, float s, vec4 dest); - CGLM_INLINE void glm_vec4_div(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_divs(vec4 v, float s, vec4 dest); - CGLM_INLINE void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_subadd(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_muladd(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_muladds(vec4 a, float s, vec4 dest); - CGLM_INLINE void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_negate(vec4 v); - CGLM_INLINE void glm_vec4_inv(vec4 v); - CGLM_INLINE void glm_vec4_inv_to(vec4 v, vec4 dest); - CGLM_INLINE void glm_vec4_normalize(vec4 v); - CGLM_INLINE void glm_vec4_normalize_to(vec4 vec, vec4 dest); - CGLM_INLINE float glm_vec4_distance(vec4 a, vec4 b); - CGLM_INLINE float glm_vec4_distance2(vec4 a, vec4 b); - CGLM_INLINE void glm_vec4_maxv(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_minv(vec4 a, vec4 b, vec4 dest); - CGLM_INLINE void glm_vec4_clamp(vec4 v, float minVal, float maxVal); - CGLM_INLINE void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); - CGLM_INLINE void glm_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest); - CGLM_INLINE void glm_vec4_step_uni(float edge, vec4 x, vec4 dest); - CGLM_INLINE void glm_vec4_step(vec4 edge, vec4 x, vec4 dest); - CGLM_INLINE void glm_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest); - CGLM_INLINE void glm_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest); - CGLM_INLINE void glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest); - CGLM_INLINE void glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest); - CGLM_INLINE void glm_vec4_swizzle(vec4 v, int mask, vec4 dest); + CGLM_DECL void glm_vec4(vec3 v3, float last, vec4 dest); + CGLM_DECL void glm_vec4_copy3(vec4 a, vec3 dest); + CGLM_DECL void glm_vec4_copy(vec4 v, vec4 dest); + CGLM_DECL void glm_vec4_ucopy(vec4 v, vec4 dest); + CGLM_DECL float glm_vec4_dot(vec4 a, vec4 b); + CGLM_DECL float glm_vec4_norm2(vec4 v); + CGLM_DECL float glm_vec4_norm(vec4 v); + CGLM_DECL float glm_vec4_norm_one(vec4 v); + CGLM_DECL float glm_vec4_norm_inf(vec4 v); + CGLM_DECL void glm_vec4_add(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_adds(vec4 v, float s, vec4 dest); + CGLM_DECL void glm_vec4_sub(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_subs(vec4 v, float s, vec4 dest); + CGLM_DECL void glm_vec4_mul(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_scale(vec4 v, float s, vec4 dest); + CGLM_DECL void glm_vec4_scale_as(vec4 v, float s, vec4 dest); + CGLM_DECL void glm_vec4_div(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_divs(vec4 v, float s, vec4 dest); + CGLM_DECL void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_subadd(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_muladd(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_muladds(vec4 a, float s, vec4 dest); + CGLM_DECL void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_negate(vec4 v); + CGLM_DECL void glm_vec4_inv(vec4 v); + CGLM_DECL void glm_vec4_inv_to(vec4 v, vec4 dest); + CGLM_DECL void glm_vec4_normalize(vec4 v); + CGLM_DECL void glm_vec4_normalize_to(vec4 vec, vec4 dest); + CGLM_DECL float glm_vec4_distance(vec4 a, vec4 b); + CGLM_DECL float glm_vec4_distance2(vec4 a, vec4 b); + CGLM_DECL void glm_vec4_maxv(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_minv(vec4 a, vec4 b, vec4 dest); + CGLM_DECL void glm_vec4_clamp(vec4 v, float minVal, float maxVal); + CGLM_DECL void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); + CGLM_DECL void glm_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest); + CGLM_DECL void glm_vec4_step_uni(float edge, vec4 x, vec4 dest); + CGLM_DECL void glm_vec4_step(vec4 edge, vec4 x, vec4 dest); + CGLM_DECL void glm_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest); + CGLM_DECL void glm_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest); + CGLM_DECL void glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest); + CGLM_DECL void glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest); + CGLM_DECL void glm_vec4_swizzle(vec4 v, int mask, vec4 dest); DEPRECATED: glm_vec4_dup @@ -105,14 +105,17 @@ * @param[in] last last item * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4(vec3 v3, float last, vec4 dest) { +glm_vec4(vec3 v3, float last, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v3[0]; dest[1] = v3[1]; dest[2] = v3[2]; dest[3] = last; } +#endif /*! * @brief copy first 3 members of [a] to [dest] @@ -120,13 +123,16 @@ glm_vec4(vec3 v3, float last, vec4 dest) { * @param[in] a source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_copy3(vec4 a, vec3 dest) { +glm_vec4_copy3(vec4 a, vec3 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; } +#endif /*! * @brief copy all members of [a] to [dest] @@ -134,9 +140,11 @@ glm_vec4_copy3(vec4 a, vec3 dest) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_copy(vec4 v, vec4 dest) { +glm_vec4_copy(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, glmm_load(v)); #elif defined(CGLM_NEON_FP) @@ -148,6 +156,7 @@ glm_vec4_copy(vec4 v, vec4 dest) { dest[3] = v[3]; #endif } +#endif /*! * @brief copy all members of [a] to [dest] @@ -157,23 +166,28 @@ glm_vec4_copy(vec4 v, vec4 dest) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_ucopy(vec4 v, vec4 dest) { +glm_vec4_ucopy(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = v[0]; dest[1] = v[1]; dest[2] = v[2]; dest[3] = v[3]; } +#endif /*! * @brief make vector zero * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_zero(vec4 v) { +glm_vec4_zero(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(v, _mm_setzero_ps()); #elif defined(CGLM_NEON_FP) @@ -185,15 +199,18 @@ glm_vec4_zero(vec4 v) { v[3] = 0.0f; #endif } +#endif /*! * @brief make vector one * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_one(vec4 v) { +glm_vec4_one(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(v, _mm_set1_ps(1.0f)); #elif defined(CGLM_NEON_FP) @@ -205,6 +222,7 @@ glm_vec4_one(vec4 v) { v[3] = 1.0f; #endif } +#endif /*! * @brief vec4 dot product @@ -214,15 +232,18 @@ glm_vec4_one(vec4 v) { * * @return dot product */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_dot(vec4 a, vec4 b) { +glm_vec4_dot(vec4 a, vec4 b) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined(CGLM_SIMD) return glmm_dot(glmm_load(a), glmm_load(b)); #else return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; #endif } +#endif /*! * @brief norm * norm (magnitude) of vec @@ -235,11 +256,14 @@ glm_vec4_dot(vec4 a, vec4 b) { * * @return norm * norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_norm2(vec4 v) { +glm_vec4_norm2(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ return glm_vec4_dot(v, v); } +#endif /*! * @brief euclidean norm (magnitude), also called L2 norm @@ -249,15 +273,18 @@ glm_vec4_norm2(vec4 v) { * * @return norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_norm(vec4 v) { +glm_vec4_norm(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined(CGLM_SIMD) return glmm_norm(glmm_load(v)); #else return sqrtf(glm_vec4_dot(v, v)); #endif } +#endif /*! * @brief L1 norm of vec4 @@ -273,9 +300,11 @@ glm_vec4_norm(vec4 v) { * * @return L1 norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_norm_one(vec4 v) { +glm_vec4_norm_one(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined(CGLM_SIMD) return glmm_norm_one(glmm_load(v)); #else @@ -284,6 +313,7 @@ glm_vec4_norm_one(vec4 v) { return glm_vec4_hadd(t); #endif } +#endif /*! * @brief infinity norm of vec4 @@ -298,9 +328,11 @@ glm_vec4_norm_one(vec4 v) { * * @return infinity norm */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_norm_inf(vec4 v) { +glm_vec4_norm_inf(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined(CGLM_SIMD) return glmm_norm_inf(glmm_load(v)); #else @@ -309,6 +341,7 @@ glm_vec4_norm_inf(vec4 v) { return glm_vec4_max(t); #endif } +#endif /*! * @brief add b vector to a vector store result in dest @@ -317,9 +350,11 @@ glm_vec4_norm_inf(vec4 v) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_add(vec4 a, vec4 b, vec4 dest) { +glm_vec4_add(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -331,6 +366,7 @@ glm_vec4_add(vec4 a, vec4 b, vec4 dest) { dest[3] = a[3] + b[3]; #endif } +#endif /*! * @brief add scalar to v vector store result in dest (d = v + vec(s)) @@ -339,9 +375,11 @@ glm_vec4_add(vec4 a, vec4 b, vec4 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_adds(vec4 v, float s, vec4 dest) { +glm_vec4_adds(vec4 v, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -353,6 +391,7 @@ glm_vec4_adds(vec4 v, float s, vec4 dest) { dest[3] = v[3] + s; #endif } +#endif /*! * @brief subtract b vector from a vector store result in dest (d = a - b) @@ -361,9 +400,11 @@ glm_vec4_adds(vec4 v, float s, vec4 dest) { * @param[in] b vector2 * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { +glm_vec4_sub(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -375,6 +416,7 @@ glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { dest[3] = a[3] - b[3]; #endif } +#endif /*! * @brief subtract scalar from v vector store result in dest (d = v - vec(s)) @@ -383,9 +425,11 @@ glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_subs(vec4 v, float s, vec4 dest) { +glm_vec4_subs(vec4 v, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -397,6 +441,7 @@ glm_vec4_subs(vec4 v, float s, vec4 dest) { dest[3] = v[3] - s; #endif } +#endif /*! * @brief multiply two vector (component-wise multiplication) @@ -405,9 +450,11 @@ glm_vec4_subs(vec4 v, float s, vec4 dest) { * @param b vector2 * @param dest dest = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { +glm_vec4_mul(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -419,6 +466,7 @@ glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { dest[3] = a[3] * b[3]; #endif } +#endif /*! * @brief multiply/scale vec4 vector with scalar: result = v * s @@ -427,9 +475,11 @@ glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_scale(vec4 v, float s, vec4 dest) { +glm_vec4_scale(vec4 v, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -441,6 +491,7 @@ glm_vec4_scale(vec4 v, float s, vec4 dest) { dest[3] = v[3] * s; #endif } +#endif /*! * @brief make vec4 vector scale as specified: result = unit(v) * s @@ -449,9 +500,11 @@ glm_vec4_scale(vec4 v, float s, vec4 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_scale_as(vec4 v, float s, vec4 dest) { +glm_vec4_scale_as(vec4 v, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float norm; norm = glm_vec4_norm(v); @@ -462,6 +515,7 @@ glm_vec4_scale_as(vec4 v, float s, vec4 dest) { glm_vec4_scale(v, s / norm, dest); } +#endif /*! * @brief div vector with another component-wise division: d = a / b @@ -470,9 +524,11 @@ glm_vec4_scale_as(vec4 v, float s, vec4 dest) { * @param[in] b vector 2 * @param[out] dest result = (a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_div(vec4 a, vec4 b, vec4 dest) { +glm_vec4_div(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(a), glmm_load(b))); #else @@ -482,6 +538,7 @@ glm_vec4_div(vec4 a, vec4 b, vec4 dest) { dest[3] = a[3] / b[3]; #endif } +#endif /*! * @brief div vec4 vector with scalar: d = v / s @@ -490,15 +547,18 @@ glm_vec4_div(vec4 a, vec4 b, vec4 dest) { * @param[in] s scalar * @param[out] dest destination vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_divs(vec4 v, float s, vec4 dest) { +glm_vec4_divs(vec4 v, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s))); #else glm_vec4_scale(v, 1.0f / s, dest); #endif } +#endif /*! * @brief add two vectors and add result to sum @@ -509,9 +569,11 @@ glm_vec4_divs(vec4 v, float s, vec4 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a + b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_add_ps(glmm_load(a), @@ -527,6 +589,7 @@ glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { dest[3] += a[3] + b[3]; #endif } +#endif /*! * @brief sub two vectors and add result to dest @@ -537,9 +600,11 @@ glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a - b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_sub_ps(glmm_load(a), @@ -555,6 +620,7 @@ glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { dest[3] += a[3] - b[3]; #endif } +#endif /*! * @brief mul two vectors and add result to dest @@ -565,9 +631,11 @@ glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { * @param[in] b vector 2 * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -583,6 +651,7 @@ glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { dest[3] += a[3] * b[3]; #endif } +#endif /*! * @brief mul vector with scalar and add result to sum @@ -593,9 +662,11 @@ glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { * @param[in] s scalar * @param[out] dest dest += (a * b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_muladds(vec4 a, float s, vec4 dest) { +glm_vec4_muladds(vec4 a, float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -611,6 +682,7 @@ glm_vec4_muladds(vec4 a, float s, vec4 dest) { dest[3] += a[3] * s; #endif } +#endif /*! * @brief add max of two vector to result/dest @@ -621,9 +693,11 @@ glm_vec4_muladds(vec4 a, float s, vec4 dest) { * @param[in] b vector 2 * @param[out] dest dest += max(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_max_ps(glmm_load(a), @@ -639,6 +713,7 @@ glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { dest[3] += glm_max(a[3], b[3]); #endif } +#endif /*! * @brief add min of two vector to result/dest @@ -649,9 +724,11 @@ glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { * @param[in] b vector 2 * @param[out] dest dest += min(a, b) */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_min_ps(glmm_load(a), @@ -667,6 +744,7 @@ glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { dest[3] += glm_min(a[3], b[3]); #endif } +#endif /*! * @brief negate vector components and store result in dest @@ -674,9 +752,11 @@ glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { * @param[in] v vector * @param[out] dest result vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_negate_to(vec4 v, vec4 dest) { +glm_vec4_negate_to(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f))); #elif defined(CGLM_NEON_FP) @@ -688,17 +768,21 @@ glm_vec4_negate_to(vec4 v, vec4 dest) { dest[3] = -v[3]; #endif } +#endif /*! * @brief flip sign of all vec4 members * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_negate(vec4 v) { +glm_vec4_negate(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_negate_to(v, v); } +#endif /*! * @brief normalize vec4 to dest @@ -706,9 +790,11 @@ glm_vec4_negate(vec4 v) { * @param[in] v source * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_normalize_to(vec4 v, vec4 dest) { +glm_vec4_normalize_to(vec4 v, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -736,17 +822,21 @@ glm_vec4_normalize_to(vec4 v, vec4 dest) { glm_vec4_scale(v, 1.0f / norm, dest); #endif } +#endif /*! * @brief normalize vec4 and store result in same vec * * @param[in, out] v vector */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_normalize(vec4 v) { +glm_vec4_normalize(vec4 v) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_normalize_to(v, v); } +#endif /** * @brief distance between two vectors @@ -755,9 +845,11 @@ glm_vec4_normalize(vec4 v) { * @param[in] b vector2 * @return returns distance */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_distance(vec4 a, vec4 b) { +glm_vec4_distance(vec4 a, vec4 b) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) return glmm_norm(_mm_sub_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -769,6 +861,7 @@ glm_vec4_distance(vec4 a, vec4 b) { + glm_pow2(a[3] - b[3])); #endif } +#endif /** * @brief squared distance between two vectors @@ -777,9 +870,11 @@ glm_vec4_distance(vec4 a, vec4 b) { * @param[in] b vector2 * @return returns squared distance */ -CGLM_INLINE +CGLM_DECL float -glm_vec4_distance2(vec4 a, vec4 b) { +glm_vec4_distance2(vec4 a, vec4 b) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) return glmm_norm2(_mm_sub_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -791,6 +886,7 @@ glm_vec4_distance2(vec4 a, vec4 b) { + glm_pow2(a[3] - b[3]); #endif } +#endif /*! * @brief max values of vectors @@ -799,9 +895,11 @@ glm_vec4_distance2(vec4 a, vec4 b) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { +glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_max_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -813,6 +911,7 @@ glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { dest[3] = glm_max(a[3], b[3]); #endif } +#endif /*! * @brief min values of vectors @@ -821,9 +920,11 @@ glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { * @param[in] b vector2 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_minv(vec4 a, vec4 b, vec4 dest) { +glm_vec4_minv(vec4 a, vec4 b, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_min_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -835,6 +936,7 @@ glm_vec4_minv(vec4 a, vec4 b, vec4 dest) { dest[3] = glm_min(a[3], b[3]); #endif } +#endif /*! * @brief clamp vector's individual members between min and max values @@ -843,9 +945,11 @@ glm_vec4_minv(vec4 a, vec4 b, vec4 dest) { * @param[in] minVal minimum value * @param[in] maxVal maximum value */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_clamp(vec4 v, float minVal, float maxVal) { +glm_vec4_clamp(vec4 v, float minVal, float maxVal) CGLM_ENDD +#ifndef CGLM_LIB +{ #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(v, _mm_min_ps(_mm_max_ps(glmm_load(v), _mm_set1_ps(minVal)), _mm_set1_ps(maxVal))); @@ -859,6 +963,7 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) { v[3] = glm_clamp(v[3], minVal, maxVal); #endif } +#endif /*! * @brief linear interpolation between two vectors @@ -870,9 +975,11 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 s, v; /* from + s * (to - from) */ @@ -881,6 +988,7 @@ glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { glm_vec4_mul(s, v, v); glm_vec4_add(from, v, dest); } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -892,11 +1000,14 @@ glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_lerp(from, to, glm_clamp_zo(t), dest); } +#endif /*! * @brief linear interpolation between two vectors @@ -908,11 +1019,14 @@ glm_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_mix(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_mix(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_lerp(from, to, t, dest); } +#endif /*! * @brief linear interpolation between two vectors (clamped) @@ -924,11 +1038,14 @@ glm_vec4_mix(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_mixc(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_mixc(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_lerpc(from, to, t, dest); } +#endif /*! * @brief threshold function (unidimensional) @@ -937,14 +1054,17 @@ glm_vec4_mixc(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_step_uni(float edge, vec4 x, vec4 dest) { +glm_vec4_step_uni(float edge, vec4 x, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_step(edge, x[0]); dest[1] = glm_step(edge, x[1]); dest[2] = glm_step(edge, x[2]); dest[3] = glm_step(edge, x[3]); } +#endif /*! * @brief threshold function @@ -953,14 +1073,17 @@ glm_vec4_step_uni(float edge, vec4 x, vec4 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_step(vec4 edge, vec4 x, vec4 dest) { +glm_vec4_step(vec4 edge, vec4 x, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_step(edge[0], x[0]); dest[1] = glm_step(edge[1], x[1]); dest[2] = glm_step(edge[2], x[2]); dest[3] = glm_step(edge[3], x[3]); } +#endif /*! * @brief threshold function with a smooth transition (unidimensional) @@ -970,14 +1093,17 @@ glm_vec4_step(vec4 edge, vec4 x, vec4 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest) { +glm_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_smoothstep(edge0, edge1, x[0]); dest[1] = glm_smoothstep(edge0, edge1, x[1]); dest[2] = glm_smoothstep(edge0, edge1, x[2]); dest[3] = glm_smoothstep(edge0, edge1, x[3]); } +#endif /*! * @brief threshold function with a smooth transition @@ -987,14 +1113,17 @@ glm_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest) { * @param[in] x value to test against threshold * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest) { +glm_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ dest[0] = glm_smoothstep(edge0[0], edge1[0], x[0]); dest[1] = glm_smoothstep(edge0[1], edge1[1], x[1]); dest[2] = glm_smoothstep(edge0[2], edge1[2], x[2]); dest[3] = glm_smoothstep(edge0[3], edge1[3], x[3]); } +#endif /*! * @brief smooth Hermite interpolation between two vectors @@ -1006,9 +1135,11 @@ glm_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest) { * @param[in] t interpolant (amount) * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 s, v; /* from + smoothstep * (to - from) */ @@ -1017,6 +1148,7 @@ glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest) { glm_vec4_mul(s, v, v); glm_vec4_add(from, v, dest); } +#endif /*! * @brief smooth Hermite interpolation between two vectors (clamped) @@ -1028,11 +1160,14 @@ glm_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] t interpolant (amount) clamped between 0 and 1 * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ glm_vec4_smoothinterp(from, to, glm_clamp_zo(t), dest); } +#endif /*! * @brief helper to fill vec4 as [S^3, S^2, S, 1] @@ -1040,9 +1175,11 @@ glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest) { * @param[in] s parameter * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_cubic(float s, vec4 dest) { +glm_vec4_cubic(float s, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ float ss; ss = s * s; @@ -1052,6 +1189,7 @@ glm_vec4_cubic(float s, vec4 dest) { dest[2] = s; dest[3] = 1.0f; } +#endif /*! * @brief swizzle vector components @@ -1062,9 +1200,11 @@ glm_vec4_cubic(float s, vec4 dest) { * @param[in] mask mask * @param[out] dest destination */ -CGLM_INLINE +CGLM_DECL void -glm_vec4_swizzle(vec4 v, int mask, vec4 dest) { +glm_vec4_swizzle(vec4 v, int mask, vec4 dest) CGLM_ENDD +#ifndef CGLM_LIB +{ vec4 t; t[0] = v[(mask & (3 << 0))]; @@ -1074,5 +1214,6 @@ glm_vec4_swizzle(vec4 v, int mask, vec4 dest) { glm_vec4_copy(t, dest); } +#endif #endif /* cglm_vec4_h */ diff --git a/src/affine.c b/src/affine.c deleted file mode 100644 index a818bd108..000000000 --- a/src/affine.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_translate_make(mat4 m, vec3 v) { - glm_translate_make(m, v); -} - -CGLM_EXPORT -void -glmc_translate_to(mat4 m, vec3 v, mat4 dest) { - glm_translate_to(m, v, dest); -} - -CGLM_EXPORT -void -glmc_translate(mat4 m, vec3 v) { - glm_translate(m, v); -} - -CGLM_EXPORT -void -glmc_translate_x(mat4 m, float to) { - glm_translate_x(m, to); -} - -CGLM_EXPORT -void -glmc_translate_y(mat4 m, float to) { - glm_translate_y(m, to); -} - -CGLM_EXPORT -void -glmc_translate_z(mat4 m, float to) { - glm_translate_z(m, to); -} - -CGLM_EXPORT -void -glmc_scale_make(mat4 m, vec3 v) { - glm_scale_make(m, v); -} - -CGLM_EXPORT -void -glmc_scale_to(mat4 m, vec3 v, mat4 dest) { - glm_scale_to(m, v, dest); -} - -CGLM_EXPORT -void -glmc_scale(mat4 m, vec3 v) { - glm_scale(m, v); -} - -CGLM_EXPORT -void -glmc_scale_uni(mat4 m, float s) { - glm_scale_uni(m, s); -} - -CGLM_EXPORT -void -glmc_rotate_x(mat4 m, float rad, mat4 dest) { - glm_rotate_x(m, rad, dest); -} - -CGLM_EXPORT -void -glmc_rotate_y(mat4 m, float rad, mat4 dest) { - glm_rotate_y(m, rad, dest); -} - -CGLM_EXPORT -void -glmc_rotate_z(mat4 m, float rad, mat4 dest) { - glm_rotate_z(m, rad, dest); -} - -CGLM_EXPORT -void -glmc_rotate_make(mat4 m, float angle, vec3 axis) { - glm_rotate_make(m, angle, axis); -} - -CGLM_EXPORT -void -glmc_rotate(mat4 m, float angle, vec3 axis) { - glm_rotate(m, angle, axis); -} - -CGLM_EXPORT -void -glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { - glm_rotate_at(m, pivot, angle, axis); -} - -CGLM_EXPORT -void -glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { - glm_rotate_atm(m, pivot, angle, axis); -} - -CGLM_EXPORT -void -glmc_decompose_scalev(mat4 m, vec3 s) { - glm_decompose_scalev(m, s); -} - -CGLM_EXPORT -bool -glmc_uniscaled(mat4 m) { - return glm_uniscaled(m); -} - -CGLM_EXPORT -void -glmc_decompose_rs(mat4 m, mat4 r, vec3 s) { - glm_decompose_rs(m, r, s); -} - -CGLM_EXPORT -void -glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { - glm_decompose(m, t, r, s); -} - -CGLM_EXPORT -void -glmc_mul(mat4 m1, mat4 m2, mat4 dest) { - glm_mul(m1, m2, dest); -} - -CGLM_EXPORT -void -glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest) { - glm_mul_rot(m1, m2, dest); -} - -CGLM_EXPORT -void -glmc_inv_tr(mat4 mat) { - glm_inv_tr(mat); -} diff --git a/src/bezier.c b/src/bezier.c deleted file mode 100644 index 21e6495e9..000000000 --- a/src/bezier.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -float -glmc_bezier(float s, float p0, float c0, float c1, float p1) { - return glm_bezier(s, p0, c0, c1, p1); -} - -CGLM_EXPORT -float -glmc_hermite(float s, float p0, float t0, float t1, float p1) { - return glm_hermite(s, p0, t0, t1, p1); -} - -CGLM_EXPORT -float -glmc_decasteljau(float prm, float p0, float c0, float c1, float p1) { - return glm_decasteljau(prm, p0, c0, c1, p1); -} diff --git a/src/box.c b/src/box.c deleted file mode 100644 index fd639ea98..000000000 --- a/src/box.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { - glm_aabb_transform(box, m, dest); -} - -CGLM_EXPORT -void -glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { - glm_aabb_merge(box1, box2, dest); -} - -CGLM_EXPORT -void -glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { - glm_aabb_crop(box, cropBox, dest); -} - -CGLM_EXPORT -void -glmc_aabb_crop_until(vec3 box[2], - vec3 cropBox[2], - vec3 clampBox[2], - vec3 dest[2]) { - glm_aabb_crop_until(box, cropBox, clampBox, dest); -} - -CGLM_EXPORT -bool -glmc_aabb_frustum(vec3 box[2], vec4 planes[6]) { - return glm_aabb_frustum(box, planes); -} - -CGLM_EXPORT -void -glmc_aabb_invalidate(vec3 box[2]) { - glm_aabb_invalidate(box); -} - -CGLM_EXPORT -bool -glmc_aabb_isvalid(vec3 box[2]) { - return glm_aabb_isvalid(box); -} - -CGLM_EXPORT -float -glmc_aabb_size(vec3 box[2]) { - return glm_aabb_size(box); -} - -CGLM_EXPORT -float -glmc_aabb_radius(vec3 box[2]) { - return glm_aabb_radius(box); -} - -CGLM_EXPORT -void -glmc_aabb_center(vec3 box[2], vec3 dest) { - glm_aabb_center(box, dest); -} - -CGLM_EXPORT -bool -glmc_aabb_aabb(vec3 box[2], vec3 other[2]) { - return glm_aabb_aabb(box, other); -} - -CGLM_EXPORT -bool -glmc_aabb_point(vec3 box[2], vec3 point) { - return glm_aabb_point(box, point); -} - -CGLM_EXPORT -bool -glmc_aabb_contains(vec3 box[2], vec3 other[2]) { - return glm_aabb_contains(box, other); -} - -CGLM_EXPORT -bool -glmc_aabb_sphere(vec3 box[2], vec4 s) { - return glm_aabb_sphere(box, s); -} diff --git a/src/cam.c b/src/cam.c deleted file mode 100644 index 39ac2102d..000000000 --- a/src/cam.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_frustum(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, - mat4 dest) { - glm_frustum(left, - right, - bottom, - top, - nearVal, - farVal, - dest); -} - -CGLM_EXPORT -void -glmc_ortho(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, - mat4 dest) { - glm_ortho(left, - right, - bottom, - top, - nearVal, - farVal, - dest); -} - -CGLM_EXPORT -void -glmc_ortho_aabb(vec3 box[2], mat4 dest) { - glm_ortho_aabb(box, dest); -} - -CGLM_EXPORT -void -glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { - glm_ortho_aabb_p(box, padding, dest); -} - -CGLM_EXPORT -void -glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { - glm_ortho_aabb_pz(box, padding, dest); -} - -CGLM_EXPORT -void -glmc_ortho_default(float aspect, mat4 dest) { - glm_ortho_default(aspect, dest); -} - -CGLM_EXPORT -void -glmc_ortho_default_s(float aspect, float size, mat4 dest) { - glm_ortho_default_s(aspect, size, dest); -} - -CGLM_EXPORT -void -glmc_perspective(float fovy, - float aspect, - float nearVal, - float farVal, - mat4 dest) { - glm_perspective(fovy, - aspect, - nearVal, - farVal, - dest); -} - -CGLM_EXPORT -void -glmc_persp_move_far(mat4 proj, float deltaFar) { - glm_persp_move_far(proj, deltaFar); -} - -CGLM_EXPORT -void -glmc_perspective_default(float aspect, mat4 dest) { - glm_perspective_default(aspect, dest); -} - -CGLM_EXPORT -void -glmc_perspective_resize(float aspect, mat4 proj) { - glm_perspective_resize(aspect, proj); -} - -CGLM_EXPORT -void -glmc_lookat(vec3 eye, - vec3 center, - vec3 up, - mat4 dest) { - glm_lookat(eye, center, up, dest); -} - -CGLM_EXPORT -void -glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { - glm_look(eye, dir, up, dest); -} - -CGLM_EXPORT -void -glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) { - glm_look_anyup(eye, dir, dest); -} - -CGLM_EXPORT -void -glmc_persp_decomp(mat4 proj, - float * __restrict nearVal, - float * __restrict farVal, - float * __restrict top, - float * __restrict bottom, - float * __restrict left, - float * __restrict right) { - glm_persp_decomp(proj, nearVal, farVal, top, bottom, left, right); -} - -CGLM_EXPORT -void -glmc_persp_decompv(mat4 proj, float dest[6]) { - glm_persp_decompv(proj, dest); -} - -CGLM_EXPORT -void -glmc_persp_decomp_x(mat4 proj, - float * __restrict left, - float * __restrict right) { - glm_persp_decomp_x(proj, left, right); -} - -CGLM_EXPORT -void -glmc_persp_decomp_y(mat4 proj, - float * __restrict top, - float * __restrict bottom) { - glm_persp_decomp_y(proj, top, bottom); -} - -CGLM_EXPORT -void -glmc_persp_decomp_z(mat4 proj, - float * __restrict nearVal, - float * __restrict farVal) { - glm_persp_decomp_z(proj, nearVal, farVal); -} - -CGLM_EXPORT -void -glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) { - glm_persp_decomp_far(proj, farVal); -} - -CGLM_EXPORT -void -glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) { - glm_persp_decomp_near(proj, nearVal); -} - -CGLM_EXPORT -float -glmc_persp_fovy(mat4 proj) { - return glm_persp_fovy(proj); -} - -CGLM_EXPORT -float -glmc_persp_aspect(mat4 proj) { - return glm_persp_aspect(proj); -} - -CGLM_EXPORT -void -glmc_persp_sizes(mat4 proj, float fovy, vec4 dest) { - glm_persp_sizes(proj, fovy, dest); -} diff --git a/src/cglm.c b/src/cglm.c new file mode 100644 index 000000000..d52ec17a6 --- /dev/null +++ b/src/cglm.c @@ -0,0 +1,3 @@ +//#define CGLM_DLL +#include "../include/cglm/cglm.h" +#include "../include/cglm/struct.h" \ No newline at end of file diff --git a/src/config.h b/src/config.h deleted file mode 100644 index a6ab44f26..000000000 --- a/src/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -* Copyright (c), Recep Aslantas. -* -* MIT License (MIT), http://opensource.org/licenses/MIT -* Full license can be found in the LICENSE file -*/ - -#ifndef cglm__config__h_ -#define cglm__config__h_ - -#if defined(_WIN32) || defined(WIN32) - -/* Exclude rarely-used stuff from Windows headers */ -# define WIN32_LEAN_AND_MEAN -# include - -/* Windows Header Files: */ -# include - -#endif - -#endif /* cglm__config__h_ */ diff --git a/src/curve.c b/src/curve.c deleted file mode 100644 index 74d47020a..000000000 --- a/src/curve.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -float -glmc_smc(float s, mat4 m, vec4 c) { - return glm_smc(s, m, c); -} diff --git a/src/ease.c b/src/ease.c deleted file mode 100644 index 702dfce5d..000000000 --- a/src/ease.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -float -glmc_ease_linear(float t) { - return glm_ease_linear(t); -} - -CGLM_EXPORT -float -glmc_ease_sine_in(float t) { - return glm_ease_sine_in(t); -} - -CGLM_EXPORT -float -glmc_ease_sine_out(float t) { - return glm_ease_sine_out(t); -} - -CGLM_EXPORT -float -glmc_ease_sine_inout(float t) { - return glm_ease_sine_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_quad_in(float t) { - return glm_ease_quad_in(t); -} - -CGLM_EXPORT -float -glmc_ease_quad_out(float t) { - return glm_ease_quad_out(t); -} - -CGLM_EXPORT -float -glmc_ease_quad_inout(float t) { - return glm_ease_quad_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_cubic_in(float t) { - return glm_ease_cubic_in(t); -} - -CGLM_EXPORT -float -glmc_ease_cubic_out(float t) { - return glm_ease_cubic_out(t); -} - -CGLM_EXPORT -float -glmc_ease_cubic_inout(float t) { - return glm_ease_cubic_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_quart_in(float t) { - return glm_ease_quart_in(t); -} - -CGLM_EXPORT -float -glmc_ease_quart_out(float t) { - return glm_ease_quart_out(t); -} - -CGLM_EXPORT -float -glmc_ease_quart_inout(float t) { - return glm_ease_quart_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_quint_in(float t) { - return glm_ease_quint_in(t); -} - -CGLM_EXPORT -float -glmc_ease_quint_out(float t) { - return glm_ease_quint_out(t); -} - -CGLM_EXPORT -float -glmc_ease_quint_inout(float t) { - return glm_ease_quint_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_exp_in(float t) { - return glm_ease_exp_in(t); -} - -CGLM_EXPORT -float -glmc_ease_exp_out(float t) { - return glm_ease_exp_out(t); -} - -CGLM_EXPORT -float -glmc_ease_exp_inout(float t) { - return glm_ease_exp_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_circ_in(float t) { - return glm_ease_circ_in(t); -} - -CGLM_EXPORT -float -glmc_ease_circ_out(float t) { - return glm_ease_circ_out(t); -} - -CGLM_EXPORT -float -glmc_ease_circ_inout(float t) { - return glm_ease_circ_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_back_in(float t) { - return glm_ease_back_in(t); -} - -CGLM_EXPORT -float -glmc_ease_back_out(float t) { - return glm_ease_back_out(t); -} - -CGLM_EXPORT -float -glmc_ease_back_inout(float t) { - return glm_ease_back_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_elast_in(float t) { - return glm_ease_elast_in(t); -} - -CGLM_EXPORT -float -glmc_ease_elast_out(float t) { - return glm_ease_elast_out(t); -} - -CGLM_EXPORT -float -glmc_ease_elast_inout(float t) { - return glm_ease_elast_inout(t); -} - -CGLM_EXPORT -float -glmc_ease_bounce_out(float t) { - return glm_ease_bounce_out(t); -} - -CGLM_EXPORT -float -glmc_ease_bounce_in(float t) { - return glm_ease_bounce_in(t); -} - -CGLM_EXPORT -float -glmc_ease_bounce_inout(float t) { - return glm_ease_bounce_inout(t); -} diff --git a/src/euler.c b/src/euler.c deleted file mode 100644 index a59b1df93..000000000 --- a/src/euler.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_euler_angles(mat4 m, vec3 dest) { - glm_euler_angles(m, dest); -} - -CGLM_EXPORT -void -glmc_euler(vec3 angles, mat4 dest) { - glm_euler(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_xyz(vec3 angles, mat4 dest) { - glm_euler_xyz(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_zyx(vec3 angles, mat4 dest) { - glm_euler_zyx(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_zxy(vec3 angles, mat4 dest) { - glm_euler_zxy(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_xzy(vec3 angles, mat4 dest) { - glm_euler_xzy(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_yzx(vec3 angles, mat4 dest) { - glm_euler_yzx(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_yxz(vec3 angles, mat4 dest) { - glm_euler_yxz(angles, dest); -} - -CGLM_EXPORT -void -glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest) { - glm_euler_by_order(angles, axis, dest); -} diff --git a/src/frustum.c b/src/frustum.c deleted file mode 100644 index 312c3d3ef..000000000 --- a/src/frustum.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_frustum_planes(mat4 m, vec4 dest[6]) { - glm_frustum_planes(m, dest); -} - -CGLM_EXPORT -void -glmc_frustum_corners(mat4 invMat, vec4 dest[8]) { - glm_frustum_corners(invMat, dest); -} - -CGLM_EXPORT -void -glmc_frustum_center(vec4 corners[8], vec4 dest) { - glm_frustum_center(corners, dest); -} - -CGLM_EXPORT -void -glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { - glm_frustum_box(corners, m, box); -} - -CGLM_EXPORT -void -glmc_frustum_corners_at(vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]) { - glm_frustum_corners_at(corners, splitDist, farDist, planeCorners); -} diff --git a/src/io.c b/src/io.c deleted file mode 100644 index fb2b5a99b..000000000 --- a/src/io.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_mat4_print(mat4 matrix, - FILE * __restrict ostream) { - glm_mat4_print(matrix, ostream); -} - -CGLM_EXPORT -void -glmc_mat3_print(mat3 matrix, - FILE * __restrict ostream) { - glm_mat3_print(matrix, ostream); -} - -CGLM_EXPORT -void -glmc_vec4_print(vec4 vec, - FILE * __restrict ostream) { - glm_vec4_print(vec, ostream); -} - -CGLM_EXPORT -void -glmc_vec3_print(vec3 vec, - FILE * __restrict ostream) { - glm_vec3_print(vec, ostream); -} - -CGLM_EXPORT -void -glmc_versor_print(versor vec, - FILE * __restrict ostream) { - glm_versor_print(vec, ostream); -} diff --git a/src/mat2.c b/src/mat2.c deleted file mode 100644 index 99a282d6c..000000000 --- a/src/mat2.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_mat2_copy(mat2 mat, mat2 dest) { - glm_mat2_copy(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat2_identity(mat2 mat) { - glm_mat2_identity(mat); -} - -CGLM_EXPORT -void -glmc_mat2_identity_array(mat2 * __restrict mat, size_t count) { - glm_mat2_identity_array(mat, count); -} - -CGLM_EXPORT -void -glmc_mat2_zero(mat2 mat) { - glm_mat2_zero(mat); -} - -CGLM_EXPORT -void -glmc_mat2_mul(mat2 m1, mat2 m2, mat2 dest) { - glm_mat2_mul(m1, m2, dest); -} - -CGLM_EXPORT -void -glmc_mat2_transpose_to(mat2 m, mat2 dest) { - glm_mat2_transpose_to(m, dest); -} - -CGLM_EXPORT -void -glmc_mat2_transpose(mat2 m) { - glm_mat2_transpose(m); -} - -CGLM_EXPORT -void -glmc_mat2_mulv(mat2 m, vec2 v, vec2 dest) { - glm_mat2_mulv(m, v, dest); -} - -CGLM_EXPORT -float -glmc_mat2_trace(mat2 m) { - return glm_mat2_trace(m); -} - -CGLM_EXPORT -void -glmc_mat2_scale(mat2 m, float s) { - glm_mat2_scale(m, s); -} - -CGLM_EXPORT -float -glmc_mat2_det(mat2 mat) { - return glm_mat2_det(mat); -} - -CGLM_EXPORT -void -glmc_mat2_inv(mat2 mat, mat2 dest) { - glm_mat2_inv(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat2_swap_col(mat2 mat, int col1, int col2) { - glm_mat2_swap_col(mat, col1, col2); -} - -CGLM_EXPORT -void -glmc_mat2_swap_row(mat2 mat, int row1, int row2) { - glm_mat2_swap_row(mat, row1, row2); -} - -CGLM_EXPORT -float -glmc_mat2_rmc(vec2 r, mat2 m, vec2 c) { - return glm_mat2_rmc(r, m, c); -} diff --git a/src/mat3.c b/src/mat3.c deleted file mode 100644 index 1286bd9d9..000000000 --- a/src/mat3.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_mat3_copy(mat3 mat, mat3 dest) { - glm_mat3_copy(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat3_identity(mat3 mat) { - glm_mat3_identity(mat); -} - -CGLM_EXPORT -void -glmc_mat3_zero(mat3 mat) { - glm_mat3_zero(mat); -} - -CGLM_EXPORT -void -glmc_mat3_identity_array(mat3 * __restrict mat, size_t count) { - glm_mat3_identity_array(mat, count); -} - -CGLM_EXPORT -void -glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { - glm_mat3_mul(m1, m2, dest); -} - -CGLM_EXPORT -void -glmc_mat3_transpose_to(mat3 m, mat3 dest) { - glm_mat3_transpose_to(m, dest); -} - -CGLM_EXPORT -void -glmc_mat3_transpose(mat3 m) { - glm_mat3_transpose(m); -} - -CGLM_EXPORT -void -glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest) { - glm_mat3_mulv(m, v, dest); -} - -CGLM_EXPORT -float -glmc_mat3_trace(mat3 m) { - return glm_mat3_trace(m); -} - -CGLM_EXPORT -void -glmc_mat3_quat(mat3 m, versor dest) { - glm_mat3_quat(m, dest); -} - -CGLM_EXPORT -void -glmc_mat3_scale(mat3 m, float s) { - glm_mat3_scale(m, s); -} - -CGLM_EXPORT -float -glmc_mat3_det(mat3 mat) { - return glm_mat3_det(mat); -} - -CGLM_EXPORT -void -glmc_mat3_inv(mat3 mat, mat3 dest) { - glm_mat3_inv(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat3_swap_col(mat3 mat, int col1, int col2) { - glm_mat3_swap_col(mat, col1, col2); -} - -CGLM_EXPORT -void -glmc_mat3_swap_row(mat3 mat, int row1, int row2) { - glm_mat3_swap_row(mat, row1, row2); -} - -CGLM_EXPORT -float -glmc_mat3_rmc(vec3 r, mat3 m, vec3 c) { - return glm_mat3_rmc(r, m, c); -} diff --git a/src/mat4.c b/src/mat4.c deleted file mode 100644 index a9f39c65d..000000000 --- a/src/mat4.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_mat4_ucopy(mat4 mat, mat4 dest) { - glm_mat4_copy(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_copy(mat4 mat, mat4 dest) { - glm_mat4_copy(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_identity(mat4 mat) { - glm_mat4_identity(mat); -} - -CGLM_EXPORT -void -glmc_mat4_identity_array(mat4 * __restrict mat, size_t count) { - glm_mat4_identity_array(mat, count); -} - -CGLM_EXPORT -void -glmc_mat4_zero(mat4 mat) { - glm_mat4_zero(mat); -} - -CGLM_EXPORT -void -glmc_mat4_pick3(mat4 mat, mat3 dest) { - glm_mat4_pick3(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_pick3t(mat4 mat, mat3 dest) { - glm_mat4_pick3t(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_ins3(mat3 mat, mat4 dest) { - glm_mat4_ins3(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { - glm_mat4_mul(m1, m2, dest); -} - -CGLM_EXPORT -void -glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { - glm_mat4_mulN(matrices, len, dest); -} - -CGLM_EXPORT -void -glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest) { - glm_mat4_mulv(m, v, dest); -} - -CGLM_EXPORT -void -glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { - glm_mat4_mulv3(m, v, last, dest); -} - -CGLM_EXPORT -float -glmc_mat4_trace(mat4 m) { - return glm_mat4_trace(m); -} - -CGLM_EXPORT -float -glmc_mat4_trace3(mat4 m) { - return glm_mat4_trace3(m); -} - -CGLM_EXPORT -void -glmc_mat4_quat(mat4 m, versor dest) { - glm_mat4_quat(m, dest); -} - -CGLM_EXPORT -void -glmc_mat4_transpose_to(mat4 m, mat4 dest) { - glm_mat4_transpose_to(m, dest); -} - -CGLM_EXPORT -void -glmc_mat4_transpose(mat4 m) { - glm_mat4_transpose(m); -} - -CGLM_EXPORT -void -glmc_mat4_scale_p(mat4 m, float s) { - glm_mat4_scale_p(m, s); -} - -CGLM_EXPORT -void -glmc_mat4_scale(mat4 m, float s) { - glm_mat4_scale(m, s); -} - -CGLM_EXPORT -float -glmc_mat4_det(mat4 mat) { - return glm_mat4_det(mat); -} - -CGLM_EXPORT -void -glmc_mat4_inv(mat4 mat, mat4 dest) { - glm_mat4_inv(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_inv_precise(mat4 mat, mat4 dest) { - glm_mat4_inv_precise(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_inv_fast(mat4 mat, mat4 dest) { - glm_mat4_inv_fast(mat, dest); -} - -CGLM_EXPORT -void -glmc_mat4_swap_col(mat4 mat, int col1, int col2) { - glm_mat4_swap_col(mat, col1, col2); -} - -CGLM_EXPORT -void -glmc_mat4_swap_row(mat4 mat, int row1, int row2) { - glm_mat4_swap_row(mat, row1, row2); -} - -CGLM_EXPORT -float -glmc_mat4_rmc(vec4 r, mat4 m, vec4 c) { - return glm_mat4_rmc(r, m, c); -} diff --git a/src/plane.c b/src/plane.c deleted file mode 100644 index 7ee0c0f87..000000000 --- a/src/plane.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_plane_normalize(vec4 plane) { - glm_plane_normalize(plane); -} diff --git a/src/project.c b/src/project.c deleted file mode 100644 index 91c7128f8..000000000 --- a/src/project.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { - glm_unprojecti(pos, invMat, vp, dest); -} - -CGLM_EXPORT -void -glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { - glm_unproject(pos, m, vp, dest); -} - -CGLM_EXPORT -void -glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { - glm_project(pos, m, vp, dest); -} diff --git a/src/quat.c b/src/quat.c deleted file mode 100644 index f992f7c06..000000000 --- a/src/quat.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_quat_identity(versor q) { - glm_quat_identity(q); -} - -CGLM_EXPORT -void -glmc_quat_identity_array(versor * __restrict q, size_t count) { - glm_quat_identity_array(q, count); -} - -CGLM_EXPORT -void -glmc_quat_init(versor q, float x, float y, float z, float w) { - glm_quat_init(q, x, y, z, w); -} - -CGLM_EXPORT -void -glmc_quat(versor q, float angle, float x, float y, float z) { - glm_quat(q, angle, x, y, z); -} - -CGLM_EXPORT -void -glmc_quatv(versor q, float angle, vec3 axis) { - glm_quatv(q, angle, axis); -} - -CGLM_EXPORT -void -glmc_quat_copy(versor q, versor dest) { - glm_quat_copy(q, dest); -} - -CGLM_EXPORT -float -glmc_quat_norm(versor q) { - return glm_quat_norm(q); -} - -CGLM_EXPORT -void -glmc_quat_normalize_to(versor q, versor dest) { - glm_quat_normalize_to(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_normalize(versor q) { - glm_quat_normalize(q); -} - -CGLM_EXPORT -float -glmc_quat_dot(versor p, versor q) { - return glm_quat_dot(p, q); -} - -CGLM_EXPORT -void -glmc_quat_conjugate(versor q, versor dest) { - glm_quat_conjugate(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_inv(versor q, versor dest) { - glm_quat_inv(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_add(versor p, versor q, versor dest) { - glm_quat_add(p, q, dest); -} - -CGLM_EXPORT -void -glmc_quat_sub(versor p, versor q, versor dest) { - glm_quat_sub(p, q, dest); -} - -CGLM_EXPORT -float -glmc_quat_real(versor q) { - return glm_quat_real(q); -} - -CGLM_EXPORT -void -glmc_quat_imag(versor q, vec3 dest) { - glm_quat_imag(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_imagn(versor q, vec3 dest) { - glm_quat_imagn(q, dest); -} - -CGLM_EXPORT -float -glmc_quat_imaglen(versor q) { - return glm_quat_imaglen(q); -} - -CGLM_EXPORT -float -glmc_quat_angle(versor q) { - return glm_quat_angle(q); -} - -CGLM_EXPORT -void -glmc_quat_axis(versor q, vec3 dest) { - glm_quat_axis(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_mul(versor p, versor q, versor dest) { - glm_quat_mul(p, q, dest); -} - -CGLM_EXPORT -void -glmc_quat_mat4(versor q, mat4 dest) { - glm_quat_mat4(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_mat4t(versor q, mat4 dest) { - glm_quat_mat4t(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_mat3(versor q, mat3 dest) { - glm_quat_mat3(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_mat3t(versor q, mat3 dest) { - glm_quat_mat3t(q, dest); -} - -CGLM_EXPORT -void -glmc_quat_lerp(versor from, versor to, float t, versor dest) { - glm_quat_lerp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_quat_lerpc(versor from, versor to, float t, versor dest) { - glm_quat_lerpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_quat_slerp(versor from, versor to, float t, versor dest) { - glm_quat_slerp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_quat_look(vec3 eye, versor ori, mat4 dest) { - glm_quat_look(eye, ori, dest); -} - -CGLM_EXPORT -void -glmc_quat_for(vec3 dir, vec3 up, versor dest) { - glm_quat_for(dir, up, dest); -} - -CGLM_EXPORT -void -glmc_quat_forp(vec3 from, vec3 to, vec3 up, versor dest) { - glm_quat_forp(from, to, up, dest); -} - -CGLM_EXPORT -void -glmc_quat_rotatev(versor q, vec3 v, vec3 dest) { - glm_quat_rotatev(q, v, dest); -} - -CGLM_EXPORT -void -glmc_quat_rotate(mat4 m, versor q, mat4 dest) { - glm_quat_rotate(m, q, dest); -} - -CGLM_EXPORT -void -glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot) { - glm_quat_rotate_at(model, q, pivot); -} - -CGLM_EXPORT -void -glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { - glm_quat_rotate_atm(m, q, pivot); -} diff --git a/src/ray.c b/src/ray.c deleted file mode 100644 index 973c05992..000000000 --- a/src/ray.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -bool -glmc_ray_triangle(vec3 origin, - vec3 direction, - vec3 v0, - vec3 v1, - vec3 v2, - float *d) { - return glm_ray_triangle(origin, direction, v0, v1, v2, d); -} diff --git a/src/sphere.c b/src/sphere.c deleted file mode 100644 index 003ef8799..000000000 --- a/src/sphere.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -float -glmc_sphere_radii(vec4 s) { - return glm_sphere_radii(s); -} - -CGLM_EXPORT -void -glmc_sphere_transform(vec4 s, mat4 m, vec4 dest) { - glm_sphere_transform(s, m, dest); -} - -CGLM_EXPORT -void -glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { - glm_sphere_merge(s1, s2, dest); -} - -CGLM_EXPORT -bool -glmc_sphere_sphere(vec4 s1, vec4 s2) { - return glm_sphere_sphere(s1, s2); -} - -CGLM_EXPORT -bool -glmc_sphere_point(vec4 s, vec3 point) { - return glm_sphere_point(s, point); -} diff --git a/src/vec2.c b/src/vec2.c deleted file mode 100644 index 304868861..000000000 --- a/src/vec2.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_vec2(float * __restrict v, vec2 dest) { - glm_vec2(v, dest); -} - -CGLM_EXPORT -void -glmc_vec2_copy(vec2 a, vec2 dest) { - glm_vec2_copy(a, dest); -} - -CGLM_EXPORT -void -glmc_vec2_zero(vec2 v) { - glm_vec2_zero(v); -} - -CGLM_EXPORT -void -glmc_vec2_one(vec2 v) { - glm_vec2_one(v); -} - -CGLM_EXPORT -float -glmc_vec2_dot(vec2 a, vec2 b) { - return glm_vec2_dot(a, b); -} - -CGLM_EXPORT -float -glmc_vec2_cross(vec2 a, vec2 b) { - return glm_vec2_cross(a, b); -} - -CGLM_EXPORT -float -glmc_vec2_norm2(vec2 v) { - return glm_vec2_norm2(v); -} - -CGLM_EXPORT -float -glmc_vec2_norm(vec2 v) { - return glm_vec2_norm(v); -} - -CGLM_EXPORT -void -glmc_vec2_add(vec2 a, vec2 b, vec2 dest) { - glm_vec2_add(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_adds(vec2 v, float s, vec2 dest) { - glm_vec2_adds(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_sub(vec2 a, vec2 b, vec2 dest) { - glm_vec2_sub(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_subs(vec2 v, float s, vec2 dest) { - glm_vec2_subs(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_mul(vec2 a, vec2 b, vec2 dest) { - glm_vec2_mul(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_scale(vec2 v, float s, vec2 dest) { - glm_vec2_scale(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_scale_as(vec2 v, float s, vec2 dest) { - glm_vec2_scale_as(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_div(vec2 a, vec2 b, vec2 dest) { - glm_vec2_div(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_divs(vec2 v, float s, vec2 dest) { - glm_vec2_divs(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_addadd(vec2 a, vec2 b, vec2 dest) { - glm_vec2_addadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_subadd(vec2 a, vec2 b, vec2 dest) { - glm_vec2_subadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_muladd(vec2 a, vec2 b, vec2 dest) { - glm_vec2_muladd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_muladds(vec2 a, float s, vec2 dest) { - glm_vec2_muladds(a, s, dest); -} - -CGLM_EXPORT -void -glmc_vec2_maxadd(vec2 a, vec2 b, vec2 dest) { - glm_vec2_maxadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest) { - glm_vec2_minadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_negate_to(vec2 v, vec2 dest) { - glm_vec2_negate_to(v, dest); -} - -CGLM_EXPORT -void -glmc_vec2_negate(vec2 v) { - glm_vec2_negate(v); -} - -CGLM_EXPORT -void -glmc_vec2_normalize(vec2 v) { - glm_vec2_normalize(v); -} - -CGLM_EXPORT -void -glmc_vec2_normalize_to(vec2 v, vec2 dest) { - glm_vec2_normalize_to(v, dest); -} - -CGLM_EXPORT -void -glmc_vec2_rotate(vec2 v, float angle, vec2 dest) { - glm_vec2_rotate(v, angle, dest); -} - -CGLM_EXPORT -float -glmc_vec2_distance2(vec2 a, vec2 b) { - return glm_vec2_distance2(a, b); -} - -CGLM_EXPORT -float -glmc_vec2_distance(vec2 a, vec2 b) { - return glm_vec2_distance(a, b); -} - -CGLM_EXPORT -void -glmc_vec2_maxv(vec2 a, vec2 b, vec2 dest) { - glm_vec2_maxv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_minv(vec2 a, vec2 b, vec2 dest) { - glm_vec2_minv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec2_clamp(vec2 v, float minval, float maxval) { - glm_vec2_clamp(v, minval, maxval); -} - -CGLM_EXPORT -void -glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) { - glm_vec2_lerp(from, to, t, dest); -} diff --git a/src/vec3.c b/src/vec3.c deleted file mode 100644 index a09a2efad..000000000 --- a/src/vec3.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_vec3(vec4 v4, vec3 dest) { - glm_vec3(v4, dest); -} - -CGLM_EXPORT -void -glmc_vec3_copy(vec3 a, vec3 dest) { - glm_vec3_copy(a, dest); -} - -CGLM_EXPORT -void -glmc_vec3_zero(vec3 v) { - glm_vec3_zero(v); -} - -CGLM_EXPORT -void -glmc_vec3_one(vec3 v) { - glm_vec3_one(v); -} - -CGLM_EXPORT -float -glmc_vec3_dot(vec3 a, vec3 b) { - return glm_vec3_dot(a, b); -} - -CGLM_EXPORT -void -glmc_vec3_cross(vec3 a, vec3 b, vec3 dest) { - glm_vec3_cross(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest) { - glm_vec3_crossn(a, b, dest); -} - -CGLM_EXPORT -float -glmc_vec3_norm(vec3 v) { - return glm_vec3_norm(v); -} - -CGLM_EXPORT -void -glmc_vec3_normalize_to(vec3 v, vec3 dest) { - glm_vec3_normalize_to(v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_normalize(vec3 v) { - glm_vec3_normalize(v); -} - -CGLM_EXPORT -float -glmc_vec3_norm2(vec3 v) { - return glm_vec3_norm2(v); -} - -CGLM_EXPORT -float -glmc_vec3_norm_one(vec3 v) { - return glm_vec3_norm_one(v); -} - -CGLM_EXPORT -float -glmc_vec3_norm_inf(vec3 v) { - return glm_vec3_norm_inf(v); -} - -CGLM_EXPORT -void -glmc_vec3_add(vec3 a, vec3 b, vec3 dest) { - glm_vec3_add(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_adds(vec3 v, float s, vec3 dest) { - glm_vec3_adds(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_sub(vec3 a, vec3 b, vec3 dest) { - glm_vec3_sub(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_subs(vec3 v, float s, vec3 dest) { - glm_vec3_subs(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_mul(vec3 a, vec3 b, vec3 d) { - glm_vec3_mul(a, b, d); -} - -CGLM_EXPORT -void -glmc_vec3_scale(vec3 v, float s, vec3 dest) { - glm_vec3_scale(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_scale_as(vec3 v, float s, vec3 dest) { - glm_vec3_scale_as(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_div(vec3 a, vec3 b, vec3 dest) { - glm_vec3_div(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_divs(vec3 a, float s, vec3 dest) { - glm_vec3_divs(a, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest) { - glm_vec3_addadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest) { - glm_vec3_subadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest) { - glm_vec3_muladd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_muladds(vec3 a, float s, vec3 dest) { - glm_vec3_muladds(a, s, dest); -} - -CGLM_EXPORT -void -glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { - glm_vec3_maxadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) { - glm_vec3_minadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_negate(vec3 v) { - glm_vec3_negate(v); -} - -CGLM_EXPORT -void -glmc_vec3_negate_to(vec3 v, vec3 dest) { - glm_vec3_negate_to(v, dest); -} - -CGLM_EXPORT -float -glmc_vec3_angle(vec3 a, vec3 b) { - return glm_vec3_angle(a, b); -} - -CGLM_EXPORT -void -glmc_vec3_rotate(vec3 v, float angle, vec3 axis) { - glm_vec3_rotate(v, angle, axis); -} - -CGLM_EXPORT -void -glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { - glm_vec3_rotate_m4(m, v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { - glm_vec3_rotate_m3(m, v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_proj(vec3 a, vec3 b, vec3 dest) { - glm_vec3_proj(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_center(vec3 a, vec3 b, vec3 dest) { - glm_vec3_center(a, b, dest); -} - -CGLM_EXPORT -float -glmc_vec3_distance(vec3 a, vec3 b) { - return glm_vec3_distance(a, b); -} - -CGLM_EXPORT -float -glmc_vec3_distance2(vec3 a, vec3 b) { - return glm_vec3_distance2(a, b); -} - -CGLM_EXPORT -void -glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest) { - glm_vec3_maxv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_minv(vec3 a, vec3 b, vec3 dest) { - glm_vec3_minv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec3_clamp(vec3 v, float minVal, float maxVal) { - glm_vec3_clamp(v, minVal, maxVal); -} - -CGLM_EXPORT -void -glmc_vec3_ortho(vec3 v, vec3 dest) { - glm_vec3_ortho(v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { - glm_vec3_lerp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec3_lerpc(vec3 from, vec3 to, float t, vec3 dest) { - glm_vec3_lerpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec3_step_uni(float edge, vec3 x, vec3 dest) { - glm_vec3_step_uni(edge, x, dest); -} - -CGLM_EXPORT -void -glmc_vec3_step(vec3 edge, vec3 x, vec3 dest) { - glm_vec3_step(edge, x, dest); -} - -CGLM_EXPORT -void -glmc_vec3_smoothstep_uni(float edge0, float edge1, vec3 x, vec3 dest) { - glm_vec3_smoothstep_uni(edge0, edge1, x, dest); -} - -CGLM_EXPORT -void -glmc_vec3_smoothstep(vec3 edge0, vec3 edge1, vec3 x, vec3 dest) { - glm_vec3_smoothstep(edge0, edge1, x, dest); -} - -CGLM_EXPORT -void -glmc_vec3_smoothinterp(vec3 from, vec3 to, float t, vec3 dest) { - glm_vec3_smoothinterp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest) { - glm_vec3_smoothinterpc(from, to, t, dest); -} - -/* ext */ - -CGLM_EXPORT -void -glmc_vec3_mulv(vec3 a, vec3 b, vec3 d) { - glm_vec3_mulv(a, b, d); -} - -CGLM_EXPORT -void -glmc_vec3_broadcast(float val, vec3 d) { - glm_vec3_broadcast(val, d); -} - -CGLM_EXPORT -void -glmc_vec3_fill(vec3 v, float val) { - glm_vec3_fill(v, val); -} - -CGLM_EXPORT -bool -glmc_vec3_eq(vec3 v, float val) { - return glm_vec3_eq(v, val); -} - -CGLM_EXPORT -bool -glmc_vec3_eq_eps(vec3 v, float val) { - return glm_vec3_eq_eps(v, val); -} - -CGLM_EXPORT -bool -glmc_vec3_eq_all(vec3 v) { - return glm_vec3_eq_all(v); -} - -CGLM_EXPORT -bool -glmc_vec3_eqv(vec3 a, vec3 b) { - return glm_vec3_eqv(a, b); -} - -CGLM_EXPORT -bool -glmc_vec3_eqv_eps(vec3 a, vec3 b) { - return glm_vec3_eqv_eps(a, b); -} - -CGLM_EXPORT -float -glmc_vec3_max(vec3 v) { - return glm_vec3_max(v); -} - -CGLM_EXPORT -float -glmc_vec3_min(vec3 v) { - return glm_vec3_min(v); -} - -CGLM_EXPORT -bool -glmc_vec3_isnan(vec3 v) { - return glm_vec3_isnan(v); -} - -CGLM_EXPORT -bool -glmc_vec3_isinf(vec3 v) { - return glm_vec3_isinf(v); -} - -CGLM_EXPORT -bool -glmc_vec3_isvalid(vec3 v) { - return glm_vec3_isvalid(v); -} - -CGLM_EXPORT -void -glmc_vec3_sign(vec3 v, vec3 dest) { - glm_vec3_sign(v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_abs(vec3 v, vec3 dest) { - glm_vec3_abs(v, dest); -} - -CGLM_EXPORT -void -glmc_vec3_fract(vec3 v, vec3 dest) { - glm_vec3_fract(v, dest); -} - -CGLM_EXPORT -float -glmc_vec3_hadd(vec3 v) { - return glm_vec3_hadd(v); -} - -CGLM_EXPORT -void -glmc_vec3_sqrt(vec3 v, vec3 dest) { - glm_vec3_sqrt(v, dest); -} diff --git a/src/vec4.c b/src/vec4.c deleted file mode 100644 index 60c3a2517..000000000 --- a/src/vec4.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (c), Recep Aslantas. - * - * MIT License (MIT), http://opensource.org/licenses/MIT - * Full license can be found in the LICENSE file - */ - -#include "../include/cglm/cglm.h" -#include "../include/cglm/call.h" - -CGLM_EXPORT -void -glmc_vec4(vec3 v3, float last, vec4 dest) { - glm_vec4(v3, last, dest); -} - -CGLM_EXPORT -void -glmc_vec4_zero(vec4 v) { - glm_vec4_zero(v); -} - -CGLM_EXPORT -void -glmc_vec4_one(vec4 v) { - glm_vec4_one(v); -} - -CGLM_EXPORT -void -glmc_vec4_copy3(vec4 v, vec3 dest) { - glm_vec4_copy3(v, dest); -} - -CGLM_EXPORT -void -glmc_vec4_copy(vec4 v, vec4 dest) { - glm_vec4_copy(v, dest); -} - -CGLM_EXPORT -void -glmc_vec4_ucopy(vec4 v, vec4 dest) { - glm_vec4_ucopy(v, dest); -} - -CGLM_EXPORT -float -glmc_vec4_dot(vec4 a, vec4 b) { - return glm_vec4_dot(a, b); -} - -CGLM_EXPORT -float -glmc_vec4_norm(vec4 v) { - return glm_vec4_norm(v); -} - -CGLM_EXPORT -void -glmc_vec4_normalize_to(vec4 v, vec4 dest) { - glm_vec4_normalize_to(v, dest); -} - -CGLM_EXPORT -void -glmc_vec4_normalize(vec4 v) { - glm_vec4_normalize(v); -} - -CGLM_EXPORT -float -glmc_vec4_norm2(vec4 v) { - return glm_vec4_norm2(v); -} - -CGLM_EXPORT -float -glmc_vec4_norm_one(vec4 v) { - return glm_vec4_norm_one(v); -} - -CGLM_EXPORT -float -glmc_vec4_norm_inf(vec4 v) { - return glm_vec4_norm_inf(v); -} - -CGLM_EXPORT -void -glmc_vec4_add(vec4 a, vec4 b, vec4 dest) { - glm_vec4_add(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_adds(vec4 v, float s, vec4 dest) { - glm_vec4_adds(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_sub(vec4 a, vec4 b, vec4 dest) { - glm_vec4_sub(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_subs(vec4 v, float s, vec4 dest) { - glm_vec4_subs(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_mul(vec4 a, vec4 b, vec4 d) { - glm_vec4_mul(a, b, d); -} - -CGLM_EXPORT -void -glmc_vec4_scale(vec4 v, float s, vec4 dest) { - glm_vec4_scale(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_scale_as(vec4 v, float s, vec4 dest) { - glm_vec4_scale_as(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_div(vec4 a, vec4 b, vec4 dest) { - glm_vec4_div(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_divs(vec4 v, float s, vec4 dest) { - glm_vec4_divs(v, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest) { - glm_vec4_addadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest) { - glm_vec4_subadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest) { - glm_vec4_muladd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_muladds(vec4 a, float s, vec4 dest) { - glm_vec4_muladds(a, s, dest); -} - -CGLM_EXPORT -void -glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { - glm_vec4_maxadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) { - glm_vec4_minadd(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_negate(vec4 v) { - glm_vec4_negate(v); -} - -CGLM_EXPORT -void -glmc_vec4_negate_to(vec4 v, vec4 dest) { - glm_vec4_negate_to(v, dest); -} - -CGLM_EXPORT -float -glmc_vec4_distance(vec4 a, vec4 b) { - return glm_vec4_distance(a, b); -} - -CGLM_EXPORT -float -glmc_vec4_distance2(vec4 a, vec4 b) { - return glm_vec4_distance2(a, b); -} - -CGLM_EXPORT -void -glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest) { - glm_vec4_maxv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_minv(vec4 a, vec4 b, vec4 dest) { - glm_vec4_minv(a, b, dest); -} - -CGLM_EXPORT -void -glmc_vec4_clamp(vec4 v, float minVal, float maxVal) { - glm_vec4_clamp(v, minVal, maxVal); -} - -CGLM_EXPORT -void -glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { - glm_vec4_lerp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest) { - glm_vec4_lerpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec4_step_uni(float edge, vec4 x, vec4 dest) { - glm_vec4_step_uni(edge, x, dest); -} - -CGLM_EXPORT -void -glmc_vec4_step(vec4 edge, vec4 x, vec4 dest) { - glm_vec4_step(edge, x, dest); -} - -CGLM_EXPORT -void -glmc_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest) { - glm_vec4_smoothstep_uni(edge0, edge1, x, dest); -} - -CGLM_EXPORT -void -glmc_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest) { - glm_vec4_smoothstep(edge0, edge1, x, dest); -} - -CGLM_EXPORT -void -glmc_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest) { - glm_vec4_smoothinterp(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest) { - glm_vec4_smoothinterpc(from, to, t, dest); -} - -CGLM_EXPORT -void -glmc_vec4_cubic(float s, vec4 dest) { - glm_vec4_cubic(s, dest); -} - -/* ext */ - -CGLM_EXPORT -void -glmc_vec4_mulv(vec4 a, vec4 b, vec4 d) { - glm_vec4_mulv(a, b, d); -} - -CGLM_EXPORT -void -glmc_vec4_broadcast(float val, vec4 d) { - glm_vec4_broadcast(val, d); -} - -CGLM_EXPORT -void -glmc_vec4_fill(vec4 v, float val) { - glm_vec4_fill(v, val); -} - -CGLM_EXPORT -bool -glmc_vec4_eq(vec4 v, float val) { - return glm_vec4_eq(v, val); -} - -CGLM_EXPORT -bool -glmc_vec4_eq_eps(vec4 v, float val) { - return glm_vec4_eq_eps(v, val); -} - -CGLM_EXPORT -bool -glmc_vec4_eq_all(vec4 v) { - return glm_vec4_eq_all(v); -} - -CGLM_EXPORT -bool -glmc_vec4_eqv(vec4 a, vec4 b) { - return glm_vec4_eqv(a, b); -} - -CGLM_EXPORT -bool -glmc_vec4_eqv_eps(vec4 a, vec4 b) { - return glm_vec4_eqv_eps(a, b); -} - -CGLM_EXPORT -float -glmc_vec4_max(vec4 v) { - return glm_vec4_max(v); -} - -CGLM_EXPORT -float -glmc_vec4_min(vec4 v) { - return glm_vec4_min(v); -} - -CGLM_EXPORT -bool -glmc_vec4_isnan(vec4 v) { - return glm_vec4_isnan(v); -} - -CGLM_EXPORT -bool -glmc_vec4_isinf(vec4 v) { - return glm_vec4_isinf(v); -} - -CGLM_EXPORT -bool -glmc_vec4_isvalid(vec4 v) { - return glm_vec4_isvalid(v); -} - -CGLM_EXPORT -void -glmc_vec4_sign(vec4 v, vec4 dest) { - glm_vec4_sign(v, dest); -} - -CGLM_EXPORT -void -glmc_vec4_abs(vec4 v, vec4 dest) { - glm_vec4_abs(v, dest); -} - -CGLM_EXPORT -void -glmc_vec4_fract(vec4 v, vec4 dest) { - glm_vec4_fract(v, dest); -} - -CGLM_EXPORT -float -glmc_vec4_hadd(vec4 v) { - return glm_vec4_hadd(v); -} - -CGLM_EXPORT -void -glmc_vec4_sqrt(vec4 v, vec4 dest) { - glm_vec4_sqrt(v, dest); -} diff --git a/test/include/common.h b/test/include/common.h index 3c32b9f95..ec9372803 100644 --- a/test/include/common.h +++ b/test/include/common.h @@ -14,7 +14,6 @@ #include #include -#include typedef struct test_status_t { const char *msg; diff --git a/test/src/test_euler.c b/test/src/test_euler.c index b71e0f049..55412efa6 100644 --- a/test/src/test_euler.c +++ b/test/src/test_euler.c @@ -18,13 +18,13 @@ TEST_IMPL(euler) { glm_euler_xyz(inAngles, rot1); /* extract angles */ - glmc_euler_angles(rot1, outAngles); + glm_euler_angles(rot1, outAngles); /* angles must be equal in that range */ ASSERTIFY(test_assert_vec3_eq(inAngles, outAngles)) /* matrices must be equal */ - glmc_euler_xyz(outAngles, rot2); + glm_euler_xyz(outAngles, rot2); ASSERTIFY(test_assert_mat4_eq(rot1, rot2)) /* change range */ @@ -33,12 +33,12 @@ TEST_IMPL(euler) { inAngles[2] = glm_rad(181.0f); /* Z angle */ glm_euler_xyz(inAngles, rot1); - glmc_euler_angles(rot1, outAngles); + glm_euler_angles(rot1, outAngles); /* angles may not be equal but matrices MUST! */ /* matrices must be equal */ - glmc_euler_xyz(outAngles, rot2); + glm_euler_xyz(outAngles, rot2); ASSERTIFY(test_assert_mat4_eq(rot1, rot2)) TEST_SUCCESS diff --git a/test/src/test_mat4.h b/test/src/test_mat4.h index d42e4570e..cff4b4fdf 100644 --- a/test/src/test_mat4.h +++ b/test/src/test_mat4.h @@ -394,8 +394,8 @@ TEST_IMPL(GLM_PREFIX, mat4_inv_precise) { test_rand_mat4(m4); test_rand_mat4(m5); - glmc_mat4_inv_precise(m4, m5); - glmc_mat4_inv_precise(m5, m6); + glm_mat4_inv_precise(m4, m5); + glm_mat4_inv_precise(m5, m6); ASSERTIFY(test_assert_mat4_eq(m4, m6)) } diff --git a/test/src/test_vec3.h b/test/src/test_vec3.h index 4fa1d2582..51b3e0de3 100644 --- a/test/src/test_vec3.h +++ b/test/src/test_vec3.h @@ -130,7 +130,7 @@ TEST_IMPL(MACRO_glm_vec3_flipsign) { v3 = {-13.0f, 12.0f, -11.0f}; glm_vec3_flipsign(v1); - glmc_vec3_flipsign(v2); + glm_vec3_flipsign(v2); ASSERTIFY(test_assert_vec3_eq(v1, v3)) ASSERTIFY(test_assert_vec3_eq(v2, v3)) @@ -144,7 +144,7 @@ TEST_IMPL(MACRO_glm_vec3_flipsign_to) { v3, v4; glm_vec3_flipsign_to(v1, v3); - glmc_vec3_flipsign_to(v1, v4); + glm_vec3_flipsign_to(v1, v4); ASSERTIFY(test_assert_vec3_eq(v2, v3)) ASSERTIFY(test_assert_vec3_eq(v2, v4)) @@ -158,7 +158,7 @@ TEST_IMPL(MACRO_glm_vec3_inv) { v3 = {-13.0f, 12.0f, -11.0f}; glm_vec3_inv(v1); - glmc_vec3_inv(v2); + glm_vec3_inv(v2); ASSERTIFY(test_assert_vec3_eq(v1, v3)) ASSERTIFY(test_assert_vec3_eq(v2, v3)) @@ -172,7 +172,7 @@ TEST_IMPL(MACRO_glm_vec3_inv_to) { v3, v4; glm_vec3_inv_to(v1, v3); - glmc_vec3_inv_to(v1, v4); + glm_vec3_inv_to(v1, v4); ASSERTIFY(test_assert_vec3_eq(v3, v4)) ASSERTIFY(test_assert_vec3_eq(v2, v3)) @@ -186,7 +186,7 @@ TEST_IMPL(MACRO_glm_vec3_mulv) { v3, v4; glm_vec3_mulv(v1, v2, v3); - glmc_vec3_mulv(v1, v2, v4); + glm_vec3_mulv(v1, v2, v4); ASSERTIFY(test_assert_vec3_eq(v3, v4)) diff --git a/test/src/test_vec4.h b/test/src/test_vec4.h index abb882f9f..d69bcad9c 100644 --- a/test/src/test_vec4.h +++ b/test/src/test_vec4.h @@ -92,7 +92,7 @@ TEST_IMPL(MACRO_glm_vec4_flipsign) { v3 = {-13.0f, 12.0f, -11.0f, -56.0f}; glm_vec4_flipsign(v1); - glmc_vec4_flipsign(v2); + glm_vec4_flipsign(v2); ASSERTIFY(test_assert_vec4_eq(v1, v3)) ASSERTIFY(test_assert_vec4_eq(v2, v3)) @@ -106,7 +106,7 @@ TEST_IMPL(MACRO_glm_vec4_flipsign_to) { v3, v4; glm_vec4_flipsign_to(v1, v3); - glmc_vec4_flipsign_to(v1, v4); + glm_vec4_flipsign_to(v1, v4); ASSERTIFY(test_assert_vec4_eq(v2, v3)) ASSERTIFY(test_assert_vec4_eq(v2, v4)) @@ -120,7 +120,7 @@ TEST_IMPL(MACRO_glm_vec4_inv) { v3 = {-13.0f, 12.0f, -11.0f, -56.0f}; glm_vec4_inv(v1); - glmc_vec4_inv(v2); + glm_vec4_inv(v2); ASSERTIFY(test_assert_vec4_eq(v1, v3)) ASSERTIFY(test_assert_vec4_eq(v2, v3)) @@ -134,7 +134,7 @@ TEST_IMPL(MACRO_glm_vec4_inv_to) { v3, v4; glm_vec4_inv_to(v1, v3); - glmc_vec4_inv_to(v1, v4); + glm_vec4_inv_to(v1, v4); ASSERTIFY(test_assert_vec4_eq(v3, v4)) ASSERTIFY(test_assert_vec4_eq(v2, v3)) @@ -148,7 +148,7 @@ TEST_IMPL(MACRO_glm_vec4_mulv) { v3, v4; glm_vec4_mulv(v1, v2, v3); - glmc_vec4_mulv(v1, v2, v4); + glm_vec4_mulv(v1, v2, v4); ASSERTIFY(test_assert_vec4_eq(v3, v4)) diff --git a/test/src/tests.c b/test/src/tests.c index ea9f9021a..d15120979 100644 --- a/test/src/tests.c +++ b/test/src/tests.c @@ -5,7 +5,7 @@ * Full license can be found in the LICENSE file */ -/* test inline */ +/* test inline or pre-compiled CGLM_LIB is defined */ /*---------------------------------------------------------------------------*/ @@ -28,26 +28,4 @@ #undef GLM #undef GLM_PREFIX -/* test pre-compiled */ -/*---------------------------------------------------------------------------*/ - -#define GLM_PREFIX glmc_ -#define GLM(X) (glmc_ ## X) - -#include "test_vec2.h" -#include "test_vec3.h" -#include "test_vec4.h" -#include "test_mat2.h" -#include "test_mat3.h" -#include "test_mat4.h" -#include "test_quat.h" -#include "test_project.h" -#include "test_plane.h" -#include "test_affine.h" -#include "test_affine_mat.h" -#include "test_ray.h" - -#undef GLM -#undef GLM_PREFIX - /*---------------------------------------------------------------------------*/ diff --git a/test/tests.h b/test/tests.h index 1ed75d865..6c091f9ab 100644 --- a/test/tests.h +++ b/test/tests.h @@ -21,10 +21,6 @@ TEST_DECLARE(glm_mul) TEST_DECLARE(glm_mul) TEST_DECLARE(glm_inv_tr) -TEST_DECLARE(glmc_mul) -TEST_DECLARE(glmc_mul_rot) -TEST_DECLARE(glmc_inv_tr) - /* affine */ TEST_DECLARE(glm_translate) TEST_DECLARE(glm_translate_to) @@ -48,28 +44,6 @@ TEST_DECLARE(glm_uniscaled) TEST_DECLARE(glm_decompose_rs) TEST_DECLARE(glm_decompose) -TEST_DECLARE(glmc_translate) -TEST_DECLARE(glmc_translate_to) -TEST_DECLARE(glmc_translate_x) -TEST_DECLARE(glmc_translate_y) -TEST_DECLARE(glmc_translate_z) -TEST_DECLARE(glmc_translate_make) -TEST_DECLARE(glmc_scale_to) -TEST_DECLARE(glmc_scale_make) -TEST_DECLARE(glmc_scale) -TEST_DECLARE(glmc_scale_uni) -TEST_DECLARE(glmc_rotate_x) -TEST_DECLARE(glmc_rotate_y) -TEST_DECLARE(glmc_rotate_z) -TEST_DECLARE(glmc_rotate_make) -TEST_DECLARE(glmc_rotate) -TEST_DECLARE(glmc_rotate_at) -TEST_DECLARE(glmc_rotate_atm) -TEST_DECLARE(glmc_decompose_scalev) -TEST_DECLARE(glmc_uniscaled) -TEST_DECLARE(glmc_decompose_rs) -TEST_DECLARE(glmc_decompose) - /* mat4 */ TEST_DECLARE(glm_mat4_ucopy) TEST_DECLARE(glm_mat4_copy) @@ -98,32 +72,6 @@ TEST_DECLARE(glm_mat4_swap_col) TEST_DECLARE(glm_mat4_swap_row) TEST_DECLARE(glm_mat4_rmc) -TEST_DECLARE(glmc_mat4_ucopy) -TEST_DECLARE(glmc_mat4_copy) -TEST_DECLARE(glmc_mat4_identity) -TEST_DECLARE(glmc_mat4_identity_array) -TEST_DECLARE(glmc_mat4_zero) -TEST_DECLARE(glmc_mat4_pick3) -TEST_DECLARE(glmc_mat4_pick3t) -TEST_DECLARE(glmc_mat4_ins3) -TEST_DECLARE(glmc_mat4_mul) -TEST_DECLARE(glmc_mat4_mulN) -TEST_DECLARE(glmc_mat4_mulv) -TEST_DECLARE(glmc_mat4_mulv3) -TEST_DECLARE(glmc_mat4_trace) -TEST_DECLARE(glmc_mat4_trace3) -TEST_DECLARE(glmc_mat4_quat) -TEST_DECLARE(glmc_mat4_transpose_to) -TEST_DECLARE(glmc_mat4_transpose) -TEST_DECLARE(glmc_mat4_scale_p) -TEST_DECLARE(glmc_mat4_scale) -TEST_DECLARE(glmc_mat4_det) -TEST_DECLARE(glmc_mat4_inv) -TEST_DECLARE(glmc_mat4_inv_fast) -TEST_DECLARE(glmc_mat4_swap_col) -TEST_DECLARE(glmc_mat4_swap_row) -TEST_DECLARE(glmc_mat4_rmc) - /* mat3 */ TEST_DECLARE(glm_mat3_copy) TEST_DECLARE(glm_mat3_identity) @@ -142,23 +90,6 @@ TEST_DECLARE(glm_mat3_swap_col) TEST_DECLARE(glm_mat3_swap_row) TEST_DECLARE(glm_mat3_rmc) -TEST_DECLARE(glmc_mat3_copy) -TEST_DECLARE(glmc_mat3_identity) -TEST_DECLARE(glmc_mat3_identity_array) -TEST_DECLARE(glmc_mat3_zero) -TEST_DECLARE(glmc_mat3_mul) -TEST_DECLARE(glmc_mat3_mulv) -TEST_DECLARE(glmc_mat3_trace) -TEST_DECLARE(glmc_mat3_quat) -TEST_DECLARE(glmc_mat3_transpose_to) -TEST_DECLARE(glmc_mat3_transpose) -TEST_DECLARE(glmc_mat3_scale) -TEST_DECLARE(glmc_mat3_det) -TEST_DECLARE(glmc_mat3_inv) -TEST_DECLARE(glmc_mat3_swap_col) -TEST_DECLARE(glmc_mat3_swap_row) -TEST_DECLARE(glmc_mat3_rmc) - TEST_DECLARE(MACRO_GLM_MAT2_IDENTITY_INIT) TEST_DECLARE(MACRO_GLM_MAT2_ZERO_INIT) TEST_DECLARE(MACRO_GLM_MAT2_IDENTITY) @@ -179,22 +110,6 @@ TEST_DECLARE(glm_mat2_swap_col) TEST_DECLARE(glm_mat2_swap_row) TEST_DECLARE(glm_mat2_rmc) -TEST_DECLARE(glmc_mat2_copy) -TEST_DECLARE(glmc_mat2_identity) -TEST_DECLARE(glmc_mat2_identity_array) -TEST_DECLARE(glmc_mat2_zero) -TEST_DECLARE(glmc_mat2_mul) -TEST_DECLARE(glmc_mat2_transpose_to) -TEST_DECLARE(glmc_mat2_transpose) -TEST_DECLARE(glmc_mat2_mulv) -TEST_DECLARE(glmc_mat2_trace) -TEST_DECLARE(glmc_mat2_scale) -TEST_DECLARE(glmc_mat2_det) -TEST_DECLARE(glmc_mat2_inv) -TEST_DECLARE(glmc_mat2_swap_col) -TEST_DECLARE(glmc_mat2_swap_row) -TEST_DECLARE(glmc_mat2_rmc) - /* camera */ TEST_DECLARE(camera_lookat) TEST_DECLARE(camera_decomp) @@ -204,13 +119,8 @@ TEST_DECLARE(glm_unprojecti) TEST_DECLARE(glm_unproject) TEST_DECLARE(glm_project) -TEST_DECLARE(glmc_unprojecti) -TEST_DECLARE(glmc_unproject) -TEST_DECLARE(glmc_project) - /* plane */ TEST_DECLARE(glm_plane_normalize) -TEST_DECLARE(glmc_plane_normalize) /* utils */ TEST_DECLARE(clamp) @@ -220,7 +130,6 @@ TEST_DECLARE(euler) /* ray */ TEST_DECLARE(glm_ray_triangle) -TEST_DECLARE(glmc_ray_triangle) /* quat */ TEST_DECLARE(MACRO_GLM_QUAT_IDENTITY_INIT) @@ -262,42 +171,6 @@ TEST_DECLARE(glm_quat_rotate) TEST_DECLARE(glm_quat_rotate_at) TEST_DECLARE(glm_quat_rotate_atm) -TEST_DECLARE(glmc_quat_identity) -TEST_DECLARE(glmc_quat_identity_array) -TEST_DECLARE(glmc_quat_init) -TEST_DECLARE(glmc_quatv) -TEST_DECLARE(glmc_quat) -TEST_DECLARE(glmc_quat_copy) -TEST_DECLARE(glmc_quat_norm) -TEST_DECLARE(glmc_quat_normalize_to) -TEST_DECLARE(glmc_quat_normalize) -TEST_DECLARE(glmc_quat_dot) -TEST_DECLARE(glmc_quat_conjugate) -TEST_DECLARE(glmc_quat_inv) -TEST_DECLARE(glmc_quat_add) -TEST_DECLARE(glmc_quat_sub) -TEST_DECLARE(glmc_quat_real) -TEST_DECLARE(glmc_quat_imag) -TEST_DECLARE(glmc_quat_imagn) -TEST_DECLARE(glmc_quat_imaglen) -TEST_DECLARE(glmc_quat_angle) -TEST_DECLARE(glmc_quat_axis) -TEST_DECLARE(glmc_quat_mul) -TEST_DECLARE(glmc_quat_mat4) -TEST_DECLARE(glmc_quat_mat4t) -TEST_DECLARE(glmc_quat_mat3) -TEST_DECLARE(glmc_quat_mat3t) -TEST_DECLARE(glmc_quat_lerp) -TEST_DECLARE(glmc_quat_lerpc) -TEST_DECLARE(glmc_quat_slerp) -TEST_DECLARE(glmc_quat_look) -TEST_DECLARE(glmc_quat_for) -TEST_DECLARE(glmc_quat_forp) -TEST_DECLARE(glmc_quat_rotatev) -TEST_DECLARE(glmc_quat_rotate) -TEST_DECLARE(glmc_quat_rotate_at) -TEST_DECLARE(glmc_quat_rotate_atm) - /* bezier */ TEST_DECLARE(bezier) @@ -344,42 +217,6 @@ TEST_DECLARE(glm_vec2_minv) TEST_DECLARE(glm_vec2_clamp) TEST_DECLARE(glm_vec2_lerp) - -TEST_DECLARE(glmc_vec2) -TEST_DECLARE(glmc_vec2_copy) -TEST_DECLARE(glmc_vec2_zero) -TEST_DECLARE(glmc_vec2_one) -TEST_DECLARE(glmc_vec2_dot) -TEST_DECLARE(glmc_vec2_cross) -TEST_DECLARE(glmc_vec2_norm2) -TEST_DECLARE(glmc_vec2_norm) -TEST_DECLARE(glmc_vec2_add) -TEST_DECLARE(glmc_vec2_adds) -TEST_DECLARE(glmc_vec2_sub) -TEST_DECLARE(glmc_vec2_subs) -TEST_DECLARE(glmc_vec2_mul) -TEST_DECLARE(glmc_vec2_scale) -TEST_DECLARE(glmc_vec2_scale_as) -TEST_DECLARE(glmc_vec2_div) -TEST_DECLARE(glmc_vec2_divs) -TEST_DECLARE(glmc_vec2_addadd) -TEST_DECLARE(glmc_vec2_subadd) -TEST_DECLARE(glmc_vec2_muladd) -TEST_DECLARE(glmc_vec2_muladds) -TEST_DECLARE(glmc_vec2_maxadd) -TEST_DECLARE(glmc_vec2_minadd) -TEST_DECLARE(glmc_vec2_negate_to) -TEST_DECLARE(glmc_vec2_negate) -TEST_DECLARE(glmc_vec2_normalize) -TEST_DECLARE(glmc_vec2_normalize_to) -TEST_DECLARE(glmc_vec2_rotate) -TEST_DECLARE(glmc_vec2_distance2) -TEST_DECLARE(glmc_vec2_distance) -TEST_DECLARE(glmc_vec2_maxv) -TEST_DECLARE(glmc_vec2_minv) -TEST_DECLARE(glmc_vec2_clamp) -TEST_DECLARE(glmc_vec2_lerp) - /* vec3 */ TEST_DECLARE(MACRO_GLM_VEC3_ONE_INIT) TEST_DECLARE(MACRO_GLM_VEC3_ZERO_INIT) @@ -475,75 +312,6 @@ TEST_DECLARE(glm_vec3_fract) TEST_DECLARE(glm_vec3_hadd) TEST_DECLARE(glm_vec3_sqrt) -TEST_DECLARE(glmc_vec3) -TEST_DECLARE(glmc_vec3_copy) -TEST_DECLARE(glmc_vec3_zero) -TEST_DECLARE(glmc_vec3_one) -TEST_DECLARE(glmc_vec3_dot) -TEST_DECLARE(glmc_vec3_norm2) -TEST_DECLARE(glmc_vec3_norm) -TEST_DECLARE(glmc_vec3_norm_one) -TEST_DECLARE(glmc_vec3_norm_inf) -TEST_DECLARE(glmc_vec3_add) -TEST_DECLARE(glmc_vec3_adds) -TEST_DECLARE(glmc_vec3_sub) -TEST_DECLARE(glmc_vec3_subs) -TEST_DECLARE(glmc_vec3_mul) -TEST_DECLARE(glmc_vec3_scale) -TEST_DECLARE(glmc_vec3_scale_as) -TEST_DECLARE(glmc_vec3_div) -TEST_DECLARE(glmc_vec3_divs) -TEST_DECLARE(glmc_vec3_addadd) -TEST_DECLARE(glmc_vec3_subadd) -TEST_DECLARE(glmc_vec3_muladd) -TEST_DECLARE(glmc_vec3_muladds) -TEST_DECLARE(glmc_vec3_maxadd) -TEST_DECLARE(glmc_vec3_minadd) -TEST_DECLARE(glmc_vec3_negate_to) -TEST_DECLARE(glmc_vec3_negate) -TEST_DECLARE(glmc_vec3_normalize) -TEST_DECLARE(glmc_vec3_normalize_to) -TEST_DECLARE(glmc_vec3_cross) -TEST_DECLARE(glmc_vec3_crossn) -TEST_DECLARE(glmc_vec3_angle) -TEST_DECLARE(glmc_vec3_rotate) -TEST_DECLARE(glmc_vec3_rotate_m4) -TEST_DECLARE(glmc_vec3_rotate_m3) -TEST_DECLARE(glmc_vec3_proj) -TEST_DECLARE(glmc_vec3_center) -TEST_DECLARE(glmc_vec3_distance2) -TEST_DECLARE(glmc_vec3_distance) -TEST_DECLARE(glmc_vec3_maxv) -TEST_DECLARE(glmc_vec3_minv) -TEST_DECLARE(glmc_vec3_ortho) -TEST_DECLARE(glmc_vec3_clamp) -TEST_DECLARE(glmc_vec3_mix) -TEST_DECLARE(glmc_vec3_mixc) -TEST_DECLARE(glmc_vec3_step_uni) -TEST_DECLARE(glmc_vec3_step) -TEST_DECLARE(glmc_vec3_smoothstep_uni) -TEST_DECLARE(glmc_vec3_smoothstep) -TEST_DECLARE(glmc_vec3_smoothinterp) -TEST_DECLARE(glmc_vec3_smoothinterpc) -TEST_DECLARE(glmc_vec3_swizzle) -TEST_DECLARE(glmc_vec3_broadcast) -TEST_DECLARE(glmc_vec3_fill) -TEST_DECLARE(glmc_vec3_eq) -TEST_DECLARE(glmc_vec3_eq_eps) -TEST_DECLARE(glmc_vec3_eq_all) -TEST_DECLARE(glmc_vec3_eqv) -TEST_DECLARE(glmc_vec3_eqv_eps) -TEST_DECLARE(glmc_vec3_max) -TEST_DECLARE(glmc_vec3_min) -TEST_DECLARE(glmc_vec3_isnan) -TEST_DECLARE(glmc_vec3_isinf) -TEST_DECLARE(glmc_vec3_isvalid) -TEST_DECLARE(glmc_vec3_sign) -TEST_DECLARE(glmc_vec3_abs) -TEST_DECLARE(glmc_vec3_fract) -TEST_DECLARE(glmc_vec3_hadd) -TEST_DECLARE(glmc_vec3_sqrt) - /* vec4 */ TEST_DECLARE(MACRO_GLM_VEC4_ONE_INIT) @@ -626,71 +394,6 @@ TEST_DECLARE(glm_vec4_fract) TEST_DECLARE(glm_vec4_hadd) TEST_DECLARE(glm_vec4_sqrt) -TEST_DECLARE(glmc_vec4) -TEST_DECLARE(glmc_vec4_copy3) -TEST_DECLARE(glmc_vec4_copy) -TEST_DECLARE(glmc_vec4_ucopy) -TEST_DECLARE(glmc_vec4_zero) -TEST_DECLARE(glmc_vec4_one) -TEST_DECLARE(glmc_vec4_dot) -TEST_DECLARE(glmc_vec4_norm2) -TEST_DECLARE(glmc_vec4_norm) -TEST_DECLARE(glmc_vec4_norm_one) -TEST_DECLARE(glmc_vec4_norm_inf) -TEST_DECLARE(glmc_vec4_add) -TEST_DECLARE(glmc_vec4_adds) -TEST_DECLARE(glmc_vec4_sub) -TEST_DECLARE(glmc_vec4_subs) -TEST_DECLARE(glmc_vec4_mul) -TEST_DECLARE(glmc_vec4_scale) -TEST_DECLARE(glmc_vec4_scale_as) -TEST_DECLARE(glmc_vec4_div) -TEST_DECLARE(glmc_vec4_divs) -TEST_DECLARE(glmc_vec4_addadd) -TEST_DECLARE(glmc_vec4_subadd) -TEST_DECLARE(glmc_vec4_muladd) -TEST_DECLARE(glmc_vec4_muladds) -TEST_DECLARE(glmc_vec4_maxadd) -TEST_DECLARE(glmc_vec4_minadd) -TEST_DECLARE(glmc_vec4_negate_to) -TEST_DECLARE(glmc_vec4_negate) -TEST_DECLARE(glmc_vec4_normalize) -TEST_DECLARE(glmc_vec4_normalize_to) -TEST_DECLARE(glmc_vec4_distance2) -TEST_DECLARE(glmc_vec4_distance) -TEST_DECLARE(glmc_vec4_maxv) -TEST_DECLARE(glmc_vec4_minv) -TEST_DECLARE(glmc_vec4_clamp) -TEST_DECLARE(glmc_vec4_lerp) -TEST_DECLARE(glmc_vec4_lerpc) -TEST_DECLARE(glmc_vec4_mix) -TEST_DECLARE(glmc_vec4_mixc) -TEST_DECLARE(glmc_vec4_step_uni) -TEST_DECLARE(glmc_vec4_step) -TEST_DECLARE(glmc_vec4_smoothstep_uni) -TEST_DECLARE(glmc_vec4_smoothstep) -TEST_DECLARE(glmc_vec4_smoothinterp) -TEST_DECLARE(glmc_vec4_smoothinterpc) -TEST_DECLARE(glmc_vec4_cubic) -TEST_DECLARE(glmc_vec4_swizzle) -TEST_DECLARE(glmc_vec4_broadcast) -TEST_DECLARE(glmc_vec4_fill) -TEST_DECLARE(glmc_vec4_eq) -TEST_DECLARE(glmc_vec4_eq_eps) -TEST_DECLARE(glmc_vec4_eq_all) -TEST_DECLARE(glmc_vec4_eqv) -TEST_DECLARE(glmc_vec4_eqv_eps) -TEST_DECLARE(glmc_vec4_max) -TEST_DECLARE(glmc_vec4_min) -TEST_DECLARE(glmc_vec4_isnan) -TEST_DECLARE(glmc_vec4_isinf) -TEST_DECLARE(glmc_vec4_isvalid) -TEST_DECLARE(glmc_vec4_sign) -TEST_DECLARE(glmc_vec4_abs) -TEST_DECLARE(glmc_vec4_fract) -TEST_DECLARE(glmc_vec4_hadd) -TEST_DECLARE(glmc_vec4_sqrt) - /* structs */ TEST_DECLARE(mat3s_identity_init) @@ -712,10 +415,6 @@ TEST_LIST { TEST_ENTRY(glm_mul) TEST_ENTRY(glm_inv_tr) - TEST_ENTRY(glmc_mul) - TEST_ENTRY(glmc_mul_rot) - TEST_ENTRY(glmc_inv_tr) - /* affine */ TEST_ENTRY(glm_translate) TEST_ENTRY(glm_translate_to) @@ -739,28 +438,6 @@ TEST_LIST { TEST_ENTRY(glm_decompose_rs) TEST_ENTRY(glm_decompose) - TEST_ENTRY(glmc_translate) - TEST_ENTRY(glmc_translate_to) - TEST_ENTRY(glmc_translate_x) - TEST_ENTRY(glmc_translate_y) - TEST_ENTRY(glmc_translate_z) - TEST_ENTRY(glmc_translate_make) - TEST_ENTRY(glmc_scale_to) - TEST_ENTRY(glmc_scale_make) - TEST_ENTRY(glmc_scale) - TEST_ENTRY(glmc_scale_uni) - TEST_ENTRY(glmc_rotate_x) - TEST_ENTRY(glmc_rotate_y) - TEST_ENTRY(glmc_rotate_z) - TEST_ENTRY(glmc_rotate_make) - TEST_ENTRY(glmc_rotate) - TEST_ENTRY(glmc_rotate_at) - TEST_ENTRY(glmc_rotate_atm) - TEST_ENTRY(glmc_decompose_scalev) - TEST_ENTRY(glmc_uniscaled) - TEST_ENTRY(glmc_decompose_rs) - TEST_ENTRY(glmc_decompose) - /* mat4 */ TEST_ENTRY(glm_mat4_ucopy) TEST_ENTRY(glm_mat4_copy) @@ -789,32 +466,6 @@ TEST_LIST { TEST_ENTRY(glm_mat4_swap_row) TEST_ENTRY(glm_mat4_rmc) - TEST_ENTRY(glmc_mat4_ucopy) - TEST_ENTRY(glmc_mat4_copy) - TEST_ENTRY(glmc_mat4_identity) - TEST_ENTRY(glmc_mat4_identity_array) - TEST_ENTRY(glmc_mat4_zero) - TEST_ENTRY(glmc_mat4_pick3) - TEST_ENTRY(glmc_mat4_pick3t) - TEST_ENTRY(glmc_mat4_ins3) - TEST_ENTRY(glmc_mat4_mul) - TEST_ENTRY(glmc_mat4_mulN) - TEST_ENTRY(glmc_mat4_mulv) - TEST_ENTRY(glmc_mat4_mulv3) - TEST_ENTRY(glmc_mat4_trace) - TEST_ENTRY(glmc_mat4_trace3) - TEST_ENTRY(glmc_mat4_quat) - TEST_ENTRY(glmc_mat4_transpose_to) - TEST_ENTRY(glmc_mat4_transpose) - TEST_ENTRY(glmc_mat4_scale_p) - TEST_ENTRY(glmc_mat4_scale) - TEST_ENTRY(glmc_mat4_det) - TEST_ENTRY(glmc_mat4_inv) - TEST_ENTRY(glmc_mat4_inv_fast) - TEST_ENTRY(glmc_mat4_swap_col) - TEST_ENTRY(glmc_mat4_swap_row) - TEST_ENTRY(glmc_mat4_rmc) - /* mat3 */ TEST_ENTRY(glm_mat3_copy) TEST_ENTRY(glm_mat3_identity) @@ -833,23 +484,6 @@ TEST_LIST { TEST_ENTRY(glm_mat3_swap_row) TEST_ENTRY(glm_mat3_rmc) - TEST_ENTRY(glmc_mat3_copy) - TEST_ENTRY(glmc_mat3_identity) - TEST_ENTRY(glmc_mat3_identity_array) - TEST_ENTRY(glmc_mat3_zero) - TEST_ENTRY(glmc_mat3_mul) - TEST_ENTRY(glmc_mat3_mulv) - TEST_ENTRY(glmc_mat3_trace) - TEST_ENTRY(glmc_mat3_quat) - TEST_ENTRY(glmc_mat3_transpose_to) - TEST_ENTRY(glmc_mat3_transpose) - TEST_ENTRY(glmc_mat3_scale) - TEST_ENTRY(glmc_mat3_det) - TEST_ENTRY(glmc_mat3_inv) - TEST_ENTRY(glmc_mat3_swap_col) - TEST_ENTRY(glmc_mat3_swap_row) - TEST_ENTRY(glmc_mat3_rmc) - TEST_ENTRY(MACRO_GLM_MAT2_IDENTITY_INIT) TEST_ENTRY(MACRO_GLM_MAT2_ZERO_INIT) TEST_ENTRY(MACRO_GLM_MAT2_IDENTITY) @@ -870,22 +504,6 @@ TEST_LIST { TEST_ENTRY(glm_mat2_swap_row) TEST_ENTRY(glm_mat2_rmc) - TEST_ENTRY(glmc_mat2_copy) - TEST_ENTRY(glmc_mat2_identity) - TEST_ENTRY(glmc_mat2_identity_array) - TEST_ENTRY(glmc_mat2_zero) - TEST_ENTRY(glmc_mat2_mul) - TEST_ENTRY(glmc_mat2_transpose_to) - TEST_ENTRY(glmc_mat2_transpose) - TEST_ENTRY(glmc_mat2_mulv) - TEST_ENTRY(glmc_mat2_trace) - TEST_ENTRY(glmc_mat2_scale) - TEST_ENTRY(glmc_mat2_det) - TEST_ENTRY(glmc_mat2_inv) - TEST_ENTRY(glmc_mat2_swap_col) - TEST_ENTRY(glmc_mat2_swap_row) - TEST_ENTRY(glmc_mat2_rmc) - /* camera */ TEST_ENTRY(camera_lookat) TEST_ENTRY(camera_decomp) @@ -895,13 +513,8 @@ TEST_LIST { TEST_ENTRY(glm_unproject) TEST_ENTRY(glm_project) - TEST_ENTRY(glmc_unprojecti) - TEST_ENTRY(glmc_unproject) - TEST_ENTRY(glmc_project) - /* plane */ TEST_ENTRY(glm_plane_normalize) - TEST_ENTRY(glmc_plane_normalize) /* utils */ TEST_ENTRY(clamp) @@ -911,7 +524,6 @@ TEST_LIST { /* ray */ TEST_ENTRY(glm_ray_triangle) - TEST_ENTRY(glmc_ray_triangle) /* quat */ TEST_ENTRY(MACRO_GLM_QUAT_IDENTITY_INIT) @@ -953,42 +565,6 @@ TEST_LIST { TEST_ENTRY(glm_quat_rotate_at) TEST_ENTRY(glm_quat_rotate_atm) - TEST_ENTRY(glmc_quat_identity) - TEST_ENTRY(glmc_quat_identity_array) - TEST_ENTRY(glmc_quat_init) - TEST_ENTRY(glmc_quatv) - TEST_ENTRY(glmc_quat) - TEST_ENTRY(glmc_quat_copy) - TEST_ENTRY(glmc_quat_norm) - TEST_ENTRY(glmc_quat_normalize_to) - TEST_ENTRY(glmc_quat_normalize) - TEST_ENTRY(glmc_quat_dot) - TEST_ENTRY(glmc_quat_conjugate) - TEST_ENTRY(glmc_quat_inv) - TEST_ENTRY(glmc_quat_add) - TEST_ENTRY(glmc_quat_sub) - TEST_ENTRY(glmc_quat_real) - TEST_ENTRY(glmc_quat_imag) - TEST_ENTRY(glmc_quat_imagn) - TEST_ENTRY(glmc_quat_imaglen) - TEST_ENTRY(glmc_quat_angle) - TEST_ENTRY(glmc_quat_axis) - TEST_ENTRY(glmc_quat_mul) - TEST_ENTRY(glmc_quat_mat4) - TEST_ENTRY(glmc_quat_mat4t) - TEST_ENTRY(glmc_quat_mat3) - TEST_ENTRY(glmc_quat_mat3t) - TEST_ENTRY(glmc_quat_lerp) - TEST_ENTRY(glmc_quat_lerpc) - TEST_ENTRY(glmc_quat_slerp) - TEST_ENTRY(glmc_quat_look) - TEST_ENTRY(glmc_quat_for) - TEST_ENTRY(glmc_quat_forp) - TEST_ENTRY(glmc_quat_rotatev) - TEST_ENTRY(glmc_quat_rotate) - TEST_ENTRY(glmc_quat_rotate_at) - TEST_ENTRY(glmc_quat_rotate_atm) - /* bezier */ TEST_ENTRY(bezier) @@ -1034,41 +610,6 @@ TEST_LIST { TEST_ENTRY(glm_vec2_clamp) TEST_ENTRY(glm_vec2_lerp) - TEST_ENTRY(glmc_vec2) - TEST_ENTRY(glmc_vec2_copy) - TEST_ENTRY(glmc_vec2_zero) - TEST_ENTRY(glmc_vec2_one) - TEST_ENTRY(glmc_vec2_dot) - TEST_ENTRY(glmc_vec2_cross) - TEST_ENTRY(glmc_vec2_norm2) - TEST_ENTRY(glmc_vec2_norm) - TEST_ENTRY(glmc_vec2_add) - TEST_ENTRY(glmc_vec2_adds) - TEST_ENTRY(glmc_vec2_sub) - TEST_ENTRY(glmc_vec2_subs) - TEST_ENTRY(glmc_vec2_mul) - TEST_ENTRY(glmc_vec2_scale) - TEST_ENTRY(glmc_vec2_scale_as) - TEST_ENTRY(glmc_vec2_div) - TEST_ENTRY(glmc_vec2_divs) - TEST_ENTRY(glmc_vec2_addadd) - TEST_ENTRY(glmc_vec2_subadd) - TEST_ENTRY(glmc_vec2_muladd) - TEST_ENTRY(glmc_vec2_muladds) - TEST_ENTRY(glmc_vec2_maxadd) - TEST_ENTRY(glmc_vec2_minadd) - TEST_ENTRY(glmc_vec2_negate_to) - TEST_ENTRY(glmc_vec2_negate) - TEST_ENTRY(glmc_vec2_normalize) - TEST_ENTRY(glmc_vec2_normalize_to) - TEST_ENTRY(glmc_vec2_rotate) - TEST_ENTRY(glmc_vec2_distance2) - TEST_ENTRY(glmc_vec2_distance) - TEST_ENTRY(glmc_vec2_maxv) - TEST_ENTRY(glmc_vec2_minv) - TEST_ENTRY(glmc_vec2_clamp) - TEST_ENTRY(glmc_vec2_lerp) - /* vec3 */ /* Macros */ @@ -1133,8 +674,8 @@ TEST_LIST { TEST_ENTRY(glm_vec3_rotate_m3) TEST_ENTRY(glm_vec3_proj) TEST_ENTRY(glm_vec3_center) - TEST_ENTRY(glmc_vec3_distance2) - TEST_ENTRY(glmc_vec3_distance) + TEST_ENTRY(glm_vec3_distance2) + TEST_ENTRY(glm_vec3_distance) TEST_ENTRY(glm_vec3_maxv) TEST_ENTRY(glm_vec3_minv) TEST_ENTRY(glm_vec3_ortho) @@ -1166,75 +707,6 @@ TEST_LIST { TEST_ENTRY(glm_vec3_hadd) TEST_ENTRY(glm_vec3_sqrt) - TEST_ENTRY(glmc_vec3) - TEST_ENTRY(glmc_vec3_copy) - TEST_ENTRY(glmc_vec3_zero) - TEST_ENTRY(glmc_vec3_one) - TEST_ENTRY(glmc_vec3_dot) - TEST_ENTRY(glmc_vec3_norm2) - TEST_ENTRY(glmc_vec3_norm) - TEST_ENTRY(glmc_vec3_norm_one) - TEST_ENTRY(glmc_vec3_norm_inf) - TEST_ENTRY(glmc_vec3_add) - TEST_ENTRY(glmc_vec3_adds) - TEST_ENTRY(glmc_vec3_sub) - TEST_ENTRY(glmc_vec3_subs) - TEST_ENTRY(glmc_vec3_mul) - TEST_ENTRY(glmc_vec3_scale) - TEST_ENTRY(glmc_vec3_scale_as) - TEST_ENTRY(glmc_vec3_div) - TEST_ENTRY(glmc_vec3_divs) - TEST_ENTRY(glmc_vec3_addadd) - TEST_ENTRY(glmc_vec3_subadd) - TEST_ENTRY(glmc_vec3_muladd) - TEST_ENTRY(glmc_vec3_muladds) - TEST_ENTRY(glmc_vec3_maxadd) - TEST_ENTRY(glmc_vec3_minadd) - TEST_ENTRY(glmc_vec3_negate_to) - TEST_ENTRY(glmc_vec3_negate) - TEST_ENTRY(glmc_vec3_normalize) - TEST_ENTRY(glmc_vec3_normalize_to) - TEST_ENTRY(glmc_vec3_cross) - TEST_ENTRY(glmc_vec3_crossn) - TEST_ENTRY(glmc_vec3_angle) - TEST_ENTRY(glmc_vec3_rotate) - TEST_ENTRY(glmc_vec3_rotate_m4) - TEST_ENTRY(glmc_vec3_rotate_m3) - TEST_ENTRY(glmc_vec3_proj) - TEST_ENTRY(glmc_vec3_center) - TEST_ENTRY(glmc_vec3_distance2) - TEST_ENTRY(glmc_vec3_distance) - TEST_ENTRY(glmc_vec3_maxv) - TEST_ENTRY(glmc_vec3_minv) - TEST_ENTRY(glmc_vec3_ortho) - TEST_ENTRY(glmc_vec3_clamp) - TEST_ENTRY(glmc_vec3_mix) - TEST_ENTRY(glmc_vec3_mixc) - TEST_ENTRY(glmc_vec3_step_uni) - TEST_ENTRY(glmc_vec3_step) - TEST_ENTRY(glmc_vec3_smoothstep_uni) - TEST_ENTRY(glmc_vec3_smoothstep) - TEST_ENTRY(glmc_vec3_smoothinterp) - TEST_ENTRY(glmc_vec3_smoothinterpc) - TEST_ENTRY(glmc_vec3_swizzle) - TEST_ENTRY(glmc_vec3_broadcast) - TEST_ENTRY(glmc_vec3_fill) - TEST_ENTRY(glmc_vec3_eq) - TEST_ENTRY(glmc_vec3_eq_eps) - TEST_ENTRY(glmc_vec3_eq_all) - TEST_ENTRY(glmc_vec3_eqv) - TEST_ENTRY(glmc_vec3_eqv_eps) - TEST_ENTRY(glmc_vec3_max) - TEST_ENTRY(glmc_vec3_min) - TEST_ENTRY(glmc_vec3_isnan) - TEST_ENTRY(glmc_vec3_isinf) - TEST_ENTRY(glmc_vec3_isvalid) - TEST_ENTRY(glmc_vec3_sign) - TEST_ENTRY(glmc_vec3_abs) - TEST_ENTRY(glmc_vec3_fract) - TEST_ENTRY(glmc_vec3_hadd) - TEST_ENTRY(glmc_vec3_sqrt) - /* vec4 */ TEST_ENTRY(MACRO_GLM_VEC4_ONE_INIT) @@ -1317,71 +789,6 @@ TEST_LIST { TEST_ENTRY(glm_vec4_hadd) TEST_ENTRY(glm_vec4_sqrt) - TEST_ENTRY(glmc_vec4) - TEST_ENTRY(glmc_vec4_copy3) - TEST_ENTRY(glmc_vec4_copy) - TEST_ENTRY(glmc_vec4_ucopy) - TEST_ENTRY(glmc_vec4_zero) - TEST_ENTRY(glmc_vec4_one) - TEST_ENTRY(glmc_vec4_dot) - TEST_ENTRY(glmc_vec4_norm2) - TEST_ENTRY(glmc_vec4_norm) - TEST_ENTRY(glmc_vec4_norm_one) - TEST_ENTRY(glmc_vec4_norm_inf) - TEST_ENTRY(glmc_vec4_add) - TEST_ENTRY(glmc_vec4_adds) - TEST_ENTRY(glmc_vec4_sub) - TEST_ENTRY(glmc_vec4_subs) - TEST_ENTRY(glmc_vec4_mul) - TEST_ENTRY(glmc_vec4_scale) - TEST_ENTRY(glmc_vec4_scale_as) - TEST_ENTRY(glmc_vec4_div) - TEST_ENTRY(glmc_vec4_divs) - TEST_ENTRY(glmc_vec4_addadd) - TEST_ENTRY(glmc_vec4_subadd) - TEST_ENTRY(glmc_vec4_muladd) - TEST_ENTRY(glmc_vec4_muladds) - TEST_ENTRY(glmc_vec4_maxadd) - TEST_ENTRY(glmc_vec4_minadd) - TEST_ENTRY(glmc_vec4_negate_to) - TEST_ENTRY(glmc_vec4_negate) - TEST_ENTRY(glmc_vec4_normalize) - TEST_ENTRY(glmc_vec4_normalize_to) - TEST_ENTRY(glmc_vec4_distance2) - TEST_ENTRY(glmc_vec4_distance) - TEST_ENTRY(glmc_vec4_maxv) - TEST_ENTRY(glmc_vec4_minv) - TEST_ENTRY(glmc_vec4_clamp) - TEST_ENTRY(glmc_vec4_lerp) - TEST_ENTRY(glmc_vec4_lerpc) - TEST_ENTRY(glmc_vec4_mix) - TEST_ENTRY(glmc_vec4_mixc) - TEST_ENTRY(glmc_vec4_step_uni) - TEST_ENTRY(glmc_vec4_step) - TEST_ENTRY(glmc_vec4_smoothstep_uni) - TEST_ENTRY(glmc_vec4_smoothstep) - TEST_ENTRY(glmc_vec4_smoothinterp) - TEST_ENTRY(glmc_vec4_smoothinterpc) - TEST_ENTRY(glmc_vec4_cubic) - TEST_ENTRY(glmc_vec4_swizzle) - TEST_ENTRY(glmc_vec4_broadcast) - TEST_ENTRY(glmc_vec4_fill) - TEST_ENTRY(glmc_vec4_eq) - TEST_ENTRY(glmc_vec4_eq_eps) - TEST_ENTRY(glmc_vec4_eq_all) - TEST_ENTRY(glmc_vec4_eqv) - TEST_ENTRY(glmc_vec4_eqv_eps) - TEST_ENTRY(glmc_vec4_max) - TEST_ENTRY(glmc_vec4_min) - TEST_ENTRY(glmc_vec4_isnan) - TEST_ENTRY(glmc_vec4_isinf) - TEST_ENTRY(glmc_vec4_isvalid) - TEST_ENTRY(glmc_vec4_sign) - TEST_ENTRY(glmc_vec4_abs) - TEST_ENTRY(glmc_vec4_fract) - TEST_ENTRY(glmc_vec4_hadd) - TEST_ENTRY(glmc_vec4_sqrt) - /* structs */ TEST_ENTRY(mat3s_identity_init) TEST_ENTRY(mat3s_zero_init) diff --git a/win/cglm.vcxproj b/win/cglm.vcxproj index a95f21e17..bdabc943d 100644 --- a/win/cglm.vcxproj +++ b/win/cglm.vcxproj @@ -18,55 +18,12 @@ x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -127,7 +84,9 @@ - + + + 15.0 diff --git a/win/cglm.vcxproj.filters b/win/cglm.vcxproj.filters index fe23bd68f..4e56a600b 100644 --- a/win/cglm.vcxproj.filters +++ b/win/cglm.vcxproj.filters @@ -15,9 +15,6 @@ {b982cbd3-03d9-4557-bed8-8224e4d95945} - - {6a2a4ebb-ac68-4ed6-a4a1-f6d2243814e9} - {4bcb64d3-e522-48f7-85ef-3ddfacf50874} @@ -35,101 +32,6 @@ - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - - - src - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - - - include\cglm\call - include\cglm\simd\avx @@ -160,9 +62,6 @@ include\cglm - - include\cglm - include\cglm @@ -208,21 +107,12 @@ include\cglm - - include\cglm\call - - - include\cglm\call - include\cglm include\cglm - - include\cglm\call - include\cglm @@ -232,18 +122,9 @@ include\cglm - - include\cglm\call - - - include\cglm\call - include\cglm - - include\cglm\call - include\cglm @@ -256,18 +137,12 @@ include\cglm\simd - - include\cglm\call - include\cglm include\cglm - - include\cglm\call - include\cglm @@ -331,12 +206,6 @@ include\cglm - - include\cglm\call - - - include\cglm\call - include\cglm\struct @@ -359,4 +228,9 @@ include\cglm\simd\sse2 + + + src + + \ No newline at end of file