diff --git a/README.md b/README.md index 77c9b3f..89d1709 100644 --- a/README.md +++ b/README.md @@ -20,29 +20,35 @@ The original glm library is for C++ only (templates, namespaces, classes...), th ##Features - general purpose matrix operations (mat4, mat3) +- chain matrix multiplication (square only) - general purpose vector operations (cross, dot, ...) - affine transforms +- matrix decomposition (extract rotation, scaling factor) - optimized affine transform matrices (mul, rigid-body inverse) - camera (lookat) - projections (ortho, perspective) - quaternions -- euler angles / yaw-pitch-roll +- euler angles / yaw-pitch-roll to matrix +- extract euler angles +- inline or pre-compiled function call
-This library is header only so you dont need link to application. All functions are marked inline (always_inline) so compiler probably will inline all these functions +You have two option to call a function/operation: inline or library call (link) +Almost all functions are marked inline (always_inline) so compiler probably will inline. +To call pre-compiled version, just use `glmc_` (c stands for 'call') instead of `glm_`. +```C + #include /* for inline */ + #include /* for library call (this also includes cglm.h) */ + + mat4 rot, trans, rt; + /* ... */ + glm_mul(trans, rot, rt); /* inline */ + glmc_mul(trans, rot, rt); /* call from library */ +``` Most of math functions are optimized manualy with SSE2 if available, if not? Dont worry there are non-sse versions of all operations -This library provides: - -- Simple usage -- Small memory footprint -- The codes are small and more readable than C++ templates, metafuncs -- Optimized operations with SIMD and non-SIMD -- All operations are inline (if compiler will do), no function call overhead -- Chain matrix multiplication (square only) - You can pass matrices and vectors as array to functions rather than get address. ```C @@ -69,8 +75,23 @@ glm_inv_tr(modelMat); ##License MIT. check the LICENSE file -##Install -Import the library to your include folder, thats it! +## Build + +### Unix (Autotools) + +```text +$ sh autogen.sh +$ ./configure +$ make +$ make install +$ [sudo] make install +``` + +### Windows (MSBuild) + +```text +TODO: +``` ##Notes diff --git a/autogen.sh b/autogen.sh new file mode 100644 index 0000000..5bb2d9d --- /dev/null +++ b/autogen.sh @@ -0,0 +1,21 @@ +#! /bin/sh +# +# Copyright (c), Recep Aslantas. +# +# MIT License (MIT), http://opensource.org/licenses/MIT +# Full license can be found in the LICENSE file +# + +cd `dirname "$0"` + +if [ "`uname`" = "Darwin" ]; then + libtoolBin=$(which glibtoolize) + libtoolBinDir=$(dirname "${libtoolBin}") + ln -s $libtoolBin "${libtoolBinDir}/libtoolize" +fi + +autoheader +libtoolize +aclocal -I m4 +autoconf +automake --add-missing --copy diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..a2287a5 --- /dev/null +++ b/configure.ac @@ -0,0 +1,57 @@ +#***************************************************************************** +# Copyright (c), Recep Aslantas. * +# * +# MIT License (MIT), http://opensource.org/licenses/MIT * +# Full license can be found in the LICENSE file * +# * +#***************************************************************************** + +AC_PREREQ([2.69]) +AC_INIT([cglm], [0.1.0], [info@recp.me]) +AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) + +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_SRCDIR([src/]) +AC_CONFIG_HEADERS([config.h]) + +# Checks for programs. +AC_PROG_CC +AM_PROG_CC_C_O + +AC_PROG_INSTALL +AM_PROG_AR + +AC_ENABLE_SHARED +AC_ENABLE_STATIC + +LT_INIT + +# Checks for libraries. +AC_CHECK_LIB([m], [floor]) + +AC_SYS_LARGEFILE + +# Checks for header files. +AC_CHECK_HEADERS([limits.h \ + stddef.h \ + stdint.h \ + stdlib.h \ + string.h ]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_HEADER_STDBOOL +AC_C_INLINE +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_SIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE + +AC_CONFIG_FILES([makefile]) + +AC_OUTPUT diff --git a/include/call/cglmc-affine.h b/include/call/cglmc-affine.h new file mode 100644 index 0000000..7329a22 --- /dev/null +++ b/include/call/cglmc-affine.h @@ -0,0 +1,85 @@ +/* + * 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 + +#include "../cglm.h" + +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_to(mat4 m, vec3 v, mat4 dest); + +CGLM_EXPORT +void +glmc_scale(mat4 m, vec3 v); + +CGLM_EXPORT +void +glmc_scale1(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_ndc_make(mat4 m, float angle, vec3 axis_ndc); + +CGLM_EXPORT +void +glmc_rotate_make(mat4 m, float angle, vec3 axis); + +CGLM_EXPORT +void +glmc_rotate_ndc(mat4 m, float angle, vec3 axis_ndc); + +CGLM_EXPORT +void +glmc_rotate(mat4 m, float angle, vec3 axis); + +CGLM_EXPORT +void +glmc_decompose_scalev(mat4 m, vec3 s); + +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); + +#endif /* cglmc_affine_h */ diff --git a/include/call/cglmc-cam.h b/include/call/cglmc-cam.h new file mode 100644 index 0000000..cf688ec --- /dev/null +++ b/include/call/cglmc-cam.h @@ -0,0 +1,48 @@ +/* + * 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 + +#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_perspective(float fovy, + float aspect, + float nearVal, + float farVal, + mat4 dest); + +CGLM_EXPORT +void +glmc_lookat(vec3 eye, + vec3 center, + vec3 up, + mat4 dest); + +#endif /* cglmc_cam_h */ diff --git a/include/call/cglmc-euler.h b/include/call/cglmc-euler.h new file mode 100644 index 0000000..6a3a496 --- /dev/null +++ b/include/call/cglmc-euler.h @@ -0,0 +1,45 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef glmc_euler_h +#define glmc_euler_h + +#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_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_sq axis, mat4 dest); + +#endif /* glmc_euler_h */ diff --git a/include/call/cglmc-io.h b/include/call/cglmc-io.h new file mode 100644 index 0000000..6a36a53 --- /dev/null +++ b/include/call/cglmc-io.h @@ -0,0 +1,38 @@ +/* + * 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 + +#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); + +#endif /* cglmc_io_h */ diff --git a/include/call/cglmc-mat.h b/include/call/cglmc-mat.h new file mode 100644 index 0000000..3ec3bd8 --- /dev/null +++ b/include/call/cglmc-mat.h @@ -0,0 +1,81 @@ +/* + * 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 + +#include "../cglm.h" + +CGLM_EXPORT +void +glmc_mat4_udup(mat4 mat, mat4 dest); + +CGLM_EXPORT +void +glmc_mat4_dup(mat4 mat, mat4 dest); + +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[], int len, mat4 dest); + +CGLM_EXPORT +void +glmc_mat4_mulv(mat4 m, vec4 v, vec4 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_swap_col(mat4 mat, int col1, int col2); + +CGLM_EXPORT +void +glmc_mat4_swap_row(mat4 mat, int row1, int row2); + +#endif /* cglmc_mat_h */ diff --git a/include/call/cglmc-mat3.h b/include/call/cglmc-mat3.h new file mode 100644 index 0000000..de07ade --- /dev/null +++ b/include/call/cglmc-mat3.h @@ -0,0 +1,53 @@ +/* + * 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 + +#include "../cglm.h" + +CGLM_EXPORT +void +glmc_mat3_dup(mat3 mat, mat3 dest); + +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 +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); + +#endif /* cglmc_mat3_h */ diff --git a/include/call/cglmc-quat.h b/include/call/cglmc-quat.h new file mode 100644 index 0000000..5875208 --- /dev/null +++ b/include/call/cglmc-quat.h @@ -0,0 +1,48 @@ +/* + * 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 + +#include "../cglm.h" + +CGLM_EXPORT +void +glmc_quat_init(versor q, + float angle, + float x, + float y, + float z); + +CGLM_EXPORT +float +glmc_quat_norm(versor q); + +CGLM_EXPORT +void +glmc_quat_normalize(versor q); + +CGLM_EXPORT +float +glmc_quat_dot(versor q, versor r); + +CGLM_EXPORT +void +glmc_quat_mulv(versor q1, versor q2, versor dest); + +CGLM_EXPORT +void +glmc_quat_mat4(versor q, mat4 dest); + +CGLM_EXPORT +void +glmc_quat_slerp(versor q, + versor r, + float t, + versor dest); + +#endif /* cglmc_quat_h */ diff --git a/include/call/cglmc-vec.h b/include/call/cglmc-vec.h new file mode 100644 index 0000000..3a68203 --- /dev/null +++ b/include/call/cglmc-vec.h @@ -0,0 +1,93 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_vec_h +#define cglm_vec_h + +#include "../cglm.h" + +CGLM_EXPORT +void +glmc_vec_dup(vec3 a, vec3 dest); + +CGLM_EXPORT +void +glmc_vec4_dup3(vec4 a, vec3 dest); + +CGLM_EXPORT +void +glmc_vec4_dup(vec4 v, vec4 dest); + +CGLM_EXPORT +float +glmc_vec_dot(vec3 a, vec3 b); + +CGLM_EXPORT +float +glmc_vec4_dot(vec4 a, vec4 b); + +CGLM_EXPORT +void +glmc_vec_cross(vec3 a, vec3 b, vec3 d); + +CGLM_EXPORT +float +glmc_vec_norm(vec3 vec); + +CGLM_EXPORT +float +glmc_vec4_norm(vec4 vec); + +CGLM_EXPORT +void +glmc_vec_normalize_to(vec3 vec, vec3 dest); + +CGLM_EXPORT +void +glmc_vec4_normalize_to(vec4 vec, vec4 dest); + +CGLM_EXPORT +void +glmc_vec_normalize(vec3 v); + +CGLM_EXPORT +void +glmc_vec4_normalize(vec4 v); + +CGLM_EXPORT +void +glmc_vec_add(vec3 v1, vec3 v2, vec3 dest); + +CGLM_EXPORT +void +glmc_vec4_add(vec4 v1, vec4 v2, vec4 dest); + +CGLM_EXPORT +void +glmc_vec_sub(vec3 v1, vec3 v2, vec3 dest); + +CGLM_EXPORT +void +glmc_vec4_sub(vec4 v1, vec4 v2, vec4 dest); + +CGLM_EXPORT +void +glmc_vec_scale(vec3 v, float s, vec3 dest); + +CGLM_EXPORT +void +glmc_vec_flipsign(vec3 v); + +CGLM_EXPORT +void +glmc_vec4_flipsign(vec4 v); + +CGLM_EXPORT +void +glmc_vec4_scale(vec4 v, float s, vec4 dest); + +#endif /* cglm_vec_h */ diff --git a/include/cglm-call.h b/include/cglm-call.h new file mode 100644 index 0000000..a92b18a --- /dev/null +++ b/include/cglm-call.h @@ -0,0 +1,21 @@ +/* + * 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 + +#include "cglm.h" +#include "call/cglmc-vec.h" +#include "call/cglmc-mat.h" +#include "call/cglmc-mat3.h" +#include "call/cglmc-affine.h" +#include "call/cglmc-cam.h" +#include "call/cglmc-quat.h" +#include "call/cglmc-euler.h" +#include "call/cglmc-io.h" + +#endif /* cglm_call_h */ diff --git a/include/cglm-common.h b/include/cglm-common.h index 8c2ecf6..7b75e34 100644 --- a/include/cglm-common.h +++ b/include/cglm-common.h @@ -14,8 +14,14 @@ #include #if defined(_WIN32) +# ifdef CGLM_DLL +# define CGLM_EXPORT __declspec(dllexport) +# else +# define CGLM_EXPORT __declspec(dllimport) +# endif # define CGLM_INLINE __forceinline #else +# define CGLM_EXPORT __attribute__((visibility("default"))) # define CGLM_INLINE static inline __attribute((always_inline)) #endif diff --git a/makefile.am b/makefile.am new file mode 100644 index 0000000..a103d5a --- /dev/null +++ b/makefile.am @@ -0,0 +1,61 @@ +#****************************************************************************** +# Copyright (c), Recep Aslantas. * +# * +# MIT License (MIT), http://opensource.org/licenses/MIT * +# Full license can be found in the LICENSE file * +# * +#****************************************************************************** + +ACLOCAL_AMFLAGS = -I m4 + +AM_CFLAGS = -Wall \ + -std=gnu99 \ + -O3 \ + -Wstrict-aliasing=2 \ + -fstrict-aliasing \ + -Wpedantic + +lib_LTLIBRARIES = libcglm.la +libcglm_la_LDFLAGS = -no-undefined -version-info 0:1:0 + +nobase_include_HEADERS = include/cglm.h \ + include/cglm-call.h \ + include/cglm-cam.h \ + include/cglm-io.h \ + include/cglm-mat3.h \ + include/cglm-types.h \ + include/cglm-common.h \ + include/cglm-affine.h \ + include/cglm-vec.h \ + include/cglm-euler.h \ + include/cglm-util.h \ + include/cglm-quat.h \ + include/cglm-mat.h \ + include/cglm-affine-mat.h \ + include/cglm-platform.h \ + include/cglm-mat-simd-avx.h \ + include/cglm-affine-mat-avx.h \ + include/cglm-opengl.h \ + include/cglm-quat-simd.h \ + include/cglm-affine-mat-sse2.h \ + include/cglm-mat3-simd-sse2.h \ + include/cglm-mat-simd-sse2.h \ + include/cglm-intrin.h \ + include/call/cglmc-euler.h \ + include/call/cglmc-quat.h \ + include/call/cglmc-cam.h \ + include/call/cglmc-io.h \ + include/call/cglmc-affine.h \ + include/call/cglmc-vec.h \ + include/call/cglmc-mat3.h \ + include/call/cglmc-mat.h + +libcglm_la_SOURCES=\ + src/cglm-euler.c \ + src/clgm-affine.c \ + src/cglm-io.c \ + src/cglm-quat.c \ + src/cglm-cam.c \ + src/cglm-vec.c \ + src/cglm-mat3.c \ + src/cglm-mat.c diff --git a/src/cglm-cam.c b/src/cglm-cam.c new file mode 100644 index 0000000..a5d864d --- /dev/null +++ b/src/cglm-cam.c @@ -0,0 +1,67 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.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_perspective(float fovy, + float aspect, + float nearVal, + float farVal, + mat4 dest) { + glm_perspective(fovy, + aspect, + nearVal, + farVal, + dest); +} + +CGLM_EXPORT +void +glmc_lookat(vec3 eye, + vec3 center, + vec3 up, + mat4 dest) { + glm_lookat(eye, center, up, dest); +} diff --git a/src/cglm-euler.c b/src/cglm-euler.c new file mode 100644 index 0000000..3e84490 --- /dev/null +++ b/src/cglm-euler.c @@ -0,0 +1,56 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.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_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_sq axis, mat4 dest) { + glm_euler_by_order(angles, axis, dest); +} diff --git a/src/cglm-io.c b/src/cglm-io.c new file mode 100644 index 0000000..6d2be00 --- /dev/null +++ b/src/cglm-io.c @@ -0,0 +1,43 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.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/cglm-mat.c b/src/cglm-mat.c new file mode 100644 index 0000000..9cd121c --- /dev/null +++ b/src/cglm-mat.c @@ -0,0 +1,110 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.h" + +CGLM_EXPORT +void +glmc_mat4_udup(mat4 mat, mat4 dest) { + glm_mat4_dup(mat, dest); +} + +CGLM_EXPORT +void +glmc_mat4_dup(mat4 mat, mat4 dest) { + glm_mat4_dup(mat, dest); +} + +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[], int 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_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_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); +} diff --git a/src/cglm-mat3.c b/src/cglm-mat3.c new file mode 100644 index 0000000..d22e576 --- /dev/null +++ b/src/cglm-mat3.c @@ -0,0 +1,68 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.h" + +CGLM_EXPORT +void +glmc_mat3_dup(mat3 mat, mat3 dest) { + glm_mat3_dup(mat, dest); +} + +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 +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); +} diff --git a/src/cglm-quat.c b/src/cglm-quat.c new file mode 100644 index 0000000..4010f97 --- /dev/null +++ b/src/cglm-quat.c @@ -0,0 +1,57 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.h" + +CGLM_EXPORT +void +glmc_quat_init(versor q, + float angle, + float x, + float y, + float z) { + glm_quat_init(q, angle, x, y, z); +} + +CGLM_EXPORT +float +glmc_quat_norm(versor q) { + return glm_quat_norm(q); +} + +CGLM_EXPORT +void +glmc_quat_normalize(versor q) { + glm_quat_normalize(q); +} + +CGLM_EXPORT +float +glmc_quat_dot(versor q, versor r) { + return glm_quat_dot(q, r); +} + +CGLM_EXPORT +void +glmc_quat_mulv(versor q1, versor q2, versor dest) { + glm_quat_mulv(q1, q2, dest); +} + +CGLM_EXPORT +void +glmc_quat_mat4(versor q, mat4 dest) { + glm_quat_mat4(q, dest); +} + +CGLM_EXPORT +void +glmc_quat_slerp(versor q, + versor r, + float t, + versor dest) { + glm_quat_slerp(q, r, t, dest); +} diff --git a/src/cglm-vec.c b/src/cglm-vec.c new file mode 100644 index 0000000..0978e30 --- /dev/null +++ b/src/cglm-vec.c @@ -0,0 +1,128 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.h" + +CGLM_EXPORT +void +glmc_vec_dup(vec3 a, vec3 dest) { + glm_vec_dup(a, dest); +} + +CGLM_EXPORT +void +glmc_vec4_dup3(vec4 a, vec3 dest) { + glm_vec4_dup3(a, dest); +} + +CGLM_EXPORT +void +glmc_vec4_dup(vec4 v, vec4 dest) { + glm_vec4_dup(v, dest); +} + +CGLM_EXPORT +float +glmc_vec_dot(vec3 a, vec3 b) { + return glm_vec_dot(a, b); +} + +CGLM_EXPORT +float +glmc_vec4_dot(vec4 a, vec4 b) { + return glm_vec4_dot(a, b); +} + +CGLM_EXPORT +void +glmc_vec_cross(vec3 a, vec3 b, vec3 d) { + glm_vec_cross(a, b, d); +} + +CGLM_EXPORT +float +glmc_vec_norm(vec3 vec) { + return glm_vec_norm(vec); +} + +CGLM_EXPORT +float +glmc_vec4_norm(vec4 vec) { + return glm_vec4_norm(vec); +} + +CGLM_EXPORT +void +glmc_vec_normalize_to(vec3 vec, vec3 dest) { + glm_vec_normalize_to(vec, dest); +} + +CGLM_EXPORT +void +glmc_vec4_normalize_to(vec4 vec, vec4 dest) { + glm_vec4_normalize_to(vec, dest); +} + +CGLM_EXPORT +void +glmc_vec_normalize(vec3 v) { + glm_vec_normalize(v); +} + +CGLM_EXPORT +void +glmc_vec4_normalize(vec4 v) { + glm_vec4_normalize(v); +} + +CGLM_EXPORT +void +glmc_vec_add(vec3 v1, vec3 v2, vec3 dest) { + glm_vec_add(v1, v2, dest); +} + +CGLM_EXPORT +void +glmc_vec4_add(vec4 v1, vec4 v2, vec4 dest) { + glm_vec4_add(v1, v2, dest); +} + +CGLM_EXPORT +void +glmc_vec_sub(vec3 v1, vec3 v2, vec3 dest) { + glm_vec_sub(v1, v2, dest); +} + +CGLM_EXPORT +void +glmc_vec4_sub(vec4 v1, vec4 v2, vec4 dest) { + glm_vec4_sub(v1, v2, dest); +} + +CGLM_EXPORT +void +glmc_vec_scale(vec3 v, float s, vec3 dest) { + glm_vec_scale(v, s, dest); +} + +CGLM_EXPORT +void +glmc_vec_flipsign(vec3 v) { + glm_vec_flipsign(v); +} + +CGLM_EXPORT +void +glmc_vec4_flipsign(vec4 v) { + glm_vec4_flipsign(v); +} + +CGLM_EXPORT +void +glmc_vec4_scale(vec4 v, float s, vec4 dest) { + glm_vec4_scale(v, s, dest); +} diff --git a/src/clgm-affine.c b/src/clgm-affine.c new file mode 100644 index 0000000..c739113 --- /dev/null +++ b/src/clgm-affine.c @@ -0,0 +1,116 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "../include/cglm.h" + +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_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_scale1(mat4 m, float s) { + glm_scale1(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_ndc_make(mat4 m, float angle, vec3 axis_ndc) { + glm_rotate_ndc_make(m, angle, axis_ndc); +} + +CGLM_EXPORT +void +glmc_rotate_make(mat4 m, float angle, vec3 axis) { + glm_rotate_make(m, angle, axis); +} + +CGLM_EXPORT +void +glmc_rotate_ndc(mat4 m, float angle, vec3 axis_ndc) { + glm_rotate_ndc(m, angle, axis_ndc); +} + +CGLM_EXPORT +void +glmc_rotate(mat4 m, float angle, vec3 axis) { + glm_rotate(m, angle, axis); +} + +CGLM_EXPORT +void +glmc_decompose_scalev(mat4 m, vec3 s) { + glm_decompose_scalev(m, s); +} + +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); +}