diff --git a/include/cglm/call/affine.h b/include/cglm/call/affine.h index 4d3834b..c11405b 100644 --- a/include/cglm/call/affine.h +++ b/include/cglm/call/affine.h @@ -97,6 +97,20 @@ 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 diff --git a/include/cglm/call/cam.h b/include/cglm/call/cam.h index 35fb18d..befc9b4 100644 --- a/include/cglm/call/cam.h +++ b/include/cglm/call/cam.h @@ -33,6 +33,26 @@ glmc_ortho(float left, 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, @@ -41,6 +61,14 @@ glmc_perspective(float fovy, float farVal, mat4 dest); +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); @@ -53,6 +81,58 @@ 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 diff --git a/include/cglm/call/mat3.h b/include/cglm/call/mat3.h index ceebc7e..1a92de4 100644 --- a/include/cglm/call/mat3.h +++ b/include/cglm/call/mat3.h @@ -40,6 +40,10 @@ CGLM_EXPORT void glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest); +CGLM_EXPORT +void +glmc_mat3_quat(mat3 m, versor dest); + CGLM_EXPORT void glmc_mat3_scale(mat3 m, float s); diff --git a/include/cglm/call/mat4.h b/include/cglm/call/mat4.h index c9ad796..ef75623 100644 --- a/include/cglm/call/mat4.h +++ b/include/cglm/call/mat4.h @@ -85,6 +85,10 @@ 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); diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index 8fcee4f..50a6b22 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -136,6 +136,10 @@ CGLM_EXPORT void glmc_vec_rotate_m4(mat4 m, vec3 v, vec3 dest); +CGLM_EXPORT +void +glmc_vec_rotate_m3(mat3 m, vec3 v, vec3 dest); + CGLM_EXPORT void glmc_vec_proj(vec3 a, vec3 b, vec3 dest); diff --git a/src/affine.c b/src/affine.c index a271f9f..a818bd1 100644 --- a/src/affine.c +++ b/src/affine.c @@ -133,3 +133,21 @@ 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/cam.c b/src/cam.c index aeac3c7..4a8567f 100644 --- a/src/cam.c +++ b/src/cam.c @@ -44,6 +44,36 @@ glmc_ortho(float left, 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, @@ -58,6 +88,18 @@ glmc_perspective(float fovy, dest); } +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, @@ -78,3 +120,75 @@ 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/mat3.c b/src/mat3.c index c39932d..4455b0f 100644 --- a/src/mat3.c +++ b/src/mat3.c @@ -44,6 +44,12 @@ glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest) { glm_mat3_mulv(m, v, dest); } +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) { diff --git a/src/mat4.c b/src/mat4.c index 9407684..95f6690 100644 --- a/src/mat4.c +++ b/src/mat4.c @@ -110,6 +110,12 @@ 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) { diff --git a/src/vec3.c b/src/vec3.c index 28fda51..401b983 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -188,6 +188,12 @@ glmc_vec_rotate_m4(mat4 m, vec3 v, vec3 dest) { glm_vec_rotate_m4(m, v, dest); } +CGLM_EXPORT +void +glmc_vec_rotate_m3(mat3 m, vec3 v, vec3 dest) { + glm_vec_rotate_m3(m, v, dest); +} + CGLM_EXPORT void glmc_vec_proj(vec3 a, vec3 b, vec3 dest) {